
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
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 ではどうなのか分かりませんが、この辺にも注意して下さい。
・以上。短いですが終わりです。
早速のご回答ありがとうございました。
SendMessageの引数『Rc』『Str』をByValで渡してやることで
うまくキャプションを取得することができました。
本当にありがとうございました。
No.3
- 回答日時:
ANo.2 Oh-Orangeさんの回答を拝見して気づきました。
WM_GETTEXTの戻り値を使えば、改めてNULL文字までの長さを求める必要はなかったですね。ANo.1の回答を訂正致します。m(__)m
Windows XP SP2 + Delphi2006で試しました。
No.1
- 回答日時:
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で試しました。
No.3と合わせて、早速のご回答ありがとうございました!
まず、MSDNで調べてみるべきでした。
SendMessageでGetWindowTexを投げてやることで無事
キャプションを得ることができました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アンケートフォームについて
-
VB6でのファイルサイズ取得につ...
-
文字数制限(バイト)をしたい
-
UCS-2の一覧表が欲しい
-
文字コードの利点・欠点について
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
VBAでShift-JISのURLエンコード
-
:(コロン)のKeyCode
-
phpでマルチバイトを含む文字列...
-
[error] [client ---- ] Argument
-
<wbr>を強制的に入れるには??
-
number 改行が追加できない
-
$template->output();の時に ...
-
なぜ?
-
c言語での wavファイルの編集(...
-
配列に入れたい
-
フォームメールで名前を全角の...
-
カレンダー1ヶ月分をわけて表示
-
MACの改行コード変更について教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
バイト列とバイナリ列の違いが...
-
VBAでShift-JISのURLエンコード
-
機種依存文字をチェックしたい。
-
ピクセル,dpiから容量(バイト...
-
GetWindowTextでアドレスバーか...
-
この関数はどのプログラミング...
-
ソケット通信の受信サイズ
-
:(コロン)のKeyCode
-
COBOL PICTUREで X,S,Vの意味
-
memcmp バイナリデータの比較方法
-
より高速な画像の表示法
-
半角、全角の判別方法
-
最大長を用意せずにバイナリデ...
-
64bit対応
-
バイナリとBCDコード
おすすめ情報