【问题标题】:C# Keyboard hooks, keys up eventC#键盘挂钩,按键事件
【发布时间】:2012-01-24 18:27:05
【问题描述】:

我有一个 C# 函数,我想弄清楚,这里是代码:

private int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            var hookStruct = (KbLLHookStruct)Marshal.PtrToStructure(lParam, typeof(KbLLHookStruct));

            bool ctrlDown = GetKeyState(0xA2) != 0 || GetKeyState(0xA3) != 0;

            if (hookStruct.vkCode == 0x56 && hookStruct.KF_REPEAT == 0)
            {
                Clipboard.SetText(" ");
                MessageBox.Show("Hit ?);
            }                
        }

        if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP)
        {
                MessageBox.Show("Message : KEY UP");
        }

        // Pass to other keyboard handlers. Makes the Ctrl+V pass through.
        return CallNextHookEx(_hookHandle, nCode, wParam, lParam);        
    }

所以我在这里寻找的是弄清楚当按下 L_CTRL + V 按钮时如何触发事件。这是工作;但是我只希望在按键启动后触发事件,为此我迷路了。谁能给个方向?

【问题讨论】:

    标签: c# windows winapi hook keyboard-hook


    【解决方案1】:

    我只希望在按键启动后触发事件,为此我迷路了。谁能给个方向?

    如果你只想在按键释放时回复,那么只回复WM_KEYUP message

    删除处理WM_KEYDOWN 消息的if 语句部分。

    【讨论】:

    • 感谢@Cody Gray 的回复,但是我只希望在用户同时按下“Ctrl + V”时触发事件我将如何为 WM_KEYUP 构造该语句? cus 用于检查 ctrl btn 是否关闭的嵌套 if statemnt 将(在那时)将其视为已启动...这是一个问题 22 :(我认为我需要某种类型的侦听器 ..
    • 另外,我得到了 Ctrl 和 V 键的 letup 事件,我只想要一个事件。
    • @Canada_Goose:我不知道你的听众是什么意思。一个钩子一个监听器。您需要做的是在按下 Ctrl 键时设置一个标志(在类级别声明的布尔变量)(WM_KEYDOWN),然后在收到释放 V 键的通知时检查该标志(@987654327 @)。如果标志为真,则用户按下了 Ctrl+V。如果标志是假的,那么他们只是按下 V,所以你什么都不做。无论哪种方式,当您收到 Ctrl 键已释放的通知时将标志重置为 false (WM_KEYUP)。
    • 这是个好消息,你认为你能告诉我它是如何运作的吗?再次感谢您的回复非常有帮助!
    • 在手机上输入时很难向您展示 sn-p... :-) 老实说,我已经将所有代码打包到一个组件中,当我需要从C#。你可能会考虑做同样的事情,或者更好的是,下载一个完整的钩子库,比如this one
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多