0

我查看了站点和 MSDN 文档,但我仍然不明白 PostMessage() 的最后一个参数。

在人们询问如何使用 PostMessage 的论坛上,人们使用以下两种实现之一进行回复:

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

有什么不同?为什么在某些情况下最后一个参数可以保留为 0,但在其他情况下必须“移位”以及所有这些?

只是一个快速的问题。不需要论文回复(尽管他们会非常感激)。任何见解都值得赞赏。提前致谢。

4

1 回答 1

0

有关 PostMessage 的更多信息,请参见此处。每条消息都是不同的,并且对于需要哪些参数有自己的规范。在许多方面,您可以将其视为具有一个名称(发布消息)的通用函数,该名称委托给另一个函数(消息名称)并将这些参数传递给它。

与其余参数一样,最后一个参数是特定于消息的,并且可能会有所不同。

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

在您的第一条消息中,WM_KEYDOWN 需要 lParam 中 MapVirtualKey 的结果仅在高 16 位中。我不再熟悉此消息,但我怀疑发生的情况是,由于 0 作为第二个参数传递,因此不需要虚拟键来扫描代码(反之亦然)翻译,但是键码是lParam 的高 16 位仍然需要

于 2010-04-26T23:00:35.970 回答