【问题标题】:How to hook notebook's hardware keys?如何挂笔记本的硬件按键?
【发布时间】:2013-02-24 08:47:18
【问题描述】:

我有一个Acer Aspire 5740G,我想拦截硬件按钮。我使用 SetWindowsHookEx() 编写了一个 C# 应用程序。

例如,对于音量按钮,我收到VolumeUpVolumeDown 消息,一切都很好。但是对于wifi 按钮蓝牙按钮,我只收到LBUTTONOEMCLEAR(KeyCode 255)。那么如何区分这两者

我还读到,这个按钮可能无法访问,因为它们会被视为操作系统下方的 Fn-Keys。但是有一个名为Launch Manager 的 Acer 软件,它显示 OSD 消息并显示蓝牙/wifi 标志。所以必须有可能(至少在理论上)在操作系统级别区分这些按钮。

那么,如何钩住这些键呢?

【问题讨论】:

    标签: c# keyboard hook pinvoke device-driver


    【解决方案1】:

    这是一个相关的问题

    不知道您是否编写过 Windows 驱动程序。

    Windows 驱动程序,嗯,历史悠久。

    现代 Windows 有两种设备驱动模式:

    由于您发现这两个按钮具有相同的窗口消息,它可能是由内核模式驱动程序控制的。

    某些硬件信号可能没有WM_ 消息定义,有时它们只是映射到一个相同的 Windows 消息,但内核模式驱动程序可以区分它们。有很多,例如Ke bla bla 和IRP_ bla bla 的东西;有些甚至只能用 C/C++ 编写,即原生代码;除了查看驱动程序之外,您可能没有其他办法。

    如果你真的对 Windows 驱动感兴趣,可以看看Windows Driver Development,WDK(Windows Driver Kit) 可以免费下载。

    最后,如果您强烈需要制造商(Acer)的技术支持,请发表评论让我知道我们是否会联系,我会回复我的电子邮件。

    【讨论】:

    • 这个答案是为了你的问题的方向,但是太长了,不能发表评论。我正在考虑稍后删除它。
    • 首先 - 谢谢你的回答。第二 - 请不要删除它。我认为它可能会帮助面临同样问题的其他用户。 ;)
    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多