[C#] [Win32 API] PostMessage帮助?

时间:2010-04-26 22:55:05

标签: c# api winapi postmessage

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

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

  1. PostMessage(WindowHandle,WM_KEYDOWN,KeyCode,MapVirtualKey(KeyCode,0)<< 16);
  2. PostMessage(WindowHandle,WM_KEYDOWN,KeyCode,0);
  3. 有什么区别?为什么最后一个参数在某些情况下可以保留为0,但必须“移位”并在其他情况下将其全部保留?

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

1 个答案:

答案 0 :(得分:0)

有关PostMessage的更多信息,请参阅here。每条消息都是不同的,并且有自己的规范来确定所需的参数。在许多方面,您可以将其视为一般函数,其中一个名称(发布消息)委托给另一个函数(消息名称)并将其传递给那些参数。

最后一个参数与其他参数一样是特定于消息的,可以有所不同。

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

在你的第一条消息中,WM_KEYDOWN只需要高16位的lParam中的MapVirtualKey结果。我不再喜欢这个消息了,但是我怀疑发生的事情是因为0作为第二个参数被传递,所以没有虚拟键来扫描代码(反之亦然)需要翻译,但是密钥代码是仍然需要lParam的高16位