Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Visual Basic
Expertise: Intermediate
Nov 13, 1998



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Invoke "Open With ..." Dialog Box

When launching a data file with the ShellExecute() function, Windows tries to find the associated application and open the data file with this application. But what happens if no association exists? ShellExecute() simply returns error code 31 (no association) and nothing happens. Wouldn't it be nice if your program invoked the "Open with ..." dialog box so you can choose which application you want to associate with your data file? Here's a solution-call the ShellDoc routine and pass a fully qualified path/file name of the data file you wish to open:
Option Explicit

Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function ShellExecute Lib _
	"shell32.dll" Alias "ShellExecuteA" _
	(ByVal hWnd As Long, ByVal lpOperation _
	As String, ByVal lpFile As String, _
	ByVal lpParameters As String, _
	ByVal lpDirectory As String, _
	ByVal nShowCmd As Long) As Long
Declare Function GetSystemDirectory Lib _
	"kernel32" Alias "GetSystemDirectoryA" _
	(ByVal lpBuffer As String, ByVal nSize _
	As Long) As Long
Private Const SE_ERR_NOASSOC = 31
Public Sub ShellDoc(strFile As String)
	Dim lngRet As Long
	Dim strDir As String
	lngRet = ShellExecute(GetDesktopWindow, _
		"open", strFile, _
		vbNullString, vbNullString, vbNormalFocus)
	If lngRet = SE_ERR_NOASSOC Then
		' no association exists
		strDir = Space(260)
		lngRet = GetSystemDirectory(strDir, _
		strDir = Left(strDir, lngRet)
		' show the Open with dialog box
		Call ShellExecute(GetDesktopWindow, _
			vbNullString, "RUNDLL32.EXE", _
			"shell32.dll,OpenAs_RunDLL " & _
			strFile, strDir, vbNormalFocus)
	End If
End Sub
Thomas Weidmann
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date