我们有多台电视连接到不同的电脑。目标是在循环通过两个应用程序的连续循环上显示/设置焦点。这必须在所有电视上同步。最初我通过发送alt + esc键在任务栏中设置了所有应用程序。哪个工作正常,但很难在所有电视上同步它。所以我使用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
答案 0 :(得分:3)
它每秒都会闪烁,因为整个偶数分钟变量intResult等于0。你需要的是另一个变量,比如“intLastResult”。在循环结束时,您将设置intLastResult = intResult,并重新执行您的IF语句以更改焦点,以便它们仅在当前结果与先前结果不同时执行。 I.E. “如果intResult = 0 AND intLastResult = 1则”或“如果intResult = 1 AND intLastResult = 0则”。这样他们每分钟只能开一次。
答案 1 :(得分: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