ShellExecuteEx APIを使って、ファイルのプロパティダイアログの表示やクリッカブルURLの実装などを行ないます。
Visual Basic 6(SP3) + Windows95/98 + Internet Explorer 5で動作確認をしています。
[ 戻る ]
ShellExecuteEx API、およびクリッカブルURLの実装方法で使用するAPIを以下に示します。ShellExecuteExはShellExecuteと比べて機能が拡張されています。
機能 | 指定ファイルを指定した動作で実行します。 | |
---|---|---|
宣言 |
|
|
引数 | lpExecInfo | SHELLEXECUTEINFO構造体のアドレス |
戻り値 |
|
機能 | デスクトップウィンドウのハンドルを取得します。 | |
---|---|---|
宣言 |
|
|
引数 | なし | |
戻り値 | デスクトップウィンドウのハンドル |
使用する構造体を次に示します。
宣言 |
|
|||
---|---|---|---|---|
メンバ | cbSize | 構造体のサイズ | ||
fMask | 処理制御フラグ。2つ以上設定するときはOr演算子で結びます。
|
|||
hWnd | ShellExecuteEXを呼び出すウィンドウのハンドル | |||
lpVerb | 処理制御文字列。指定しないときは"open"になります。
|
|||
lpFile | 起動するファイルの名前 | |||
lpParameters | 起動する実行可能ファイルへのパラメータ(lpFileメンバが実行可能ファイルのとき)。lpFileメンバがドキュメントファイルのときは設定しないで下さい。 | |||
lpDirectory | 作業用ディレクトリ。設定しないときはカレントディレクトリになります。 | |||
nShow | 起動する実行ファイルのウィンドウの状態
|
|||
hInstApp |
|
|||
lpIDList | ITEMIDLIST構造体のアドレス。fMaskメンバにSEE_MASK_IDLISTが設定されていないと無視します。(オプション) | |||
lpClass | ファイルクラス名もしくはGUID。fMaskメンバにSEE_MASK_CLASSNAMEが設定されていないと無視します。(オプション) | |||
hkeyClass | ファイルクラスのレジストリキーのハンドル。fMaskメンバにSEE_MASK_CLASSKEYが設定されていないと無視します。(オプション) | |||
dwHotKey | 実行ファイルに関連したホットキー。fMaskメンバにSEE_MASK_HOTKEYが設定されていないと無視します。(オプション) | |||
hIcon | ファイルクラスのアイコンハンドル。fMaskメンバにSEE_MASK_ICONが設定されていないと無視します。(オプション) | |||
hProcess | 実行ファイルのハンドル。fMaskメンバにSEE_MASK_NOCLOSEPROCESSが設定されていないと0になります。(オプション) |
[ 戻る ]
アイコンを右クリックしたときに出るメニュー中の[プロパティ(R)]で表示される、「ファイルのプロパティ」ダイアログを呼び出します。引数FileNameには、プロパティを表示するファイルの名前を設定しておきます。
Public Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (lpExecInfo As SHELLEXECUTEINFO) As Long
Public 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_NOCLOSEPROCESS = &H40
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_FLAG_NO_UI = &H400
Public Sub FileProperty(FileName As String)
'「ファイルのプロパティ」ダイアログを開く
Dim ShellInfo As SHELLEXECUTEINFO
With ShellInfo
.cbSize = Len(ShellInfo)
.fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
.hWnd = Me.hWnd
.lpVerb = "properties" & vbNullChar
.lpFile = FileName & vbNullChar 'プロパティを表示するファイルの名前
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
ShellExecuteEX ShellInfo
End Sub
[ 戻る ]
URLを実行し、関連付けられているWebブラウザを起動します。これはShellExecuteを使っても同様にできます。まずフォームにLabelコントロールを貼り付け、プロパティを設定します。ここに示されている以外のプロパティはデフォルトのままです。URL文字列上でカーソルの形状をかえないときはMouseIcon、MousePointerプロパティはデフォルトの設定で構いません。
プロパティ | (オブジェクト名) | Label1 |
---|---|---|
AutoSize | True | |
Caption | 表示するURL、(例)http://okalab.la.coocan.jp/ | |
Font | MS Pゴシック、標準、9ポイント、下線 | |
ForeColor | vbBlue(= &HFF0000、青) | |
MouseIcon | カーソルファイル名(*.cur、MousePointer = vbCustomのときのみ有効) | |
MousePointer | vbDefault(= 0)もしくはvbCustom(= 99) |
LabelコントロールのClickイベントに以下のコードを記述します。
Public Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (lpExecInfo As SHELLEXECUTEINFO) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public 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 SW_SHOW = 5
Public Const SEE_MASK_FLAG_NO_UI = &H400
Private Sub Label1_Click()
Dim ShellInfo As SHELLEXECUTEINFO
With ShellInfo
.cbSize = Len(ShellInfo)
.fMask = SEE_MASK_FLAG_NO_UI
.hWnd = GetDesktopWindow
.lpVerb = "open" & vbNullChar '"open"のときは省略可
.lpFile = Label1.Caption & vbNullChar '表示するURL
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = SW_SHOW
.hInstApp = 0
.lpIDList = 0
End With
ShellExecuteEX ShellInfo
End Sub
[ 戻る ]
ShellExecuteEx APIと殆ど同じ機能を有するものとして、ShellExecute APIがあります。SellExecuteEx APIとの違いは、「ファイルのプロパティ」ダイアログが開けないことと、関数の引数でパラメータを設定することです。前述のクリッカブルURLの実装は、このAPIを使っても実現できます。
機能 | 指定ファイルを指定した動作で実行します。 | |
---|---|---|
宣言 |
|
|
引数 | hWnd | ShellExecuteを呼び出すウィンドウのハンドル |
lpOperation | 処理制御文字列。指定しないときは"open"になります。設定値はSHELLEXECUTEINFO構造体のlpVerbメンバを参照してください。但し、"properties"は設定できません。 | |
lpFile | 起動するファイルの名前 | |
lpParameters | 起動する実行ファイルへのパラメータ(lpFileが実行可能ファイルのとき)。lpFileがドキュメントファイルのときは設定しないで下さい。 | |
lpDirectory | 作業用ディレクトリ。設定しないときはカレントディレクトリになります。 | |
nShowCmd | 起動する実行可能ファイルのウィンドウの状態。設定値はSHELLEXECUTEINFO構造体のnShowメンバを参照してください。 | |
戻り値 |
|
またVisual Basicには、実行可能ファイルを起動するShell関数があります。この関数では、関連付けされたドキュメントファイルを開くことができないので、実行ファイルのコマンドラインパラメータとして与える必要があります。
機能 | 実行可能プログラムを実行します。 | |||
---|---|---|---|---|
構文 |
|
|||
引数 | PathName | 実行可能ファイル名とコマンドラインパラメータを表わす文字列 | ||
WindowStyle | 以下のVbAppWinStyle定数を指定。SHELLEXECUTEINFO構造体のnShowメンバのSW定数に対応しています。
|
|||
戻り値 | プログラムのタスクID(プロセスID) |
[ 戻る ]