- 題名: WM_GETTEXTの使い方
- 日時: 2010/01/07 17:01:21
- ID: 26202
- この記事の返信元:
- (なし)
- この記事への返信:
- [26203] Re[1]: WM_GETTEXTの使い方2010/01/07 17:30:43
- ツリーを表示
■No26202に返信(太助さんの記事) > Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ > (ByVal hwnd As Integer, ByVal wMsg As Integer, _ > ByVal wParam As Integer, ByVal lParam As Object) As Integer Alias を指定せずに、 Private Declare Auto Function SendMessage Lib "user32" とした方が都合が良いかと思います。 Win9X 系が駆逐された現在、SendMessageA を使い続ける必要は無いと思います。 SendMessageW を使うようにしないと、Shift_JIS で表現できない文字が 使われていた場合、正しく取得できません。 また、EnumChildWindows 等の「ハンドル」を表す場合、Integer でも 一応動作はしますが、本来は IntPtr 型を使うのが作法です。 (Form の Handle プロパティも IntPtr ですよね) > 文字列ポインタ引数の型を、AnyからObjectに変えた事意外に変更が > 見当たらないのですが、正常にテキストの値を取得してくれません。 文字列を受け取る方法は幾つかありますが、VB から扱うのであれば、 System.Text.StringBuilder を利用するのが楽かと思います。 もし、今回の SendMessage の宣言が WM_GETTEXT 用に限定されているのなら、 wParam は Integer、lParam は StringBuilder 型にして、このように書けます。 Dim buf As New StringBuilder() buf.Length = 500 SendMessage(hwnd, WM_GETTEXT, buf.Length, buf) MsgBox(buf.ToString())
分類:[.NET]
初めまして、素人質問ですみません。
VB6にてWindowを列挙し、そのテキストの内容を取得していました。
EnumChildWindows → SendMessage
それをVB2008にて組み直した時に以下のエラーが出ました。
VB6:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
ret = SendMessage(hwnd, WM_GETTEXT, Len(CaptionName), ByVal CaptionName)
VB2008:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Integer, ByVal wMsg As Integer, _
ByVal wParam As Integer, ByVal lParam As Object) As Integer
ret = SendMessage(hwnd, WM_GETTEXT, Len(CaptionName), CaptionName)
文字列ポインタ引数の型を、AnyからObjectに変えた事意外に変更が
見当たらないのですが、正常にテキストの値を取得してくれません。
何が悪いのでしょうか、どうかご教示ください。