VBScript-使用AppActivate将焦点切换到窗口
我们有多台电视机,每台都连接到不同的计算机上。目标是在两个应用程序之间的连续循环上显示/设置焦点。这必须在所有电视上同步。最初,我通过发送alt+esc键在任务栏中的所有应用程序中设置了循环。它工作得很好,但很难在所有电视上同步。因此,我使用AppActivate设置焦点,并根据偶数/奇数分钟在窗口之间切换。它现在是同步的,但屏幕似乎试图通过使屏幕一直闪烁来每秒将焦点设置到窗口。我怎样才能避免它???有什么建议吗??? 这是代码的一部分VBScript-使用AppActivate将焦点切换到窗口,vbscript,Vbscript,我们有多台电视机,每台都连接到不同的计算机上。目标是在两个应用程序之间的连续循环上显示/设置焦点。这必须在所有电视上同步。最初,我通过发送alt+esc键在任务栏中的所有应用程序中设置了循环。它工作得很好,但很难在所有电视上同步。因此,我使用AppActivate设置焦点,并根据偶数/奇数分钟在窗口之间切换。它现在是同步的,但屏幕似乎试图通过使屏幕一直闪烁来每秒将焦点设置到窗口。我怎样才能避免它???有什么建议吗??? 这是代码的一部分 ' Loop lasts 1 second intSle
' 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
使用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
它每秒闪烁一次,因为变量
intResult
在整个偶数分钟内等于0
。您需要的是另一个变量,如“intLastResult”
在循环结束时,您将设置intLastResult=intResult
,并重新执行IF语句以更改焦点,以便它们仅在当前结果与上一个结果不同时执行
即“如果intResult=0且intLastResult=1,则”或“如果intResult=1且intLastResult=0,则”
这样他们每分钟只能开火一次 谢谢你的建议!是的,增加睡眠时间可以最大限度地减少评估次数,但由于脚本文件在每台电脑上的不同时间启动,因此机器不同步。有没有办法检查窗口是否处于活动状态?我还认为检查当前活动窗口对此很有用,但似乎不可能。如果您需要同步,为什么不安排一个任务在每台机器上同时运行脚本,然后确保计算机的时钟设置为从Internet获取时间,我将尝试..看起来vb脚本没有太多选择余地。。再次感谢。也许提供一些伪代码可以帮助解释您的解决方案。