2013-10-15 20 views
5

複数のテレビがそれぞれ別のコンピュータに接続されています。目標は、2つのアプリケーションを通した連続的なループ循環で/ setfocusを表示することです。これはすべてのテレビで同期させる必要があります。もともと、私はalt + escキーを送信することで、タスクバーのすべてのアプリケーションからサイクルを設定していました。これは問題なく動作しましたが、すべてのテレビで同期をとるのに苦労しました。だから、私はAppActivateを使ってsetfocusを行い、偶数/奇数分に基づいてウィンドウを切り替える。これは現在同期されていますが、画面は常に画面をちらつくように毎秒ウィンドウにフォーカスを合わせようとしています。どうすればそれを避けることができますか?助言がありますか??? コードの一部です。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文を評価する回数が最小限に抑えられます(これによりパフォーマンスが向上します)。そして、それは唯一分後にフォーカスを盗もうとします:変数intResult全体でも分間0に等しいので

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

それは毎秒点滅します。必要なのは "intLastResult"のような別の変数です。ループの最後に、intLastResult = intResultを設定し、現在の結果が以前の結果と異なる場合にのみ実行するようにフォーカスを変更するためにIF文を再実行します。 I. "if intResult = 0 AND intLastResult = 1 Then"または "if intResult = 1 AND intLastResult = 0 Then"を選択します。この方法では、1分間に1回だけ発射する必要があります。

+0

あなたの解決方法を説明するのに役立つ擬似コードを提供することがあります。 – verybadalloc

+0

優れた答え。 – cjv

関連する問題