Snippet

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ů.

'Deklarace Win32 API
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


'Použití
Dim associatedApplication As New Process()
'Předpokládejme, že pro soubor s koncovkou xxx není v systému žádná asociace a soubor C:\File.xxx existuje.
associatedApplication.StartInfo.FileName = "C:\File.xxx"
associatedApplication.StartInfo.UseShellExecute = True
Try
  'Pokusí se otevřít soubor standardním způsobem.
  associatedApplication.Start()
Catch ex As Win32Exception
  'Pro tuto operaci není ke zvolenému souboru přidružena žádná aplikace.
  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
    'Zobrazit dialogové okno pro výběr akce.
    ShellExecuteEx(lpExecInfo)
  Catch ex2 As AccessViolationException
  End Try
End Try 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.