2015-10-19 89 views
0

我希望制作一个应用程序,该应用程序始终在后台运行的窗口中,当我的计算机的屏幕保护程序启用时切换滚动锁定,然后在禁用时切换回切换(如果可能)。当屏幕保护程序激活时,切换SCROLL LOCK

原因是我有一个键盘根据滚动锁定灯的状态点亮。当我不使用键盘时,让键盘自动关闭灯光会很酷。

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

+0

乍一看,您的代码对我来说看起来并不正确。它可能需要长达5分钟才能检测到屏幕保护程序,但这是我看到的唯一问题。如果屏幕保护程序启动并且程序已经运行(并且您等待了​​5分钟),会发生什么情况? – Syberdoor

+0

@Sberberry为什么5分钟? – Jared

+0

对不起,我很困惑。我以某种方式假定vbscript睡眠在几秒钟内就像c样式的睡眠而不是毫秒......忘记我所说的,下面的ansgars回答将是正确的,尽管 – Syberdoor

回答

0

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 
+0

此代码无法运行。错误0x80041021 – Jared

+0

@Jared代码旨在解决您的问题中的问题,而不是为您提供完整的脚本。您仍然需要将其与您的其他代码进行整合。 –

+0

它工作!谢谢!即时通讯刚开始使用VBScript,因为我认为这将是适合这个项目,也简单和轻量级。 – Jared

相关问题