OpenNoDialog




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, _
Len(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

---------------------------------------------------------------------------------------------------------
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:










( opennodialog.html )- by Paolo Puglisi - Modifica del 17/12/2023