我正在编写一个使用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_KEYDOWN
,WM_SYSKEYDOWN
等?或许我做错了,有一种适用于任何密钥的一致方法吗?
答案 0 :(得分:3)
Microsoft解释了这些WM消息之间的区别Keyboard Input (Windows)。
WM_SYSKEYDOWN
模拟用于切换窗口的 ALT + TAB 等系统命令。
WM_CHAR
模拟用户输入,例如文本框中的输入。
WM_KEYDOWN
通常与WM_KEYUP
一起使用。请参阅WM_KEYDOWN message (Windows)。
很可能您会想要使用WM_CHAR
。