स्क्रिप्ट को किसी प्रोग्राम के सामने लाने / लाने या सक्रिय न होने पर उसे खोलने के लिए स्क्रिप्ट


11

मैं एक स्क्रिप्ट विकसित करने की कोशिश कर रहा हूं जो निम्नलिखित कार्य करना चाहिए। उदाहरण के लिए, !Wचाहिए:

  • जांचें कि क्या वर्ड सक्रिय है (खुला या छोटा किया जा सकता है)
  • यदि इसे कम से कम किया जाता है, तो इसे कम से कम करने से पहले इसके आकार और स्थान को बहाल करना चाहिए
  • अगर यह खुला है, लेकिन अन्य खुली खिड़कियों के पीछे "छिपा हुआ" है, तो स्क्रिप्ट को इसे सामने लाना चाहिए, जिससे यह सबसे सामने / सक्रिय खिड़की बन जाए
  • यदि यह न तो न्यूनतम है और न ही खुला है, तो कार्यक्रम को नए सिरे से शुरू किया जाना चाहिए

मैं कई कार्यक्रमों के लिए यह करना चाहूंगा: !Wवर्ड के लिए, !Nनोटपैड ++ के लिए, !Xएक्सेल के लिए, !Pपावरपॉइंट के लिए, !Fफ़ायरफ़ॉक्स के लिए।

यदि किसी प्रोग्राम के कई उदाहरण चल रहे हैं, या यदि कई टैब उपलब्ध हैं, तो इसे सबसे हाल के उदाहरण या टैब के लिए ऊपर करना चाहिए। इसलिए, जब फ़ायरफ़ॉक्स की कई खिड़कियां खुली होती हैं, तो उसे सबसे हाल ही में खोले गए टैब के साथ सबसे हाल ही में देखी गई विंडो को पुनर्स्थापित करना (या सामने लाना) चाहिए। इसी तरह, यदि कई शब्द दस्तावेज खुले हैं, तो यह उस काम के लिए करना चाहिए, जिस पर मैं आखिरी बार काम कर रहा था। और, यदि कोई वर्ड डॉक्यूमेंट खुला या छोटा नहीं है, तो उसे एक फ्रेश वर्ड इंस्टेंस खोलना चाहिए।

मैं इनमें से कुछ चीजें कर सकता हूं, कुछ कार्यक्रमों के लिए, लेकिन लगातार नहीं, न ही एक हॉटकी में (मैं अभी भी स्क्रिप्टिंग भाषा सीख रहा हूं)। मैं इसे कैसे हासिल कर सकता हूं?

जवाबों:


14

विंडो एक्टिवेशन कैसे काम करता है, इसकी मेरी समझ बहुत सरल है। यह उस प्रकार की सबसे हाल ही में उपयोग की जाने वाली विंडो को पुनर्स्थापित करता है। वह डिफ़ॉल्ट व्यवहार कोडिंग बनाता है जिसे आप बहुत सरल चाहते हैं। वास्तव में, मैं दो साधारण कोड ब्लॉक के बाद आपके साथ लगभग कुछ समान करता हूं।

+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return

मैंने कई मॉनिटर के साथ काम करने के लिए एक दिलचस्प तालमेल बनाया। ध्यान दें कि विंडोज 7 पर, शिफ्ट + विंडोज़ की को पकड़े हुए और बाएँ और दाएँ नेविगेट करने के लिए तीरों का उपयोग करके प्रकाश गति पर नज़र रखने के बीच सक्रिय विंडो को स्थानांतरित किया जाएगा। इसलिए मैंने कुछ + चालाक और मैप किए गए शब्द को शिफ़्ट + विंडो + w में बदलने की कोशिश की। यह शब्द को पुनर्स्थापित करता है यदि पहले से खुला है या नहीं तो एक नया उदाहरण चलाता है। दृष्टिकोण की सुंदरता यह है कि मैंने कभी भी शिफ्ट + विंडोज़ कुंजी को जाने नहीं दिया। ऐसा करने से मैं सक्रिय / प्रारंभ शब्द दोनों को ले जा सकता हूं और इसे ठीक उसी स्थिति में ले जा सकता हूं जिसे मैं बाएं दाएं तीर कुंजियों का उपयोग करना चाहता हूं (ऊपर से नीचे तक अधिकतम होगा और नीचे कम हो जाएगा)। सक्रिय विंडो को पुनर्स्थापित करने के लिए मैप + # आर और आप पूरी तरह से उन सभी खिड़कियों को नियंत्रित करते हैं जो आप सामान्य रूप से माउस के बिना आसानी से उपयोग करते हैं। आपको याद रखना चाहिए कि जिस ऐप को आप सक्रिय करना चाहते हैं, उसका पहला अक्षर है।

स्क्रिप्ट को अधिक सामान्य बनाने के बारे में आपकी क्वेरी के जवाब में:

1) उपयोग करने पर विचार करें

; Allows you to search for an approximate window title match
SetTitleMatchMode, 2  

; For example, you could do the following to activate any existing window with 
; "- Microsoft Word" as part of the title

WinWait, - Microsoft Word, 
IfWinNotActive, - Microsoft Word, , WinActivate, - Microsoft Word, 
WinWaitActive, - Microsoft Word,

; some other code here once you have the window active

या एक और संभावना:

;Active the window by finding its ahk_class
WinWait, ahk_class OpusApp, 
IfWinNotActive, ahk_class OpusApp, , WinActivate, ahk_class OpusApp, 
WinWaitActive, ahk_class OpusApp,

नोट: ऊपर दिया गया कोड ऑटोसस्क्रिप्ट राइटर के जेनेरिक आउटपुट का सिर्फ एक रूपांतरण था। यह कुछ हद तक बेमानी है लेकिन प्रभावी है। खिड़की की तरह कुछ खोजने के लिए ahk_class AutoIt3 विंडो जासूस का उपयोग करने पर विचार करें।

यदि आपको एक खिड़की के शीर्षक की खोज करने की आवश्यकता है तो आप सक्रिय शीर्षक प्राप्त कर सकते हैं जैसा कि उदाहरण उदाहरण फ़ाइल में दिखाया गया है

WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".

एक और चाल जो आप उपयोग कर सकते हैं वह है WinSetTitle का उपयोग करके सक्रिय शीर्षक सेट करना

संपादित करें: यह देखते हुए कि आपके पास एक्सेल / शब्द / पावरपॉइंट के कई उदाहरण हैं, जो उस समस्या को हल करने के बारे में भी विचार करते हैं, जो ऑफ़िसैटेबस मुक्त संस्करण के साथ है। यह आपको उदाहरण के लिए टास्कबार के बारे में धज्जी के बजाय सभी खुली एक्सेल फाइलों को एक ही उदाहरण में रखने की अनुमति देगा।


यह पूर्ण है! महान युक्तियाँ और बहुत उपयोगी कोड। मैं एक दूसरा मॉनीटर जोड़ने जा रहा हूं, ताकि उत्तर का हिस्सा भी बहुत सराहा जाए।
पीटर वेरबेट

वैसे, मुझे ऑफ़िसटेबस टिप भी पसंद है। मुझे नहीं पता था कि यह अस्तित्व में है, लेकिन यह बहुत उपयोगी है।
पीटर वेरबेट

सौभाग्य से, कमांड "रन, विनवर्ड" काम करता है, इसलिए ऐसा लगता है कि मुझे पूर्ण पथ की आपूर्ति करने की आवश्यकता नहीं है।
पीटर वेरबेट

@ कॉल्ड्रेनवाटर: Google क्रोम के लिए काम करने के लिए किसी को अपनी स्क्रिप्ट बदलने की आवश्यकता कैसे होगी? समस्या यह है कि शीर्षक किस वेबसाइट के आधार पर खुला है।
Lernkurve

1

मैं देख रहा हूँ कि आप पहले से ही शानदार ऑटोहॉट्की भाषा के बारे में जानते हैं;)। मैं उपयोग करूँगा:

  • ifWActive; जाँच करें कि क्या विंडो सक्रिय है
  • विनगेट, आउटपुट, मिनमैक्स; जाँच करें कि क्या विंडो कम से कम है
  • ifinExists; जाँच करें कि क्या विंडो मौजूद है (लेकिन सक्रिय नहीं है)
  • Daud ; यदि कोई प्रक्रिया नहीं है तो प्रोग्राम को चलाएं
  • जेड-ऑर्डर / विनलिस्ट; वे सभी उदाहरणों को सूचीबद्ध करने में आपकी सहायता करेंगे / निर्धारित करेंगे कि कौन सा उदाहरण पहले वाला है

यदि आपके पास अधिक प्रश्न हैं, तो आपको निश्चित रूप से उन्हें ऑटोहोटेकी फोरम पर पूछना चाहिए।

; The script activates a Word 2007 window
; The script uses 'winTitle' and 'winClass' variables to match the window
; so set those properly first.
; Press Shift + 1 + w to see how the script works.
;
winTitle := "Document1 - Microsoft Word" ; use Autoit Window Spy to get this
winClass := "OpusApp"
RunWait, winword
return

+1::
    KeyWait, w, D T1 ; KeyboardHook not needed
    if(errorlevel) {
        msgbox, % """Shift + 1 + w"" failed"
        return
    }
    Send, {Backspace} ; erase 'w'
    IfWinNotActive, %winTitle%
    {
        WinActivate, %winTitle%
        WinWaitActive, %winTitle%, , 3
        if(errorlevel)
            MsgBox, % "Failed to activate the window."
    } 
    else ; Last Found Window set
    {
        MsgBox, % "Window already activated."

    }
return


F11::Reload

धन्यवाद। मैं इन के साथ खेल रहा हूं, लेकिन वास्तव में नहीं जानता कि कैसे एक प्रभावी अगर वहाँ लूप मिलता है। तो, अगर IfinActive गलत है, तो मैं अन्य कमांड के भाग के रूप में उपयुक्त रन कमांड कैसे लॉन्च करूं?
पीटर वर्बेट

@PeterVerbeet: संपादन देखें। मैंने Word 2007 अंग्रेजी संस्करण का उपयोग किया है। स्क्रिप्ट कैसे काम करता है यह देखने के लिए Shift + 1 + w दबाएं।
colemik

मैंने इसे कुछ बार संपादित किया है।
18.04 बजे colemik

धन्यवाद trismarck, यह वास्तव में उपयोगी है। यह बहुत अच्छा काम करता है। क्या इसे और अधिक "सामान्य" बनाने का कोई तरीका है? मैं यह जानना चाहूंगा कि वर्तमान में Word द्वारा जो दस्तावेज़ संपादित किया जा रहा है, उसकी परवाह किए बिना। यह मुझे लगता है कि मुझे हर बार स्क्रिप्ट में नाम बदलना होगा (मैं Word का उपयोग बहुत अधिक करता हूं और शायद ही कभी "Document1 का उपयोग कर रहा हूं"। क्या यह जांच कर किया जा सकता है कि क्या Word स्वयं सक्रिय है, चाहे वह किसी भी दस्तावेज का हो। पर सक्रिय?
पीटर वर्बेट

1

यह कुछ के रूप में के रूप में जटिल नहीं हो सकता है, लेकिन यहाँ है क्या मैं अपने अधिकांश कार्यक्रमों को लॉन्च करने के लिए उपयोग करता हूं। यदि यह पहले से ही सक्रिय है तो टॉगल आपको विंडो को छोटा करने की अनुमति देता है।

^NumpadDot::ShowStart("Google Chrome", "chrome.exe")

ShowStart(title, exe, toggle = 0)
{
    If WinActive(title) and toggle
        WinMinimize %title%
    Else
        {
            IfWinExist, %title%
                WinActivate
            else
            {
                Run, %exe%
                WinActivate
            }
        }
}

टॉगल हमेशा 0 नहीं होगा?
सैम हसलर

0

यह मैंने इस मुद्दे को अपने लिए हल किया है। https://superuser.com/a/1405409/997992 मैं मूल पोस्ट में उल्लेख करना भूल गया कि मैं वास्तविक विंडोज मैनेजर नामक एक विंडो ऐड का उपयोग कर रहा हूं, यही कारण है कि मेरे पास विनविस्ट के साथ एक अतिरिक्त जांच है या तो वास्तविक विंडोज मैनेजर के लिए या एक्सप्लोरर।

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.