【问题标题】:Toggle SCROLL LOCK when screensaver activates激活屏幕保护程序时切换 SCROLL LOCK
【发布时间】:2015-10-19 19:23:48
【问题描述】:

我希望在我的计算机屏幕保护程序启用时切换滚动锁定的窗口中始终在后台运行的应用程序,然后在禁用后将其切换回来,如果可能的话。

原因是我的键盘会根据滚动锁定灯的状态亮起。在我不使用的时候让键盘自动关灯会很酷。

我知道一些 VBscript 中的代码,一些 Python 中的代码,以及许多 VB 中的代码。我尝试使用来自this 的代码 sn-p 并将其变成这样:

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 次进行一次检查,或者告诉我如何使用标题中列出的其他语言之一。

【问题讨论】:

  • 乍一看,您的代码对我来说并不正确。它可能需要长达 5 分钟才能检测到屏幕保护程序,但这是我看到的唯一问题。如果屏幕保护程序已启动并且程序已经运行(并且您等待了​​ 5 分钟)会发生什么?
  • @Syberdoor 为什么是 5 分钟?
  • 对不起,我很困惑。我以某种方式假设 vbscript 睡眠就像 c 风格的睡眠,在几秒钟内而不是几毫秒内......忘记我说的话,虽然下面的 ansgars 答案是正确的

标签: python visual-studio vbscript screensaver


【解决方案1】:

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

【讨论】:

  • @Jared 该代码旨在解决您问题中的问题,而不是为您提供完整的脚本。您仍然需要将其与其余代码集成。
  • 成功了!谢谢!我刚开始使用 VBscript,因为我认为它既适合这个项目,又简单轻便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多