2013-10-15 113 views
5

我們有多臺電視機,每臺連接到不同的計算機。我們的目標是在兩個應用程序的循環連續循環中顯示/ setfocus。這必須在所有電視機中同步。最初我通過發送alt + esc鍵來設置它在任務欄中的所有應用程序中循環。哪些工作正常,但很難在所有電視機上同步它。所以我使用AppActivate來設置焦點並根據偶數/奇數分鐘切換窗口。它現在是同步的,但屏幕似乎試圖將焦點每隔一秒地設置在窗口上,導致屏幕一直閃爍。我怎樣才能避免它?有什麼建議麼??? 這是代碼的一部分。VBScript - 使用AppActivate將焦點切換到窗口

' Loop lasts 1 second 

intSleep = 1000 

Set wshShell = CreateObject("WScript.Shell") 

'repeat process indefinetly 

Do while infiniteloop=0 
    a = minute(time()) 
    intResult = a Mod 2 ' to check for even/odd minute 

    If intResult = 0 Then 
     'display window1 
     if wshShell.AppActivate "Display - [Dashboard]" = false then 
      wshShell.AppActivate "Display - [Dashboard]" 
     end if 

    ElseIf intResult = 1 Then 
     'display window2 
     if wshShell.AppActivate "Display - [TEST]" = false then 
      wshShell.AppActivate "Display - [TEST]" 
     end if 

    End If 
    Wscript.Sleep intSleep 

Loop 

回答

2

有沒有一個真正的優雅的方式與VBScript做到這一點,但你是正確的從SendKeys移走。

我會簡單地將睡眠時間增加到1分鐘。這樣你就可以最大限度地減少評估If語句的次數(從而提高性能)。它只會嘗試每分鐘偷一次焦點:

Option Explicit 

Dim shl 

Set shl = CreateObject("WScript.Shell") 

Do 
    If (Minute(Time()) Mod 2) = 0 Then 
    shl.AppActivate "Program One" 
    Else 
    shl.AppActivate "Program Two" 
    End If 

    WScript.Sleep (1000 * 60) 
Loop 
+0

非常感謝您的建議!是增加睡眠分鐘數,儘量減少評估數量,但機器不同步,因爲腳本文件是在每臺PC上的不同時間啓動的。有沒有辦法檢查窗口是否處於活動狀態? – choco

+0

我也認爲檢查當前活動窗口對此有用,但似乎不可能。如果你需要同步,爲什麼不安排一個任務在每臺機器上同時運行腳本,然後確保計算機的時鐘設置爲從互聯網上獲取時間 – Jobbo

+0

是的,我會嘗試一下......看起來沒有太多選項留下vb腳本..再次感謝。 – choco

3

它每秒閃爍一次,因爲整個偶數分鐘的變量intResult等於0。你需要的是另一個變量,比如「intLastResult」。在循環結束時,您將設置intLastResult = intResult,並重新執行IF語句以更改焦點,以便只在當前結果與先前結果不同時執行。 I.E. 「如果intResult = 0 AND intLastResult = 1 Then」或「If intResult = 1 AND intLastResult = 0 Then」。這樣他們應該每分鐘只燃燒一次。

+0

也許提供一些僞代碼可以幫助解釋您的解決方案。 – verybadalloc

+0

優秀的答案。 – cjv

相關問題