2015-10-19 75 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

相關問題