В основном: я хотел бы API sendmessage и sendmessagetimeout для VB.NET, который другие использовали и знали, что он работает.
Мне нужен API для sendmessage и sendmessagetimeout для моего приложения VB .net. Я искал совсем немного, и все, что я нашел, похоже, не работает: либо сообщение просто не отправляется, либо сообщение отправляется с параметром msg всегда 0, а параметр wparam соответствует тому, что я ввожу для настройки сообщения. Pinvoke также всегда выдает исключение AccessViolationException, потому что я понятия не имею, по какой причине. Я попытался поиграться, может быть, только с тем, где я поместил переменную, но неудивительно, что нет простого логического переключения переменных.
Я пробовал pinvoke:
<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SendMessageTimeout(ByVal windowHandle As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr, ByVal flags As SendMessageTimeoutFlags, ByVal timeout As Integer, ByRef result As IntPtr) As IntPtr
End Function
и аллапи:
Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As String, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
среди прочего, и они просто не работают.
Поэтому я хотел бы знать, какие APIS для sendmessage и/или sendmessagetimeout вы знаете об этой работе! Если для этих функций просто нет правильных API для VB.net, какие альтернативные функции я мог бы использовать для выполнения той же задачи, что и эти 2?
Заранее благодарю за любую имеющуюся у вас информацию :)
ИЗМЕНИТЬ:
в качестве альтернативы я могу отправить сообщение неправильно, поэтому просто чтобы убедиться, что это не должно быть проблемой:
Я хочу отправить WM_WININICHANGE, поэтому я использую:
- hwnd = HWND_BROADCAST = 0xffff = 65535
- сообщение = WM_WININICHANGE = 0x001A = 26
- wparam и lparam равны 0
но я пробовал с другими значениями для wparam и lparam обычно без разницы. при попытке sendmessagetimeout я также использую:
- флаги = SMTO_ABORTIFHUNG = 2
- тайм-аут = 1000 = 1 секунда
- затем 0 для результата.
0
s, а неIntPtr.Zero
? - person GSerg   schedule 26.01.2012