wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – 使用KBDLLHOOKSTRUCT确定第一次按键大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在 Windows上使用低级键盘钩.尽管我目前无法判断该键是否最初被按下或再次按下,但它的工作方式却像魅力一样. documentation( herE)说,第7位保持过渡状态.但是当钥匙被释放时,这似乎才是真的.当我第一次按下键时,遗憾的是没有设置位7. 有没有办法判断最初是否按下了键? 我最近遇到了这个问题.我找不到任何好的解决方案,但我最终在SetWindowHookEx之前使用了一个标
我正在 Windows上使用低级键盘钩.尽管我目前无法判断该键是否最初被按下或再次按下,但它的工作方式却像魅力一样. documentation( here)说,第7位保持过渡状态.但是当钥匙被释放时,这似乎才是真的.当我第一次按下键时,遗憾的是没有设置位7.

有没有办法判断最初是否按下了键?

解决方法

我最近遇到了这个问题.我找不到任何好的解决方案,但我最终在SetWindowHookEx之前使用了一个标志和一个GetAsyncKeyState.

BOOL wasDown;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) {
    if (nCode == HC_ACTION) {
        LPKBDLLHOOKSTRUCT key = (LPKBDLLHOOKSTRUCT) lParam;
        if (key->vkCode == VK_SOMETHING) {
            switch (wParam) {
                case WM_KEYDOWN:
                case WM_SYSKEYDOWN:
                    if (!wasDown) {
                        // Processing on first key down
                        wasDown = true;
                    }
                    break;
                case WM_KEYUP:
                case WM_SYSKEYUP:
                    // Processing on key up
                    wasDown = falSE;
                    break;
            }
    }
    return CallNextHookEx(NULL,nCode,wParam,lParam);
}

wasDown = GetAsyncKeyState(VK_SOMETHING) < 0;
hHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,hInstance,0);

当然,这段代码只能用于一个键.您可以使用一组标志来执行多个键.根据您的应用程序,如果您希望在设置挂钩后第一次按下,您还可以无条件地将标志设置为false.

@H_301_28@

大佬总结

以上是大佬教程为你收集整理的windows – 使用KBDLLHOOKSTRUCT确定第一次按键全部内容,希望文章能够帮你解决windows – 使用KBDLLHOOKSTRUCT确定第一次按键所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。