VBScript - 使用AppActivate将焦点切换到窗口

时间:2013-10-15 16:02:23

标签: vbscript

我们有多台电视连接到不同的电脑。目标是在循环通过两个应用程序的连续循环上显示/设置焦点。这必须在所有电视上同步。最初我通过发送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

2 个答案:

答案 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