クラス名 or キャプションを与えてウィンドウのハンドルを取得
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer, _
ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
引数
hWndParent
子ウィンドウを見つけるときの親ウィンドウのハンドルhwndChildAfter
(デスクトップを親ウィンドウとするとき0)
検索を開始する子ウィンドウのハンドルlpszClass
0を設定したとき、hwndParentの最初の子ウィンドウから検索する
クラス名lpszWindow
ウィンドウのキャプション戻り値
正常終了のとき ウィンドウのハンドル備考
エラーのとき 0
FindWindow()関数との違いは子ウィンドウか検索できること。サンプル
hwndParentとhwndChildAfterが共に0のときトップレベルウィンドウが検索対象。
ダウンロード(FindWindowEx.lzh 2.13KB)Private Sub Command1_Click()
Dim Temp As String, hWnd As Long, Temp2 As String
Dim ClassName As String, WindowName As String
'検索文字列取得
ClassName = Me.Text1(0).Text
WindowName = Me.Text1(1).Text
MsgBox ClassName, , WindowName
'トップレベルウィンドウから検索する
hWnd = FindWindowEx(0, 0, ClassName, WindowName)
If hWnd = 0 Then
Me.Label5.Caption = "見つかりません"
Me.Text2(0).Text = ""
Me.Text2(1).Text = ""
Else
Me.Label5.Caption = "Hit!"
'ウィンドウキャプション取得
Temp = String(256, Chr(0))
Call GetWindowText(hWnd, Temp, 256)
a = InStr(Temp, Chr(0))
If a > 1 Then
Temp = Mid(Temp, 1, a - 1)
Else
Temp = ""
End If
'クラス名取得
Temp2 = String(256, Chr(0))
Call GetClassName(hWnd, Temp2, 256)
a = InStr(Temp2, Chr(0))
If a > 1 Then
Temp2 = Mid(Temp2, 1, a - 1)
Else
Temp2 = ""
End If
'結果表示
Text2(0).Text = "&H" + Hex(hWnd)
Text2(1).Text = Temp
Text2(2).Text = Temp2
End If
End Sub
Private Sub Text1_Change(Index As Integer)
Dim Txt(1) As String
'二つのテキストボックスのテキスト取得
For a = 0 To 1
Txt(a) = Me.Text1(a).Text
Next
If Txt(0) <> "" Or Txt(1) <> "" Then
Me.Command1.Enabled = True
Else
Me.Command1.Enabled = False
End If
End Sub