0

次のコードを使用して、別のウィンドウのリストビューの内容を評価しようとしています。

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As IntPtr
Private Function SendMessageString(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByRef lParam As String) As IntPtr
End Function
Public Const LB_GETCOUNT = &H18B
Public Const LB_GETTEXT = &H189
Public Const LB_GETTEXTLEN = &H18A

hwnd = FindWindow(vbNullString, "Virtual CDRom Control Panel")
x = FindWindowEx(hwnd, 0, vbNullString, "List1")

Dim listCount As String = SendMessage(x, LB_GETCOUNT, CLng(0), CLng(0))
Dim textLen As String = SendMessage(x, LB_GETTEXTLEN, 30, CLng(0))
Dim itemText As String = New String(" ", textLen)
Dim theText As String = SendMessageString(x, LB_GETTEXT, 30, itemText)

MessageBox.Show(theText)

しかし、私が常に取得する値は0です。

http://img153.imageshack.us/img153/8892/vcdprog.jpg

どんな助けでも素晴らしいでしょう!:o)

デビッド

4

1 に答える 1

0

私の提案は、コードをステップ実行して、値が得られない場所を正確に見つけることです。IE - hwnd は正しく設定されますか? そうでない場合は、Spy++ を使用して、ウィンドウのクラス名とウィンドウ名を確認します。

FindWindow のドキュメントを知っています: http://msdn.microsoft.com/en-us/library/ms633499(v=vs.85).aspx

クラス名をnullのままにしておくと、適切なウィンドウ名とのすべての一致が返されると言われていますが、その動作を確認するのに苦労しました(明示的にクラス名を指定する必要があり、うまく機能しました)。

于 2011-03-02T17:03:54.013 に答える