vb.net получает элементы списка рассылки от sendmessagestring - PullRequest
0 голосов
/ 02 марта 2011

Я использую следующий код для попытки для градации того, что находится в просмотре списка в другом окне:

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

Любая помощь будет отличной!: о)

Дэвид

1 Ответ

0 голосов
/ 02 марта 2011

Я бы посоветовал пройтись по коду и найти, где именно вы не получаете значение. IE - hwnd настроен правильно? Если нет, используйте Spy ++ для проверки окна Classname и Windowname.

Я знаю документацию для FindWindow: http://msdn.microsoft.com/en-us/library/ms633499(v=vs.85).aspx

говорит, что если оставить имя класса пустым, все совпадения будут возвращены с соответствующим именем ветра, но я изо всех сил пытался увидеть это поведение (мне пришлось явно дать ему имя класса, и тогда оно работало отлично).

...