LPARAM参数结构体

下述结构体为我根据微软官方文档进行编写的结构体使用的时候只需要对其填写数值即可。

    union KEYBOARD_LPARAM {
        DWORD m_dwParam;
        struct {
            DWORD m_dwClickCount : 16; // 按下次数
            DWORD m_dwScanCode : 8; // 扫描码
            DWORD m_dwExtraInfo : 1; // 扩展键
            DWORD m_dwReserved : 4; // 未使用
            DWORD m_dwContextCode : 1; // 指定上下文代码。对于WM_KEYDOWN和WM_KEYUP消息,该值始终为0
            DWORD m_dwLastKeyStatus : 1; // 指定之前的键状态。对于WM_KEYDOWN消息,如果在消息发送之前,键被按下,则该值是1,否则该值是0。对于WM_KEYUP消息,该值始终为 1 。
            DWORD m_dwTransitionState : 1; // 指定过渡状态。对于WM_KEYDOWN消息,该值始终为0。对于WM_KEYUP消息,该值始终为 1 。
        } m_lparam;
    };

使用示例

KEYBOARD_LPARAM keyboard_lparam;
keyboard_lparam.m_lparam.m_dwClickCount = 1;
keyboard_lparam.m_lparam.m_dwScanCode = MapVirtualKey(btkeyCode, 0);
keyboard_lparam.m_lparam.m_dwExtraInfo = 0;
keyboard_lparam.m_lparam.m_dwReserved = 0;
keyboard_lparam.m_lparam.m_dwContextCode = 0;
keyboard_lparam.m_lparam.m_dwLastKeyStatus = dwLastKeyStatus;
keyboard_lparam.m_lparam.m_dwTransitionState = 0;
// 按下该键
::SendMessage(hWnd, WM_KEYDOWN, 'A', keyboard_lparam.m_dwParam);
::SendMessage(hWnd, WM_CHAR, 'A', keyboard_lparam.m_dwParam);

// 松开该键
keyboard_lparam.m_lparam.m_dwLastKeyStatus = 1;
keyboard_lparam.m_lparam.m_dwTransitionState = 1;
::SendMessage(hWnd, WM_KEYUP, 'A', keyboard_lparam.m_dwParam);

结束语

如果本文对你有所帮助,那么请你点赞留言哦~