首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#低级键盘挂钩不工作

您好!感谢您的提问。C#低级键盘挂钩不工作可能是由于您的代码存在问题或者您的操作系统不支持低级键盘挂钩。以下是一些可能的解决方案:

  1. 检查您的代码是否正确实现了低级键盘挂钩。您可以参考以下代码示例:
代码语言:csharp
复制
using System;
using System.Runtime.InteropServices;

public class KeyboardHook
{
    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYDOWN = 0x0100;
    private const int WM_KEYUP = 0x0101;
    private const int WM_SYSKEYDOWN = 0x0104;
    private const int WM_SYSKEYUP = 0x0105;

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetModuleHandle(string lpModuleName);

    public delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

    public event EventHandler<KeyEventArgs> KeyDown;
    public event EventHandler<KeyEventArgs> KeyUp;

    private LowLevelKeyboardProc _proc;
    private IntPtr _hookID = IntPtr.Zero;

    public KeyboardHook()
    {
        _proc = HookCallback;
    }

    public void Start()
    {
        if (_hookID == IntPtr.Zero)
        {
            _hookID = SetHook(_proc);
        }
    }

    public void Stop()
    {
        if (_hookID != IntPtr.Zero)
        {
            UnhookWindowsHookEx(_hookID);
            _hookID = IntPtr.Zero;
        }
    }

    private IntPtr SetHook(LowLevelKeyboardProc proc)
    {
        using (Process curProcess = Process.GetCurrentProcess())
        using (ProcessModule curModule = curProcess.MainModule)
        {
            return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
        }
    }

    private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0)
        {
            int vkCode = Marshal.ReadInt32(lParam);
            bool isKeyDown = wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN;
            bool isKeyUp = wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP;

            if (isKeyDown || isKeyUp)
            {
                var keyArgs = new KeyEventArgs(vkCode, isKeyDown);
                if (isKeyDown)
                {
                    KeyDown?.Invoke(this, keyArgs);
                }
                else
                {
                    KeyUp?.Invoke(this, keyArgs);
                }

                if (keyArgs.Handled)
                {
                    return (IntPtr)1;
                }
            }
        }

        return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }
}

public class KeyEventArgs : EventArgs
{
    public int VKCode { get; }
    public bool IsKeyDown { get; }
    public bool Handled { get; set; }

    public KeyEventArgs(int vkCode, bool isKeyDown)
    {
        VKCode = vkCode;
        IsKeyDown = isKeyDown;
    }
}
  1. 如果您的操作系统不支持低级键盘挂钩,您可以尝试使用其他类型的键盘挂钩,例如全局键盘钩子或者键盘事件。
  2. 如果您的操作系统不支持低级键盘挂钩,您可以考虑使用其他类型的键盘挂钩,例如全局键盘钩子或者键盘事件。

希望这些解决方案能够帮助您解决问题。如果您需要更多的帮助,请随时告诉我!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一个点告诉你机器视觉是选c++还是选c#

另外在一些公司呢,他们以做专机为主,专机软件和平台软件有本质的不同,专机软件追求开发效率和功能实现,不关心维护扩展,所以专机软件一般都是纯c#开发,涉及c++,因为专机软件一般都是没有后端的,他们的后端都是调用...但是专机开发很容易和出差挂钩。...而上位机开发本身技术又有限,会在未来局限个人的发展空间,且上位机开发和专机开发很容易就会和出差挂钩,而C++不论是后端开发,还是平台软甲开发,一般都是不需要出差的。...但是,如果你时间有限且已经工作,如果有编程基础,那同样冲C++,但如果你没有编程基础属于小白转码,那你可以先冲C#,毕竟零基础学C++,是需要一个较长的学习周期,才能顺利工作的,但此类兄弟缺少的恰好是时间...因此可以先C#编程基础,并在工作中积累经验,以作后续打算。 本文视频同步更新至BiliBili【周旋机器视觉】:

36810

Macbook Pro键帽拆解安装图文教程

就是过了两天之后,键盘黏黏的,特别是空格键。 送修的话,这属于人为的,不再保修范围之内,关键是来回时周期很长,耽误了工作,于是决定自己拆解,网上有很多发了类似的教程,但自己还是遇到了一些坑。...2、然后你会看见挂钩了,这时候需要一点耐心,用镊子的一脚将挂钩的一边推出去,然后再推另一边。同样第二个挂钩也是。 拆解空格键 空格键是最难的,应该放在最后来进行,可以先在前面的拆解中学学经验。...Macbook pro 拆键盘方法 结语 安装好之后打开电脑,发现“B”键的一右下脚是凹下去的,是在看不下去,就又用镊子将键帽拔了出来,这时候发现键盘灯熄灭了!!!...心里想会不会是将什么线路弄断了,又重新安装好之后开机,发现键盘灯一直是熄灭的,也不能调光,键盘上的背光灯键是个禁止符号了。 心想,呵呵,这次把线路弄断了。...真惊喜真刺激 每个键盘的内部结构也能有差别,且不止一种拆卸方法,此方法不一定完美,仅供参考。 最后附一张结果图: 键盘.png

38.9K20

一个32岁入门的70后程序员给我的启示

岁月的锤炼 圆口接口的键盘,2003年的 有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。...(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。)...虽然看起来很低级,但是嵌入式就是这样。很高端吧,但是我一问我爸,你是怎么做出来这块板的,你真的这么厉害用C语言写了一个操作系统? 板子是自己画的,其他的芯片都是买的,CPU程序是自己写进去的。...我爸意识到了,他笑着跟我说:“你教我学C#吧,我们一起探讨这个程序。”...,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会C#(只有C语音基础)?

58290

一个32岁入门的70后程序员给我的启示

岁月的锤炼 圆口接口的键盘,2003年的 有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。...(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。)...虽然看起来很低级,但是嵌入式就是这样。很高端吧,但是我一问我爸,你是怎么做出来这块板的,你真的这么厉害用C语言写了一个操作系统? 板子是自己画的,其他的芯片都是买的,CPU程序是自己写进去的。...我爸意识到了,他笑着跟我说:“你教我学C#吧,我们一起探讨这个程序。”...,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会C#(只有C语音基础)?

79990

一个32岁入门的70后程序员给我的启示

( 圆口接口的键盘,2003年的 ) 有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。...(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。)...虽然看起来很低级,但是嵌入式就是这样。很高端吧,但是我一问我爸,你是怎么做出来这块板的,你真的这么厉害用C语言写了一个操作系统? 板子是自己画的,其他的芯片都是买的,CPU程序是自己写进去的。...我爸意识到了,他笑着跟我说:“你教我学C#吧,我们一起探讨这个程序。”...,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会C#(只有C语音基础)?

60050

一个32岁入门的70后程序员给我的启示

岁月的锤炼   圆口接口的键盘,2003 年的   有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。...(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。)...虽然看起来很低级,但是嵌入式就是这样。很高端吧,但是我一问我爸,你是怎么做出来这块板的,你真的这么厉害用 C 语言写了一个操作系统? 板子是自己画的,其他的芯片都是买的,CPU 程序是自己写进去的。...我爸意识到了,他笑着跟我说:“你教我学 C# 吧,我们一起探讨这个程序。”...,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会 C#(只有 C 语言基础)?

68160

【Java AWT 图形界面编程】事件处理机制 ③ ( AWT 中常见的事件和事件监听器 | 低级事件 | 组件事件 | 窗口事件 | 鼠标事件 | 高级事件 | 动作事件 | 事件监听器 )

文章目录 一、AWT 中常见的事件 1、低级事件 2、高级事件 二、AWT 中常见的事件监听器 一、AWT 中常见的事件 ---- AWT 中事件分为两大类 , 低级事件 和 高级事件 ; 低级事件...: 基于某个特定基本动作的事件 , 如 点击 , 拖动 , 获取焦点 , 失去焦点 等固定的简单操作 ; 高级事件 : 基于某个特定事件 , 而是 根据 功能的具体含义 定义的事件 ; 1、低级事件...时触发的事件 ; 焦点事件 : FocusEvent , 组件获取焦点 , 失去焦点 触发的事件 ; 鼠标事件 : MouseEvent , 鼠标 按下 , 移动 , 抬起 , 点击 触发的事件 ; 键盘事件...: KeyEvent , 键盘 按下 , 松开 , 点击 时触发的事件 ; 绘制事件 : PaintEvent , 组件绘制时触发的事件 , 当调用 update paint 函数时 , 触发该事件...; 2、高级事件 高级事件 : 组件的 某项功能 触发的事件 , 局限于具体的动作 ; 动作事件 : ActionEvent , 组件 , 按钮 , 菜单 被点击时 , 文本框按下回车键时 , 触发该事件

1.7K20

一个32岁入门的70后程序员给我的启示

圆口接口的键盘,2003年的 有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。除了(ASDW,YUHJ,那是我小时候玩拳王留下的)。...(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。)...虽然看起来很低级,但是嵌入式就是这样。很高端吧,但是我一问我爸,你是怎么做出来这块板的,你真的这么厉害用C语言写了一个操作系统? 板子是自己画的,其他的芯片都是买的,CPU程序是自己写进去的。...我爸意识到了,他笑着跟我说:“你教我学C#吧,我们一起探讨这个程序。”...,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会C#(只有C语音基础)?

45610

为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C#

为什么不是 C# 呢? .NET 和 C# 现在功能已经很强大了,是不是社区缺少这种文化?如何才能培养一种更加开源的文化, 因为很多开发人员对 .NET 和 C# 仍然还抱有偏见。...我认为用 C# 编写更多有趣和有用的开源工具,可以大大的改变人们的看法。...williane: 不同的工具用于不同的目的,C# 非常适合编写面向用户的产品,它将开发人员从大多数低级细节中抽象出来,让我们专注于把业务需求转换为工作代码。...而像 C/C++ 这样的稍微低级的语言可以让您更接近硬件,对性能有要求时,这是最合适的。 我可以用螺丝刀敲打钉子很多次,也可以用锤子花很大的力气把螺丝打进去,都可以完成工作。...但是实际上,应该根据工作场景选择使用正确的工具。 bilby2020: 我曾经是一名 C# 程序员(现在还在做一点)。不管你喜不喜欢,C# 的语法太复杂了。

1K00

【每日精选时刻】1000行代码还是10行代码的谁绩效好?如何成为Vue高手?Python值传递是什么意思?

点此一键订阅【每日精选时刻】专栏,吃瓜新鲜作品迷路!...Coding-DevOps打造契合“老板想法”的项目协同CODING DevOps产品中项目协同功能拥有进行项目事项的登记、拆分、关联资源和协同管理的能力,但基于系统默认的项目管理模版有较多与现有业务特性或期望工作匹配的点...以至于长久以来,将代码行数与生产力划等号,将 Bug 数量与绩效直接挂钩的 OKR 设定时有发生。 程序员的 OKR 究竟该如何设定?...新的选题赛道【大模型技术】【前端框架】【C#】【金三银四】,总有一个你能聊~各赛道独立评奖,获奖机会倍增!...无论你是写作大佬、还是萌新小白,用心创作技术好文,就有机会赢机械键盘 、无线鼠标等好礼~2023腾讯云开发者社区年度盘点,开发者聊得最多的是什么?过去的一年是波涛起伏的一年。

34141

Hook技术【移动端&&PC端详解】「建议收藏」

微软只是简单的将Hook解释为一种过滤(或叫挂钩)消息的技术。 我们这里讲解的Hook,简单解释为:挂钩挂钩一切事物。包含微软的解释。 挂钩的事物通常指的是函数。...iActivityManagerIntercept}, startActivityHandler); //在这我们将系统的对象更换成我们生成的动态代理对象,为了是调用动态代理的 invoke 方法,更换执行...钩子的种类很多,每种钩子可以截获相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。...3.Hook工作原理 在正确使用钩子函数前,我们先讲解钩子函数的工作原理。...当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。

1.1K20

【C语言系列】为什么要学习C语言?C语言有哪些优势

想学好学精C++,没有100学时是不够的,而我们现在选择的C语言都只有44课时的理论教学时间,面对如此丰富多彩的C世界,我已经颇感力有逮,许多基本内容都得靠学生自学了,哪还能奢望C++啊?...除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识。它能给我们提供的裨益,,简单列举如下: 1.相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。...从总体上来说,低级的编程语言可以让你更好的了解计算机。 2.设备驱动程序和操作系统只能用C语言来编写。...3.如果你想要得到一份编写微控制器程序的工作的时候,该怎么办?他们都是用C语言编写的。就因为不想学习一门新的语言,你就准备限制你能得到工作的机会吗?...而C#和Java干脆跳过了指针这个题目。可是指针确实使C语言变得更加强大。 9.找编程开发方面的工作时,C语言仍然是最普遍需要的语言。所以它值得你花时间去学会它。

8.3K130

ebpf_ebpf需要修改内核吗

Libpcap可以在绝大多数类unix平台下工作。...有了数控缓冲器,就可以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。由于缓冲器接在数据总线上,故必须具有三态输出功能。...来自维基百科) 钩子 eBPF 程序是事件驱动的,当内核或应用程序通过某个挂钩点时运行。预定义的挂钩包括系统调用、函数输入/退出、内核跟踪点、网络事件和其他几个。...该XDP项目,特别是使用eBPF通过在网络堆栈的最低级别运行eBPF程序,在接收到数据包后,立即做高性能的数据包处理。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

67611

码农与程序员的惊人差别

低级,有没有,说的就像编程界的农民工,听起来比工厂流水线工人还要低级! 偶尔自嘲,幽默一下也就罢了,真把自己称为码农,并且潜意识里也自认码农,那不就真成了低级的技术工人?...有时幻想自己就是科幻电影里面的黑客,可以敲着自己手上的键盘,做出惊天动地的事情。 工作了十年之后,我对技术依然有这种感觉,我觉得做技术的人很酷,走在时代的前沿,充满创造力。...我已经很久没有听人纯粹地谈论技术了,那种只是从技术的角度,探讨一个新技术或一门语言的好坏,涉及就业,涉及收入。 现在,问的更多的问题是: 你怎么看待xxx方向未来的发展,未来的就业好吗?...如果从自己的口中,从自己的潜意识里面,都自认码农,自认职业低级,自认能力低下,那又如何能获得好的职业发展,获得高的收入?...看完我上面这段,肯定会有不少人喷我,说我站着说话腰疼,说自己温饱都没有解决,学一门语言都吃力,跟我谈情怀?谈理想?

55120

32岁入门晚不晚?来听听这位70后程序员的故事

岁月的锤炼 圆口接口的键盘,2003年的 有人问这个键盘难道没有擦过吗?不是的,是擦不掉的岁月痕迹。如果有注意到细节的朋友会发现,程序员什么键位用得最多。...(这也带给我们一个启示,作为男人,如果觉得职业看不到头,趁早换工作吧,如果趁早,你会在以后的家庭压力中选择妥协,再也看不到头了。)...,没办法啊,只能让我爸去学吧,一个星期后,他开始于我并行开发,这是我跟我爸同台工作最好的回忆;为什么我爸能够在一个星期学会C#(只有C语音基础)?...没办法,在家庭的压力下(当时我的初中学费是1280元,我感谢我爸,在家庭富裕的情况下,给了我最好的教育条件!),他不得不选择这份“完美的工作”,于是开始了他10年的运维职业生涯。...,我给你的答案是:“那时我正在读高二,我妈也是身体不好,无法工作。”,家庭绑架了这位中年人,他不得不选择了妥协,让步。 稳定工作,有时候让他迫不得已。上次,我表哥结婚,正遇上他值班,没办法,领导批。

99350

模拟隐蔽操作 - 动态调用(避免 PInvoke 和 API 挂钩

如果将此与通常在 C# 中从内存中调用非托管代码的方式(通过自注入 shellcode)进行比较,这会容易得多! 定义委托的工作方式类似。您可以定义一个类似于定义变量的委托。...此功能可用于绕过 API 挂钩或仅在接触磁盘的情况下从内存加载和执行有效负载。 该模块可以映射到动态分配的内存或由磁盘上的任意文件支持的内存。当从磁盘手动映射模块时,将使用它的新副本。...DInvoke 也例外。...image.png 内存扫描 虽然手动映射具有绕过 API 挂钩生成 modload 事件的好处,但它的缺点是会产生异常的内存工件。在动态分配的内存中浮动的随机可执行 PE 文件并不完全正常。...它在 32 位机器上的 32 位进程中工作,在 64 位机器上的 64 位进程中工作。但它在 64 位机器上的 WOW64 进程中不起作用 -位机器。在系统调用的 WOW64 转换期间似乎出了点问题。

1.9K00

Hook 技术「建议收藏」

Windows自己安排的检查站之前也进行抽查,Hook根据程序员的需求可以变化,比如我就感兴趣100万以上的车(可能是走私的(*^__^*)),Hook就能在检查的时候专门找100万以上的车,至于其他上档次的车...同样Hook可以“为所欲为”,可以擅自设立一个检查站,也可以两个,三个···换成程序来说,钩子函数的工作原理是:当我们创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息...handle to application instance DWORD dwThreadId // thread identifier ); 函数功能: 该函数将一个应用程序定义的挂钩处理过程安装到挂钩链中去...,您可以通过安装挂钩处理过程来对系统的某些类型事件进行监控,这些事件与某个特定的线程或系统中的所有事件相关.具体参数详见MSDN; 参数说明: iHook:指定了钩子的种类,统计有13种,如下...1、创建一个基于对话框的工程 2、在对话框cpp文件中创建鼠标消息和键盘消息的处理函数(也有人叫做子程) LRESULT WINAPI MousePro(int nCode, WPARAM wParam

57430

python dll注入 网络_dll注入

CallNextHookEx()和UnhookWindowsHookEx() 消息钩子:Windows操作系统为用户提供了GUI(Graphic User Interface,图形用户界面), 它以事件驱动方式工作...也就是说,在敲击键盘时,消息会从操作系统移动到应用程序。 所谓的消息钩子就是在此期间偷看这些信息。...以键盘输入事件为例,消息的流向如下: 1.发生键盘输入时,WM_KEYDOWN消息被添加到操作系统的消息队列中; 2.操作系统判断这个消息产生于哪个应用程序,并将这个消息从消息队列中取出,添加到相应的应用程序的消息队列中...比如我们想对所有的键盘消息做挂钩,其取值将是WH_KEYBOARD,WH_KEYBOARD这个宏的值是2。...HMODULE Hmod = LoadLibraryA(“hookdll.dll”); 七:准备工作 1、最新anocoda3.7 2、提速下载可以改变源 pip3 config set global.index-url

2K30
领券