- ベストアンサー
GetWindowTextでアドレスバーからURLを取得したい
VB6.0でGetWindowTextを使用し、ブラウザ(IE)のアドレスバー部に 表示されているURLを取得したいと考えています。 ウィンドウハンドルを取得してキャプションを得るということに なると思うのですが、下記の内容においてGetWindowTextLengthの 戻り値がどうしても0になってしまいます。 URLはキャプションとして取得できないのでしょうか。 同じ方法でブラウザのタイトルバーの文字列を取得できることは 確認できています。 おわかりになられる方いらっしゃいましたら、よろしくお願い致します。 Private Sub Command3_Click() Dim hwnd As Long Dim Rc As Long Dim Str As String Dim Bite As Long hwnd = "&H" & アドレスバー部のウィンドウハンドル 'Rc = キャプションのバイト数 Rc = GetWindowTextLength(hwnd) MsgBox Rc 'エラーチェック If Rc = 0 Then Exit Sub 'キャプションのバイト数分のバッファ確保 Str = String(Rc, vbNullChar) 'Bite = キャプションのバイト数 'Str = キャプション文字 Bite = GetWindowText(hwnd, Str, Rc) 'Text1.Text = Str の左端の文字からキャプションのバイト数分 Text1.Text = Left(Str, Bite) End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★注意点とアドバイス ・『GetWindowText』関数や『GetWindowTextLength』関数は、他のプロセスのキャプションを 正しく取得できません。→SDK マニュアルにそう載っていました。 ・そこで『WM_GETTEXT』、『WM_GETTEXTLENGTH』メッセージを『SendMessage』などで送って 取得して下さい。 ●サンプル 'Rc = キャプションのバイト数 Rc = SendMessage( hwnd, WM_GETTEXTLENGTH, 0, 0 ) 'Str = キャプション文字 Bite = SendMessage( hwnd, WM_GETTEXT, Rc, Str ) 'Text1.Text = Str の左端の文字からキャプションのバイト数分 Text1.Text = Left( Str, Bite ) 最後に: ・私は、C/C++ 言語屋です。 ・SendMessage 関数の引数『Rc』、『Str』に C/C++ では(WPARAM)や(LPARAM)にキャストして 使います。→VB ではどうなのか分かりませんが、この辺にも注意して下さい。 ・以上。短いですが終わりです。
その他の回答 (2)
- SHIMAPEE
- ベストアンサー率75% (154/203)
ANo.2 Oh-Orangeさんの回答を拝見して気づきました。 WM_GETTEXTの戻り値を使えば、改めてNULL文字までの長さを求める必要はなかったですね。ANo.1の回答を訂正致します。m(__)m Windows XP SP2 + Delphi2006で試しました。
- SHIMAPEE
- ベストアンサー率75% (154/203)
IEのアドレスバーのクラス名はEditのようです。 MSDNによりますとGetWindowTextLengthは「他のアプリケーションのエディットコントロールのテキストの長さを取得することはできません。」 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getwindowtextlength.asp 同じくGetWindowTextも「他のアプリケーションのコントロールのテキストを取得することはできません。」 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getwindowtext.asp ある程度バッファを確保してWM_GETTEXTメッセージを送ってテキストを取得する、その後、長さが必要であればNULL文字までの長さを求める、しかなさそうです。 VB6ではありませんがWindows XP SP2 + Delphi2006で試しました。
お礼
No.3と合わせて、早速のご回答ありがとうございました! まず、MSDNで調べてみるべきでした。 SendMessageでGetWindowTexを投げてやることで無事 キャプションを得ることができました。
お礼
早速のご回答ありがとうございました。 SendMessageの引数『Rc』『Str』をByValで渡してやることで うまくキャプションを取得することができました。 本当にありがとうございました。