2013-10-15 19 views
5

'u kullanarak odağı pencereye çevirme Her biri farklı bir bilgisayara bağlı birden çok TV var. Amaç, iki uygulama aracılığıyla sürekli döngü döngüsünde görüntülenmesi/ayarlanmasıdır. Bu tüm televizyonlarda senkronize edilmeli. Başlangıçta, görev çubuğundaki tüm uygulamalar aracılığıyla alt + esc tuşunu göndererek döngü oluşturmuştum. Hangi iyi çalıştı ama tüm televizyonlarda senkronize zor bir zaman geçirdim. Bu yüzden, AppActivate'i odaklamak ve çift/tek dakika bazında pencereler arasında geçiş yapmak için kullandım. Şimdi senkronize ediliyor, ancak ekran her saniyede bir pencereye odaklanmayı deniyor gibi görünüyor, ekranın sürekli olarak titremesine neden oluyor. Bunu nasıl önleyebilirim ??? Baska öneri??? İşte kodun bir parçası.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 

cevap

2

VBScript ile bunu yapmak için gerçekten zarif bir yol yok, ancak SendKeys'ten uzaklaşmak hakkınız var.

Sadece uyku süresini 1 dakikaya kadar arttırırım. Bu sayede, If deyimlerini (bu sayede performansı artırır) değerlendirir. Ve sadece bir dakika sonra odağı çalmaya çalışır: değişken intResult tüm bile dakikalığına 0'a eşitse, çünkü

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

Öneriniz için çok teşekkürler! Evet, uyku dakikasını arttırmak, değerlendirmelerin # sayısını en aza indirir, ancak komut dosyası dosyası her PC'de farklı zamanlarda başlatıldığı için makineler senkronize edilmez. Pencerenin aktif olup olmadığını kontrol etmenin bir yolu var mı? – choco

+0

Ayrıca şu anki aktif pencerenin incelenmesinin faydalı olacağını düşündüm ama mümkün görünmüyor. Senkronizasyon gerekiyorsa, neden her makinede aynı anda betiği çalıştırmak için bir görev zamanlama ve sonra bilgisayar saatlerinin internetten zaman alacak şekilde ayarlandığından emin olun – Jobbo

+0

evet bunu deneyeceğim ... pek bir şey yok gibi görünüyor vb script ile bırakılan seçenek .. tekrar teşekkürler. – choco

3

her saniye titrer. İhtiyacınız olan şey "intLastResult" gibi başka bir değişkendir. Döngününüzün sonunda, intLastResult = intResult öğesini ayarlayacak ve odağı değiştirmek için IF ifadelerinizi yeniden yapılandıracaksınız, böylece yalnızca geçerli sonuç önceki sonuçtan farklı olduğunda çalışacaklardır. I.E. "IntResult = 0 AND intLastResult = 1 Sonra" veya "IntResult = 1 VE intLastResult = 0 Sonra". Bu sayede sadece dakikada bir kez ateş etmeleri gerekir.

+0

Belki de bazı sözde kodları çözümünüzü açıklamaya yardımcı olur. – verybadalloc

+0

Mükemmel cevap. – cjv