Отправка клавиш приложения с помощью «SendMessage» (vb.net) - PullRequest
7 голосов
/ 13 апреля 2011

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

У меня есть этот код:

SendMessage(New IntPtr(CurrentHandle), WHAT,GOES,HERE?)

Я смотрю на: http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx а также http://msdn.microsoft.com/en-us/library/ms644927(v=VS.85).aspx#system_defined

Однако, ни один из них не дает большую часть метода «примера кода», который мне нужен, чтобы научиться делать это. Мне просто нужно отправить ключевые события, такие как нажатие "/" или "w" и т. Д. Нет, я не могу использовать sendkeys для этого.

Спасибо, если поможете!

Ответы [ 2 ]

9 голосов
/ 13 апреля 2011

Чтобы смоделировать нажатие клавиши, вам нужно будет смоделировать событие keydown и keyup, которое будет тем, что вы укажете в поле Msg.(Используйте 256 для keydown и 257 для keyup).wParam и lParam зависят от сообщения, поэтому для keyup и keydown wParam будет кодом ключа ( См. эту страницу для шестнадцатеричных кодов), а lParam содержит другую разную информацию ( см. эту страницу ).В vb.net вы можете использовать int32 для lParam.Например, вы можете использовать 0 для keydown и 65539 для keyup.

Пример:

SendMessage(New IntPtr(CurrentHandle), 256, KEYCODE, 0) - Keydown
SendMessage(New IntPtr(CurrentHandle), 257, KEYCODE, 65539) - Keyup
1 голос
/ 13 апреля 2011

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

LRESULT WINAPI SendMessage(
  __in  HWND hWnd,
  __in  UINT Msg,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

hWnd - дескриптор окна для отправки сообщения. Msg - тип сообщения для отправки. WParam и lParam по сути являются «информацией». Точное использование будет зависеть от сообщения, которое вы отправляете.

В какой ситуации вам нужно использовать SendMessage вместо SendKeys для эмуляции нажатий клавиш? Я использовал SendMessage раньше, но это всегда было для движений мыши. .SendKeys () должен отправлять любое нажатие клавиши в активное окно.

Public Shared Sub ActivateWin()
    Dim Win As Process = Process.GetProcessesByName("myWindow").First
    AppActivate(Win.Id)
End Sub

Я использовал вышеизложенное непосредственно перед SendKeys (), и оно всегда работало.

Если это не сработает, или вы хотите использовать SendMessage ради использования SendMessage; документация для сообщения WM_KEYDOWN - это то, что вам нужно. http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx

Вы будете манипулировать битами, чтобы создать правильное значение lParam.

...