Zobrazení dialogového okna pro soubor bez asociace
Přidáno: 7.1.2008
Kategorie: Aplikace
Autor: Ondřej Linhart
Jestliže se např. v Průzkumníku pokusíte otevřít soubor, který není v registru Windows asociován s nějakou aplikací, zobrazí se dialogové okno pro výběr akce: Vyhledat program pomocí webové služby/Vybrat program ze seznamu. Tento útržek kódu vám ukáže jak tento dialog vyvolat pomocí Win32 API.
Může se hodit v případě, že vytváříte nějakou aplikaci ve které bude počítáno se spouštěním libovolných souborů.
Public Const SW_NORMAL As Integer = &H1
<StructLayout(LayoutKind.Sequential)> _
Public Structure LPSHELLEXECUTEINFO
Public cbSize As Integer
Public fMask As Integer
Public hwnd As Integer
<MarshalAs(UnmanagedType.LPWStr)> _
Public lpVerb As String
<MarshalAs(UnmanagedType.LPWStr)> _
Public lpFile As String
<MarshalAs(UnmanagedType.LPWStr)> _
Public lpParameters As String
<MarshalAs(UnmanagedType.LPWStr)> _
Public lpDirectory As String
Public nShow As Integer
Public hInstApp As Integer
Public lpIDList As Integer
Public lpClass As String
Public hkeyClass As Integer
Public dwHotKey As Integer
Public hIcon As Integer
Public hProcess As Integer
End Structure
Public Declare Auto Function ShellExecuteEx Lib "shell32.dll" (ByRef lpExecInfo As LPSHELLEXECUTEINFO) As Boolean
Dim associatedApplication As New Process()
associatedApplication.StartInfo.FileName = "C:\File.xxx"
associatedApplication.StartInfo.UseShellExecute = True
Try
associatedApplication.Start()
Catch ex As Win32Exception
Dim lpExecInfo As New LPSHELLEXECUTEINFO
With lpExecInfo
.cbSize = Runtime.InteropServices.Marshal.SizeOf(lpExecInfo)
.lpFile = associatedApplication.StartInfo.FileName
.lpVerb = "openas"
.nShow = SW_NORMAL
End With
Try
ShellExecuteEx(lpExecInfo)
Catch ex2 As AccessViolationException
End Try
End Try