在屏幕保护程序激活时切换 SCROLL LOCK

Toggle SCROLL LOCK when screensaver activates

我希望在 windows 中制作一个始终在后台运行的应用程序,当我的计算机的屏幕保护程序启用时切换滚动锁定,然后在它禁用后切换回来,如果可能的话。

原因是我的键盘会根据滚动锁定灯的状态亮起。如果我不使用键盘时能自动关灯就好了。

我知道 VBscript 中的一些代码,Python 中的一些代码,以及 VB 中的很多代码。我尝试使用 this 中的代码片段并将其转换为:

strComputer = "computername"
Set wshShell =wscript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")

Do
  WScript.Sleep 300
  For Each objProcess In colProcesses
    If Right(objProcess.Name, 4) = ".scr" Then
      wshShell.SendKeys "{SCROLLLOCK}"
    End If 
  Next
Loop

仅当程序在屏幕保护程序已打开时运行才有效。 请帮助我了解如何在屏幕保护程序打开时每 300 个刻度进行一次检查,或者告诉我如何使用标题中列出的其他语言之一。

WMI 查询的结果反映了查询 运行 时的状态。它不会自动刷新,因此不会选择在其初始 运行 之后启动的任何进程。将查询移到外循环内,以便每次迭代都重新运行:

Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")

Do
  WScript.Sleep 300
  Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
  For Each objProcess In colProcesses
    If Right(objProcess.Name, 4) = ".scr" Then
      wshShell.SendKeys "{SCROLLLOCK}"
    End If 
  Next
Loop