例えば、他のアプリのウィンドウサイズを変更したい場合や、タイトルを取得したい場合などにハンドル値が必要な場合がよくあります。
ハンドル値はWindows APIで使用する場合に使われる場合が多く、取得もAPIで可能です。
ここでは、ユーザーフォーム・Excelウィンドウ・デスクトップのハンドルを取得する方法を掲載します。
ウィンドウハンドルを取得するには、FindWindowを使用します。
FindWindowの構文:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
戻り値:成功すると、ウィンドウのハンドルが返ります。見つからないと、NULLが返ります。
- lpClassName:ウィンドウクラス名を指定します。NULLを指定すると全ウィンドウクラスが対象になります。
- lpWindowName:ウィンドウタイトルを指定します。
主なアプリのウィンドウクラス名は下記になります。
アプリケーション名 |
ウィンドウクラス名 |
Excel |
XLMAIN |
Word |
OpusApp |
Access |
OMain |
PowerPoint |
PP10FrameClass |
エクスプローラ |
ExploreWClass |
メモ帳 |
Notepad |
ペイント |
MSPaintApp |
デスクトップのハンドルを取得するには、GetDesktopWindowを使用します。
GetDesktopWindowの構文:
Declare Function GetDesktopWindow Lib "user32" () As Long
戻り値:成功すると、デスクトップのハンドルが返ります。見つからないと、NULLが返ります。
ウィンドウハンドルを使用する「Excel VBA:他のファイルを実行する、他のファイルを開く」を掲載していますので、参考にしてください。
ウィンドウハンドルを取得するVBA
Excel VBA シートコード
VBAの解説
- DeclareステートメントでFindWindowを宣言します。
- DeclareステートメントでGetDesktopWindowを宣言します。
- コマンドボタン1のクリックイベントで、ユーザーフォームのハンドルを取得します。
FindWindowの引数に、NULL値(vbNullString)とフォームのタイトルを指定し実行します。
- コマンドボタン2のクリックイベントで、Excel本体のハンドルを取得します。
FindWindowの引数に、Excelのウィンドウクラス名XLMAINと、Excelのタイトルを指定し実行します。
- コマンドボタン3のクリックイベントで、GetDesktopWindowを実行しデスクトップのハンドルを取得を取得します。
'ウィンドウハンドルを取得する
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'デスクトップのハンドルを取得する
Private Declare Function GetDesktopWindow Lib "user32" () As Long
'コマンドボタンのクリックイベント
Private Sub CommandButton1_Click()
Dim hwnd As Long
'ユーザーフォームのハンドルを取得
hwnd = FindWindow(vbNullString, Me.Caption)
End Sub
'コマンドボタンのクリックイベント
Private Sub aaCommandButton2_Click()
Dim hwnd As Long
'Excelのハンドルを取得
hwnd = FindWindow("XLMAIN", Application.Caption)
End Sub
'コマンドボタンのクリックイベント
Private Sub aaCommandButton3_Click()
Dim hwnd As Long
'デスクトップのハンドルを取得する
hwnd = GetDesktopWindow
End Sub