Что будет рабочим значением для lParam (низкие / высокие ключи) в PostMessage?(Win Функции) - PullRequest
1 голос
/ 27 июня 2011

Я уже видел около 20 вопросов (здесь @ stackOverflow) Но по какой-то причине я не получаю большинство ответов, к которым они подходят.Некоторые говорят, что понимают, но я не вижу какой-либо части рабочего кода в моем случае.

Я пытаюсь отправить ключи в игры (окно переднего плана) вроде как макрос, и я видел, как lParam in: PostMessage (handle, WM_KEYDOWN, (uint) key, 0); фактически имеет значение;согласно людям в сети (они говорят, но не показывают код / ​​пример).Впервые использую функции выигрыша, так что я теряюсь, как заставить его работать с некоторыми играми;скажем, «Лига легенд» или «Team Fortress 2».

Я понимаю, что это дополнительный параметр, отправляемый для интерпретации Послания.Но как мне заставить его работать с большинством игр?Все ли игры работают по-разному?

Заранее спасибо, и извините за мой нубизм с функциями победы.

С уважением,

Армандо Леон

Ответы [ 4 ]

1 голос
/ 27 июня 2011

Для ключа вниз вы можете увидеть, что lParam содержит по этой ссылке: http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx. Если вы просто передадите wParam и 0 для lParam, это может работать для игр, которые используют только код виртуальной клавиши (содержится в wParam), но не в играх, которые используют, например, код сканирования (передается в lParam).

Что вы можете сделать, это написать служебную программу, которая распечатывает wParam и lParam для нажатия клавиши (и любые другие события (wm_char, wm_keyup и т. Д.), Которые вы хотите отправить в игру). Затем вы можете использовать его, чтобы получить wParam и lParam для любой комбинации клавиш, которую вы хотите, а затем, если вы передадите ее в любую игру, она должна работать. Передача всех правильных значений является единственным способом убедиться, что он будет работать во всех случаях.

1 голос
/ 27 июня 2011

Вы не можете подделать ввод с PostMessage(). Вместо этого вам нужно использовать SendInput().

1 голос
/ 27 июня 2011

Ваша лучшая ставка - документация для WM_KEYDOWN .

0 голосов
/ 21 июля 2014

Я знаю, что это старая тема, но я не могу позволить кому-то сказать: «Вы не можете подделать ввод с помощью PostMessage ()». Эта тема отображается в Google, когда мы ищем «как изменить сообщение lparam».

Давайте представим, что мне нужно отправить ключ ввода в другую программу: я использую Spy ++ и физически нажму на нужную мне клавишу, чтобы проверить, какая константа мне нужна, и какие значения lParam мне нужны. (для контста вы можете проверить здесь тоже http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)
Проверьте ключ, а не ключ.

Так что если мне нужен ключ ввода с cRepeat: 1 Scancode: 29 fExtended: 0 AltDown: 0 fRepeat: 0 fUp: 0,

Мне придется изменить 32 бита lParam, я должен понимать массив здесь http://msdn.microsoft.com/en-us/library/ms646280%28v=vs.85%29.aspx

биты такие: 31 .... 3 2 1 0

Мне нужно 1 для cRepeat так: 0000 0000 0000 0001 (биты от 0 до 15, как в массиве)

Мне нужно 29 (в гекса) для Scancode так: 0010 1001 (биты с 16 по 23)

остальное в нуле

Теперь я просто перегруппировал lparam (в двоичном формате), мне нужно: 0010 1001 0000 0000 0000 0001

И я конвертирую его в шестнадцатеричное: 290001

Так что теперь в моей программе это будет работать, если я использую: PostMessage (hWnd, WM_KEYDOWN, VK_RETURN, 0x290001);

Надеюсь, это поможет людям, которые приходят сюда, как я :)

Себ,

...