Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBScript-使用AppActivate将焦点切换到窗口_Vbscript - Fatal编程技术网

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

VBScript-使用AppActivate将焦点切换到窗口,vbscript,Vbscript,我们有多台电视机,每台都连接到不同的计算机上。目标是在两个应用程序之间的连续循环上显示/设置焦点。这必须在所有电视上同步。最初,我通过发送alt+esc键在任务栏中的所有应用程序中设置了循环。它工作得很好,但很难在所有电视上同步。因此,我使用AppActivate设置焦点,并根据偶数/奇数分钟在窗口之间切换。它现在是同步的,但屏幕似乎试图通过使屏幕一直闪烁来每秒将焦点设置到窗口。我怎样才能避免它???有什么建议吗??? 这是代码的一部分 ' Loop lasts 1 second intSle

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

使用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脚本没有太多选择余地。。再次感谢。也许提供一些伪代码可以帮助解释您的解决方案。