• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★注意点とアドバイス ・『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 ではどうなのか分かりませんが、この辺にも注意して下さい。 ・以上。短いですが終わりです。

bodyspecial20
質問者

お礼

早速のご回答ありがとうございました。 SendMessageの引数『Rc』『Str』をByValで渡してやることで うまくキャプションを取得することができました。 本当にありがとうございました。

その他の回答 (2)

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.3

ANo.2 Oh-Orangeさんの回答を拝見して気づきました。 WM_GETTEXTの戻り値を使えば、改めてNULL文字までの長さを求める必要はなかったですね。ANo.1の回答を訂正致します。m(__)m Windows XP SP2 + Delphi2006で試しました。

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.1

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で試しました。

bodyspecial20
質問者

お礼

No.3と合わせて、早速のご回答ありがとうございました! まず、MSDNで調べてみるべきでした。 SendMessageでGetWindowTexを投げてやることで無事 キャプションを得ることができました。

関連するQ&A