2012年8月5日日曜日

[ExcelVBA] FindWindowEx


■説明
親ハンドル、クラス名、ウィンドウ名から子ハンドルを探す関数

■宣言
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

第一引数:親ハンドルを指定します
第ニ引数:同名のクラス、タイトルのハンドルを取得する場合、
     0を指定すると、Zオーダーで最初に該当するハンドルしか見つけません。
     他の同名のハンドルを取得したい時、Zオーダーを指定することで
     他の同名のハンドルも見つけることができます。
第三引数:取得したい子ハンドルのクラス名を指定します。
第四引数:ウィンドウのタイトルを指定します。
戻り値:関数が成功するとハンドルが返ってきます。失敗すると0が返ってきます

クラス名の調べ方については下記を参考にしてみてください。
Class名の調べ方

■サンプルコード
電卓のハンドルを取得する方法です。
電卓のクラス名はSciCalcです。
Option Explicit

Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
     
Sub SampleCode()
    Dim hwnd As Long
    hwnd = FindWindow("SciCalc", "電卓")
    
    Dim HwndDisplay As Long
    HwndDisplay = FindWindowEx(hwnd, 0, "EDIT", "")
End Sub


0 件のコメント: