IEのアドレス欄にある文字列の取得          <TOP>


IEのアドレスにある文字列を取得します。

FindWindow 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウのハンドルを返す

FindWindowEx クラス名 、または キャプションを与えてウィンドウのハンドルを取得

GetWindowText ウインドウのタイトル文字列を取得

SendMessage ウィンドウにメッセージを送信

 

例では、IEのハンドルを取得しチャイルドのハンドルをたどって最終のアドレス欄(EDIT)のクラスにある文字列を取得しています。

Windows9x系とWindowsNT系ではクラス名が異なる個所があるためOSにより切り替えています。
左:最初のChildクラス名「WorkerW」(Windows2000、WindowsXP)    右:「WorkerA」(Windows98)

 

確認1

確認2
 

'================================================================
'= IEのアドレス欄にある文字列の取得
'================================================================
Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion      As Long
    dwMinorVersion      As Long
    dwBuildNumber       As Long
    dwPlatformId        As Long
    szCSDVersion        As String * 128
End Type

#define VER_PLATFORM_WIN32_WINDOWS 1   'Windows9x
#define VER_PLATFORM_WIN32_NT 2        'WindowsNT、2000、XP

' オペレーティングシステムの種類やバージョンに関する情報を取得
Declare Function Api_GetVersionEx& Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO)
 

' 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ(親を持たないウィンドウ)のハンドルを返す。この関数は、子ウィンドウは探さない。検索では、大文字小文字は区別されない
Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

' クラス名 、または キャプションを与えてウィンドウのハンドルを取得
Declare Function Api_FindWindowEx& Lib "user32" Alias "FindWindowExA" (ByVal hWndParent&, ByVal hWndChildAfter&, ByVal lpszClass$, ByVal lpszWindow$)

' ウインドウのタイトル文字列を取得
Declare Function Api_GetWindowText& Lib "user32" Alias "GetWindowTextA" (ByVal hWnd&, ByVal lpString$, ByVal cch&)

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define WM_GETTEXT &HD 'コントロールのキャプション・テキストをバッファにコピー

Var strPlatForm As String
Var osvi As OSVERSIONINFO
Var ie As Long
Var child As Long
Var lpClass As String
Var txt As String
Var Ret As Long

osvi.dwOSVersionInfoSize = len(osvi)
Ret = Api_GetVersionEx(osvi)

If osvi.dwPlatformId = VER_PLATFORM_WIN32_NT Then
    lpClass = "WorkerW"
Else
    lpClass = "WorkerA"
End If

ie = Api_FindWindow("IEFrame", ByVal 0)
Print "Parent = &H" & Hex$(ie) & Chr$(9) & "IE"

child = Api_FindWindowEx(ie, 0, lpClass, ByVal 0)
Print " child = &H" & Hex$(child) & Chr$(9) & lpClass

child = Api_FindWindowEx(child, 0, "ReBarWindow32", ByVal 0)
Print " child = &H" & Hex$(child) & Chr$(9) & "ReBarWindow32"

child = Api_FindWindowEx(child, 0, "ComboBoxEx32", ByVal 0)
Print " child = &H" & Hex$(child) & Chr$(9) & "ComboBoxEx32"

child = Api_FindWindowEx(child, 0, "ComboBox", ByVal 0)
Print " child = &H" & Hex$(child) & Chr$(9) & "ComboBox"

child = Api_FindWindowEx(child, 0, "Edit", ByVal 0)
Print " child = &H" & Hex$(child) & Chr$(9) & "Edit"

txt = space$(250)
If child <> 0 Then
    Ret = Api_GetWindowText(child, txt, len(txt))
    Ret = Api_SendMessage(child, WM_GETTEXT, len(txt), txt)

    Print Left$(txt, InStr(txt, Chr$(0)) - 1)
Else
    Print "エラー"
End If

Stop
End