SendMessage,何时使用KEYDOWN,SYSKEYDOWN等?

时间:2012-11-22 14:30:36

标签: c# sendmessage

我正在编写一个使用SendMessage向另一个应用程序发送击键的应用程序。

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);

我一直在尝试各种参数,我注意到,根据我发送的键击,我必须向参数int Msg传递不同的参数。

例如,我将以下内容定义为Msg的可能值。

private static ushort WM_SYSKEYDOWN = 0x0104;
private static ushort WM_CHAR = 0x0102;
private static ushort WM_KEYDOWN = 0x0100;

以及传递给第3个参数wParam的以下测试键:

private static ushort VK_F1 = 0x70;
private static ushort VK_A = 0x41;
private static ushort VK_TAB = 0x09;

当我想发送 F1 键(VK_F1)时,只有当我想发送 A WM_SYSKEYDOWN >键只有在我使用WM_CHAR时才有效,当我想发送 TAB 键时,它只在我使用WM_KEYDOWN时有效。

我的问题是:是否有一些文档告诉我何时根据发送的密钥使用WM_KEYDOWNWM_SYSKEYDOWN等?或许我做错了,有一种适用于任何密钥的一致方法吗?

1 个答案:

答案 0 :(得分:3)

Microsoft解释了这些WM消息之间的区别Keyboard Input (Windows)

WM_SYSKEYDOWN模拟用于切换窗口的 ALT + TAB 等系统命令。

WM_CHAR模拟用户输入,例如文本框中的输入。

WM_KEYDOWN通常与WM_KEYUP一起使用。请参阅WM_KEYDOWN message (Windows)

很可能您会想要使用WM_CHAR