VK_SendKeyDownMsg(BYTE key) {
DWORD dwVKFkeyData;
WORD dwScanCode = MapVirtualKey(key, 0);
dwVKFkeyData = 1;
dwVKFkeyData |= dwScanCode << 16;
dwVKFkeyData |= 0 << 24;
dwVKFkeyData |= 0 << 29;
::SendMessage(hwnd, WM_KEYDOWN, key, dwVKFkeyData);
}
这里需要注意的是lParam的赋值.不同消息对应的lParam定义不一样.
WM_KEYDOWN相关的lParam说明:
WM_KEYDOWN message (Winuser.h) - Win32 apps | Microsoft Learn
WM_KEYUP相关的lParam说明:
WM_KEYUP message (Winuser.h) - Win32 apps | Microsoft Learn
WM_KEYUP和WM_KEYDOWN的lParam参数差异主要是第30-31位:
29 | The context code. The value is always 0 for a WM_KEYUP message. |
30 | The previous key state. The value is always 1 for a WM_KEYUP message. |
31 | The transition state. The value is always 1 for a WM_KEYUP message. |
VK_SendKeyUpMsg(BYTE key) {
DWORD dwVKFkeyData;
WORD dwScanCode = MapVirtualKey(key, 0);
dwVKFkeyData = 1;
dwVKFkeyData |= dwScanCode << 16;
dwVKFkeyData |= 0 << 24;
dwVKFkeyData |= 0 << 29;
dwVKFkeyData |= 3 << 30
::SendMessage(hwnd, WM_KEYUP, key, dwVKFkeyData);
}