2013-10-15 4 views
5

का उपयोग कर विंडो पर फ़ोकस स्विच करना हमारे पास एक अलग कंप्यूटर से जुड़े कई टीवी हैं। लक्ष्य दो अनुप्रयोगों के माध्यम से निरंतर लूप साइकल चलाना/सेटफोकस प्रदर्शित करना है। इसे सभी टीवी में सिंक्रनाइज़ किया जाना है। मूल रूप से मैंने इसे 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

वीबीस्क्रिप्ट के साथ ऐसा करने का वास्तव में एक शानदार तरीका नहीं है, लेकिन आप SendKeys से दूर जाने का अधिकार रखते हैं।

मैं बस सोने का समय 1 मिनट तक बढ़ा दूंगा। इस तरह आप अगर कथन का मूल्यांकन करते हैं तो कितनी बार कम हो रहा है (जिससे प्रदर्शन बढ़ रहा है)। और यह केवल एक मिनट एक बार फोकस चोरी करने की कोशिश करता है:

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

सुझाव के लिए बहुत बहुत धन्यवाद! हां नींद के मिनट में वृद्धि, मूल्यांकन के # को कम करता है लेकिन मशीनों को सिंक्रनाइज़ नहीं किया जाता है क्योंकि स्क्रिप्ट फ़ाइल प्रत्येक पीसी पर अलग-अलग समय पर शुरू होती है। क्या यह जांचने का कोई तरीका है कि खिड़की सक्रिय है या नहीं ?? – choco

+0

मैंने यह भी सोचा कि वर्तमान सक्रिय विंडो का निरीक्षण करना इसके लिए उपयोगी होगा लेकिन यह संभव नहीं लगता है। यदि आपको सिंक्रनाइज़ेशन की आवश्यकता है, तो प्रत्येक मशीन पर एक ही समय में स्क्रिप्ट को चलाने के लिए किसी कार्य को शेड्यूल क्यों न करें, और फिर सुनिश्चित करें कि कंप्यूटर के घड़ियों को इंटरनेट से समय प्राप्त करने के लिए सेट किया गया है – Jobbo

+0

हाँ मैं कोशिश करूँगा..ऐसा लगता है कि बहुत कुछ नहीं है विकल्प वीबी स्क्रिप्ट के साथ छोड़ दिया .. फिर से धन्यवाद। – choco

3

यह क्योंकि चर intResult पूरे भी मिनट के लिए 0 के बराबर होती है हर दूसरे flickers। आपको एक और चर है, जैसे "intLastResult"। अपने लूप के अंत में, आप intLastResult = intResult सेट करेंगे, और फोकस बदलने के लिए अपने IF कथन दोबारा करेंगे ताकि वे केवल परिणाम निकाल सकें जब वर्तमान परिणाम पिछले परिणाम से अलग हो। अर्थात। "अगर intResult = 0 और intLastResult = 1 फिर" या "अगर intResult = 1 और intLastResult = 0 फिर"। इस तरह उन्हें केवल एक मिनट में आग लगनी चाहिए।

+0

शायद कुछ छद्म कोड प्रदान करने से आपके समाधान की व्याख्या करने में मदद मिलेगी। – verybadalloc

+0

उत्कृष्ट जवाब। – cjv

संबंधित मुद्दे