最終更新日 :
VB Tips

ファイル上で[Shift+右クリック]をすると表示されるメニュー、「アプリケーションから開く(E)...」のダイアログをプログラムから出す方法として、次の方法があります。

APIを使わない方法
Shell関数を実行します。

Shell "rundll32 shell32.dll,OpenAs_RunDLL " & "開きたいファイルの名前", vbNormalFocus

この場合、ファイル名はクォーテーションで囲む必要はありません。また、フォルダも指定することができます。(びっくり!)

APIを使った方法
ShellExecute, ShellExecuteEx関数を実行します。ここでは、ShellExecuteExの場合のみについて説明します。

'構造体
Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long

lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

'定数
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_NOCLOSEPROCESS = &H40

' ShellExecute APIの宣言
Declare Function ShellExecuteEx Lib "shell32.dll" (SHINFO As SHELLEXECUTEINFO) As Long

' 「ファイルを開くアプリケーションの選択」ダイアログを表示する。
Public Sub ShowOpenAsDialog(ByVal strFilename As String, ByVal OwnerHwnd As Long)
Dim SHINFO As SHELLEXECUTEINFO
Dim r As Long

With SHINFO
.cbSize = Len(SHINFO)
.fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST
.hwnd = OwnerHwnd
.lpVerb = vbNullChar
.lpFile = "rundll32"
.lpParameters = "shell32.dll,OpenAs_RunDLL " & strFilename
.lpDirectory = vbNullChar
.nShow = vbNormalFocus
.hInstApp = 0
.lpIDList = 0
End With

'APIを呼び出す
r = ShellExecuteEx(SHINFO)

End Sub


ShellExecute(Ex)関数を使用する時に注意する点は、lpParametersメンバ(ShellExecute関数では引数)に、 VBのShell関数ではつなげていた引数を分けて代入しないといけないことです。
分けていれなかった時は、エラーが表示されます。成功した時は、下のようなダイアログが表示されます。

ファイルを開くアプリケーションの選択

Copyright (C) 1998 Satoshi Tadaフィードバックはこちら
Home