You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows远程桌面连接时本地监听键盘+按键的实现方案咨询

远程桌面焦点下本地捕获"+"按键的解决办法

为什么pynput抓不到?

Windows远程桌面(RDP)会直接独占键盘输入流,把按键事件全转发给远程会话,pynput这类普通用户态的监听工具根本抢不到事件。

能用的解决方法

1. 写系统级底层钩子(C++/C#)

底层键盘钩子(LowLevelKeyboardProc)是系统级别的,优先级比RDP的钩子高,能在事件被转发前截下来。

  • 可以写个轻量的C++ DLL,注册这个钩子,抓到"+"键后直接发MQTT消息,或者调用你已有的Python脚本。
  • 核心逻辑示例(伪代码):
    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
        KBDLLHOOKSTRUCT* keyInfo = (KBDLLHOOKSTRUCT*)lParam;
        // 捕获"+"键按下事件
        if (wParam == WM_KEYDOWN && keyInfo->vkCode == VK_OEM_PLUS) {
            // 执行发送MQTT的逻辑,比如调用本地Python脚本
            system("python C:/your_script_path/mqtt_sender.py");
        }
        return CallNextHookEx(NULL, nCode, wParam, lParam);
    }
    
  • 注意:这个程序得用管理员权限运行,不然钩子注册不成功。

2. 用AutoHotkey的底层钩子

AutoHotkey自带底层键盘钩子功能,能绕过RDP的独占限制:

  • 写个简单的AHK脚本,监听"+"键,触发时调用你的Python脚本发MQTT:
    ; 启用底层键盘钩子
    #InstallKeybdHook
    ; 监听"+"键按下
    +::
        Run, python "C:\你的脚本路径\mqtt_send.py"
        return
    
  • 右键以管理员权限运行这个AHK脚本就行,大部分场景下能在RDP焦点时抓到按键。

3. 改RDP的键盘捕获设置

Windows RDP有隐藏配置可以让本地保留部分按键控制权:

  • 打开远程桌面连接的「显示选项」→「本地资源」→「键盘」,选「当我使用全屏模式时,仅使用本地键盘」;或者直接编辑rdp配置文件,加一行:keyboardhook:i:2,窗口模式下本地就能抓按键了。
  • 要是想全屏也生效,试试把值改成keyboardhook:i:1,不过这个可能受服务器端组策略限制,不一定管用。

4. 硬件层面截获(如果是硬件模拟器)

如果你的模拟器是USB硬件设备,可以直接从USB端口抓HID报告,绕过Windows的输入系统,RDP根本碰不到这个层面的事件:

  • 用libusb这类库写个工具,读取USB设备的按键数据,解析出"+"键按下的事件,再发MQTT消息就行。

内容的提问来源于stack exchange,提问作者Deesak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:25:17