2013-10-15 11 views
5

Abbiamo più televisori collegati a un altro computer. L'obiettivo è visualizzare/impostare il focus su un ciclo continuo che cicla attraverso due applicazioni. Questo deve essere sincronizzato su tutti i televisori. Inizialmente avevo impostato il ciclo di tutte le app nella barra delle applicazioni inviando il tasto alt + esc. Che ha funzionato bene ma ha avuto difficoltà a sincronizzarlo su tutti i televisori. Quindi ho usato l'AppActivate per impostare la messa a fuoco e passare da una finestra all'altra in base al minuto pari/dispari. Ora è sincronizzato, ma lo schermo sembra cercare di impostare la messa a fuoco sulla finestra ogni secondo causando lo sfarfallio dello schermo tutto il tempo. Come posso evitarlo ??? Eventuali suggerimenti??? Ecco la parte del codice.VBScript - passaggio attivo alla finestra utilizzando 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 

risposta

2

Non c'è davvero un elegante modo per farlo con VBScript, ma hai ragione ad allontanarsi da SendKeys.

Vorrei semplicemente aumentare il tempo di sospensione a 1 minuto. In questo modo stai minimizzando il numero di volte che valuta le istruzioni If (aumentando così le prestazioni). E si cerca solo di rubare il fuoco una volta al minuto:

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

Grazie mille per il suggerimento! Sì, aumentando il minuto di sonno, si riduce al minimo il numero di valutazioni, ma le macchine non sono sincronizzate poiché il file di script viene avviato in momenti diversi su ciascun PC. C'è un modo per controllare se la finestra è attiva ?? – choco

+0

Ho anche pensato che ispezionare la finestra attiva corrente sarebbe utile per questo, ma non sembra possibile. Se hai bisogno di sincronizzazione, perché non pianifica un'attività per eseguire lo script contemporaneamente su ogni macchina, quindi assicurati che gli orologi del computer siano impostati per ottenere il tempo da Internet – Jobbo

+0

sì, lo proverò ... sembra che non ci sia molto opzione lasciata con script vb .. grazie ancora. – choco

3

sfarfalla ogni secondo, perché l'intResult variabile è uguale a 0 per l'intero, anche minuto. Quello di cui hai bisogno è un'altra variabile, come "intLastResult". Alla fine del ciclo, si imposterà intLastResult = intResult e si eseguiranno nuovamente le istruzioni IF per cambiare il focus in modo che vengano eseguite solo quando il risultato corrente differisce dal risultato precedente. OSSIA "If intResult = 0 AND intLastResult = 1 Then" or "If intResult = 1 AND intLastResult = 0 Then". In questo modo dovrebbero solo sparare una volta al minuto.

+0

Forse fornire qualche pseudocodice potrebbe aiutare a spiegare la tua soluzione. – verybadalloc

+0

Ottima risposta. – cjv

Problemi correlati