dポイントプレゼントキャンペーン実施中!

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

A 回答 (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 ではどうなのか分かりませんが、この辺にも注意して下さい。
・以上。短いですが終わりです。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。

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

お礼日時:2007/02/08 13:59

ANo.2 Oh-Orangeさんの回答を拝見して気づきました。



WM_GETTEXTの戻り値を使えば、改めてNULL文字までの長さを求める必要はなかったですね。ANo.1の回答を訂正致します。m(__)m

Windows XP SP2 + Delphi2006で試しました。
    • good
    • 0

IEのアドレスバーのクラス名はEditのようです。



MSDNによりますとGetWindowTextLengthは「他のアプリケーションのエディットコントロールのテキストの長さを取得することはできません。」
http://msdn.microsoft.com/library/ja/default.asp …

同じくGetWindowTextも「他のアプリケーションのコントロールのテキストを取得することはできません。」
http://msdn.microsoft.com/library/ja/default.asp …

ある程度バッファを確保してWM_GETTEXTメッセージを送ってテキストを取得する、その後、長さが必要であればNULL文字までの長さを求める、しかなさそうです。

VB6ではありませんがWindows XP SP2 + Delphi2006で試しました。
    • good
    • 0
この回答へのお礼

No.3と合わせて、早速のご回答ありがとうございました!

まず、MSDNで調べてみるべきでした。
SendMessageでGetWindowTexを投げてやることで無事
キャプションを得ることができました。

お礼日時:2007/02/08 14:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!