Я знаю, что это старая тема, но я не могу позволить кому-то сказать: «Вы не можете подделать ввод с помощью 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);
Надеюсь, это поможет людям, которые приходят сюда, как я :)
Себ,