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