如何通过键盘/宏键盘(Arduino Leonardo)发送SendMessage指令让显示器休眠
实现方案说明
Arduino Leonardo 本身只能模拟USB键盘/鼠标输入,无法直接向Windows系统发送系统消息,对你来说门槛最低的方案是通过Leonardo模拟触发一组冷门快捷键,再用你已经调试好的AHK脚本监听这组快捷键执行休眠逻辑,全程只需要简单修改几行现成代码即可。
第一步:修改现有AHK脚本
把你原有AHK脚本的触发按键换成几乎不会日常用到的组合键,比如Ctrl+Shift+F12,修改示例如下:
; 把原来的触发按键比如a::替换成下面这行,^对应Ctrl、+对应Shift ^+F12:: SendMessage, 0x112, 0xF170, 2, , Program Manager return
修改完成后保存运行脚本,脚本会在后台自动监听快捷键触发。如果需要开机自动运行,给脚本创建快捷方式,Win+R输入shell:startup回车打开启动文件夹,把快捷方式放进去即可。
第二步:Arduino Leonardo 代码&接线
你只需要准备1个普通轻触按键,接线规则:按键一端接Leonardo的D2引脚,另一端接GND,不需要额外接电阻。
直接复制下面的代码到Arduino IDE,烧录到开发板即可:
#include "Keyboard.h" // 如果你把按键接了其他引脚,修改下面的数字即可 const int buttonPin = 2; int lastButtonState = HIGH; void setup() { pinMode(buttonPin, INPUT_PULLUP); Keyboard.begin(); } void loop() { int currentState = digitalRead(buttonPin); // 检测按键按下,自动消抖避免误触发 if (currentState == LOW && lastButtonState == HIGH) { delay(10); if (digitalRead(buttonPin) == LOW) { // 发送和AHK对应匹配的快捷键Ctrl+Shift+F12 Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press(KEY_F12); delay(100); Keyboard.releaseAll(); // 等待按键松开避免重复触发 while(digitalRead(buttonPin) == LOW) { delay(10); } } } lastButtonState = currentState; delay(10); }
烧录时开发板选择Arduino Leonardo,端口选设备管理器里对应的COM端口即可。烧录完成后按动按键,就能直接触发显示器休眠。
内容的提问来源于stack exchange,提问作者Eeglis
相关产品推荐
相关产品推荐

