【VB6・VBAメモ】WindowsAPI:FindWindow関数

このAPIは指定文字列とウィンドウクラス名とウィンドウタイトルが一致するウィンドウの
ハンドルを取得する際に使用します。
外部アプリケーションのウィンドウを操作する時や重複起動のチェック等に使えます。

トップレベルのウィンドウのみ対象となるため、子ウィンドウのハンドルを取得したい場合は
FindWindowExを使う必要があるようです。

概要
HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
機能 ウィンドウクラス名(RegisterClass又はRegisterClassExで指定した名前)と
ウィンドウタイトルが一致するウィンドウハンドルを取得
引数 lpClassName ウィンドウクラス名
NULLを指定すると全ウィンドウクラスを対象
LPCTSTR
(const char*)
lpWindowName ウィンドウタイトル
NULLを指定すると全ウィンドウタイトルを対象
LPCTSTR
(const char*)
戻り値 ウィンドウハンドル
見つからなかった場合はNULL
HWND
(unsigned long)
使用例:ウィンドウクラス名からウィンドウハンドルを取得
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
            (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
            (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Sub Sumple()
    'メモ帳のウィンドウを探す'
    Dim hWnd As Long
    hWnd = FindWindow("Notepad", vbNullString)
    If hWnd <> 0 Then
        'ウィンドウタイトルを取得'
        Dim title    As String * 256
        Dim titleLen As Long
        titleLen = GetWindowText(hWnd, title, 256)

        '出力'
        Debug.Print StrConv(LeftB(StrConv(title, vbFromUnicode), titleLen), vbUnicode)
    End If
End Sub

[出力結果]

無題 - メモ帳
使用例:ウィンドウタイトルからウィンドウハンドルを取得
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
            (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
            (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Sub Sumple()
    'メモ帳のウィンドウを探す'
    Dim hWnd As Long
    hWnd = FindWindow(vbNullString, "無題 - メモ帳")
    If hWnd <> 0 Then
        'ウィンドウタイトルを取得'
        Dim title    As String * 256
        Dim titleLen As Long
        titleLen = GetWindowText(hWnd, title, 256)

        '出力'
        Debug.Print StrConv(LeftB(StrConv(title, vbFromUnicode), titleLen), vbUnicode)
    End If
End Sub

[出力結果]

無題 - メモ帳


コメント
コメントする








    
この記事のトラックバックURL
トラックバック