[C #] [Win32 API] Справка PostMessage? - PullRequest
       10

[C #] [Win32 API] Справка PostMessage?

0 голосов
/ 27 апреля 2010

Я просмотрел сайты и документацию MSDN, но до сих пор не понимаю последний параметр PostMessage ().

На форумах, где люди спрашивают, как использовать PostMessage, люди отвечают одной из двух реализаций:

  1. PostMessage (WindowHandle, WM_KEYDOWN, KeyCode, MapVirtualKey (KeyCode, 0) << 16); </li>
  2. PostMessage (WindowHandle, WM_KEYDOWN, KeyCode, 0);

Какая разница? Почему последний параметр можно оставить равным 0 в некоторых случаях, но его нужно «сдвинуть» и все такое в других случаях?

Просто быстрый вопрос. Не нужны ответы на сочинения (хотя они будут высоко оценены). Любое понимание приветствуется. Заранее спасибо.

1 Ответ

0 голосов
/ 27 апреля 2010

См. здесь для получения дополнительной информации о PostMessage. Каждое сообщение отличается и имеет свою спецификацию относительно того, какие параметры требуются. Во многих отношениях вы можете рассматривать ее как общую функцию с одним именем (почтовое сообщение), которая делегирует другой функции (имя сообщения) и передает ей эти параметры.

Последний параметр, как и остальные, зависит от сообщения и может варьироваться.

BOOL PostMessage(
  __in  HWND hWnd,
  __in  UINT Msg,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

В вашем первом сообщении WM_KEYDOWN нужен результат MapVirtualKey в lParam только в старших 16 битах. Я больше не знаком с этим сообщением, но я подозреваю, что происходит то, что, поскольку 0 передается как второй параметр, виртуального ключа для сканирования кода (или наоборот) не требуется, однако необходим код ключа все еще требуется в старших 16 битах lParam

...