在 Windows 中监听屏幕关闭事件并禁用鼠标

在 Windows 中监听屏幕关闭事件并禁用鼠标

我想防止鼠标唤醒我的屏幕(当我的电脑打开但屏幕关闭或屏幕保护程序打开时)。

我已经阅读了所有资源,告诉我“这是不可能的”,例如这个问题。或者那些说拔掉鼠标,或将鼠标倒置,或防止鼠标唤醒处于睡眠状态的 PC 的。——对这些不感兴趣。

我希望有人能帮助我找到这个解决方案:

  • 如何拦截显示器关闭事件或屏幕保护程序打开事件。
  • 如果没有,那么至少通过运行 monitorsOff.bat 文件或 nircmd 命令或 AutoHotkey AHK 命令拦截我发送的明确监视器关闭命令。
  • 然后运行一个脚本,立即禁用我的鼠标/非键盘外围设备。
  • 然后,如果屏幕被唤醒,或者屏幕保护程序被关闭,或者至少按下了任何键盘键,则重新启用鼠标。

干杯。

[编辑]

我们有 user3419297 使用 AHK 提供的出色解决方案。理想情况下,当 Windows 被锁定(不是注销,而是锁定)时,该功能也应该有效。

也许可以像 DaaBoss 所说的那样使用粘滞键,或者使用 Windows 辅助功能的其他部分。

答案1

尝试这个 AHK 脚本:

$F1 Up::  ; or whatever combination you want
    Keyboard_Blocked := true   ; assign the Boolean value "true" or "1" to this variable
    BlockInput On   ; disable keyboard and mouse
    SendMessage, 0x112, 0xF170, 2,, Program Manager ; turn the monitor off, similar to power saving mode
    ; or:
    ; Run path of your screensaver 
return


; The #If directive creates context-sensitive hotkeys:

#If (Keyboard_Blocked) ; If this variable has the value "true" 

    $F1 Up::  ; press F1 to re-enable keyboard and mouse and turn the monitor on
        BlockInput Off
        Keyboard_Blocked := false
    return

#If ; turn off context sensitivity

编辑:

您无需在电源选项中配置显示器关闭后的不活动时间或按 Win+L 锁定系统,而是可以使用永久运行的 AHK 脚本来完成。在此脚本中,您可以添加更多内容(热键、热字符串、函数等)以方便您的工作。

#NoEnv
#SingleInstance Force
SetTimer, DetectTimeIdle, 50
return

DetectTimeIdle:
; lock the computer automatically after 20 seconds of inactivity.
; Replace 20000 with 60000 for 1 minute etc.
If (A_TimeIdle > 20000) ; as long as there is no input within the last 20 seconds
    GoSub !F1 Up ; jump to this hotkey definition
return


; Press Alt+F1 to manually lock the computer
!F1 Up::
    Keyboard_Blocked := true   ; assign the Boolean value "true" or "1" to this variable
    BlockInput On   ; disable keyboard and mouse
    SendMessage, 0x112, 0xF170, 2,, Program Manager ; turn the monitor off, similar to power saving mode
return


#If (Keyboard_Blocked) 

    ; press F1 or F2 or Space ... to re-enable keyboard and mouse and turn the monitor on
    $F1 Up:: 
    $F2 Up::
    $Space Up::
    ; ...
        BlockInput Off
        Keyboard_Blocked := false
        ; Move the mouse  (speed 10) by 20 pixels to the right and 30 pixels down from its current location to unlock the computer:
        MouseMove, 20, 30, 10, R
        reload
    return

#If

相关内容