C# 键盘钩子怎么获取两个任意的组合键!!!!!!! 5C

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));

        if ((int)Control.ModifierKeys == (int)Keys.PageDown+ (int)Keys.PageUp)  // 截获F8
        {
            //Debug.Log("快捷键已拦截!不能保存!");
            //return 1;
        }
        if (kbh.vkCode == (int)Keys.A )
        {
            //Debug.Log("A+B");   
        }
    }
return CallNextHookEx(_hookID, nCode, wParam, lParam);

}

1个回答

//问题:C# 键盘钩子怎么获取两个任意的组合键!!!!!!!
        //思路:截获按键按下消息(WM_KEYDOWN、WM_SYSKEYDOWN)和按键释放消息(WM_KEYUP、WM_SYSKEYUP)
        //      用数组记录按下/释放状态,由于只记录按下/释放,遂用bool类型数组,数组大小为256
        //      在WM_KEYDOWN/WM_SYSKEYDOWN下遍历数组,把所有值为Ture的索引转换为虚拟键代码

        //用于记录键状态
        bool[] keyDown = new bool[256];
        //用于记录被按下的键
        List<Keys> pressedKeys = new List<Keys>();
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            //WM_KEYUP||WM_SYSKEYUP
            //......
            keyDown[vkCode] = false;
            //......
            //WM_KEYDOWN||WM_SYSKEYDOWN
            //......
            keyDown[vkCode] = true;
            int index = -1;
            index = Array.IndexOf(keyDown, true, index + 1);
            while (index != -1)
            {
                pressedKeys.Add((Keys)index);
                index = Array.IndexOf(keyDown, true, index + 1);
            };
            //此时 pressedKeys 里的值为当前所有被按下的键。
            //......
        }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐