SendMessage,什么时候使用KEYDOWN,SYSKEYDOWN等?

Jan*_*cci 5 c# sendmessage

我正在编写一个应用程序,该应用程序使用SendMessage.

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

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

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

private static ushort WM_SYSKEYDOWN = 0x0104;
private static ushort WM_CHAR = 0x0102;
private static ushort WM_KEYDOWN = 0x0100;
Run Code Online (Sandbox Code Playgroud)

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

private static ushort VK_F1 = 0x70;
private static ushort VK_A = 0x41;
private static ushort VK_TAB = 0x09;
Run Code Online (Sandbox Code Playgroud)

当我想发送F1密钥(VK_F1)时,它仅在使用时才起作用WM_SYSKEYDOWN,当我想发送A密钥时,它仅在我使用时起作用WM_CHAR,当我想发送TAB密钥时,它仅在我使用时起作用WM_KEYDOWN

我的问题是:是否有一些文档告诉我何时根据发送的密钥使用WM_KEYDOWN、等?WM_SYSKEYDOWN或者也许我做错了,并且有一种适用于任何键的一致方法?

Oli*_*bes 4

Microsoft 在此处键盘输入 (Windows)解释了这些 WM 消息之间的区别。

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

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

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

您很可能会想要使用WM_CHAR.