我需要每 5 分钟或更短时间按一次任何无用的键(例如 F11)来保持窗口处于活动状态(如果它 5 分钟内处于非活动状态,它将锁定)。
但我需要在桌面上按下该键(这样它就不会影响任何打开的窗口)。
我努力了
Loop
{
ControlSend, {F11}, WindowsApplication1
Sleep, 100000
}
但似乎不起作用。
谢谢。
答案1
为什么要发送F11到桌面?
如果只是为了保持计算机处于唤醒状态,则可以使用以下脚本:
#SingleInstance, force
#Persistent
SetTimer, NoSleep, 30000
Return
NoSleep:
DllCall( "SetThreadExecutionState", UInt,0x80000003 )
Return
从微软:
SetThreadExecutionState 函数
使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠状态或关闭显示。
还可以模拟鼠标动作来防止系统进入睡眠状态
(如果上述脚本对您不起作用):
Loop {
Sleep, 30000
MouseMove, 1, 0, 1, R ;Move the mouse one pixel to the right
MouseMove, -1, 0, 1, R ;Move the mouse back one pixel
}
所以实际上没有必要模仿按下一个键。
答案2
在之前的评论中,@Rik 提出了一个 AutoHotkey 脚本。它可以工作,但让我提供一个更简单的版本:
#Persistent ; script will stay running after the auto-execute section (top part of the script) completes
#SingleInstance Force ; Replaces the old instance of this script automatically
; https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate
; 0x80000002 = ES_CONTINUOUS | ES_DISPLAY_REQUIRED
DllCall("SetThreadExecutionState", UInt, 0x80000002)
此脚本将使 Windows 认为正在运行的应用程序不应被屏幕保护程序打断(但您仍可以通过按下默认的 Win+L 组合键手动锁定屏幕)。媒体播放器使用此技术来防止您在观看视频时屏幕关闭。即使公司强制执行的政策不允许您在 Windows 选项中禁用屏幕锁定,此技术仍有效。