สคริปต์เพื่อเรียกคืน / นำมาไว้ด้านหน้าของโปรแกรมหรือเปิดหากไม่ได้ใช้


10

ฉันพยายามพัฒนาสคริปต์ที่ควรทำดังต่อไปนี้ ตัวอย่างเช่น, !W ควร:

  • ตรวจสอบว่า Word ใช้งานอยู่ (สามารถเปิดหรือย่อขนาดเล็กสุดได้)
  • หากถูกย่อให้เล็กสุดควรคืนค่าเป็นขนาดและตำแหน่งที่มีก่อนย่อเล็กสุด
  • ถ้ามันเปิดอยู่ แต่ "ซ่อน" อยู่ด้านหลังหน้าต่างอื่นที่เปิดอยู่สคริปต์ ควรนำมาไว้ด้านหน้าทำให้เป็นหน้าต่างที่อยู่ข้างหน้าสุด / แอคทีฟ
  • หากไม่ย่อท้อหรือเปิดโปรแกรมควรเริ่มใหม่

ฉันต้องการทำสิ่งนี้กับหลาย ๆ โปรแกรม: !W สำหรับ Word !N สำหรับ Notepad ++ !X สำหรับ excel !P สำหรับ powerpoint !F สำหรับ Firefox

หากมีหลายอินสแตนซ์ของโปรแกรมกำลังทำงานอยู่หรือหากมีหลายแท็บให้ใช้งานก็ควรดำเนินการดังกล่าวข้างต้นสำหรับอินสแตนซ์หรือแท็บล่าสุด ดังนั้นเมื่อเปิดหลายหน้าต่างของ Firefox มันควรจะคืนค่า (หรือนำมาไว้ด้านหน้า) หน้าต่างที่ดูล่าสุดด้วยแท็บที่เปิดล่าสุด ในทำนองเดียวกันหากเปิดเอกสารคำหลายคำก็ควรทำเช่นนี้กับเอกสารที่ฉันใช้งานล่าสุด และหากไม่มีเอกสาร Word ถูกเปิดหรือย่อให้เล็กสุดมันควรเปิดอินสแตนซ์คำใหม่ ..

ฉันสามารถทำสิ่งเหล่านี้ได้สำหรับบางโปรแกรม แต่ไม่สม่ำเสมอหรือในฮอตคีย์เดียว ฉันจะบรรลุสิ่งนี้ได้อย่างไร

คำตอบ:


13

ความเข้าใจของฉันเกี่ยวกับการทำงานของ Window Activation นั้นค่อนข้างเรียบง่าย จะเรียกคืนหน้าต่างที่ใช้ล่าสุดของประเภทนั้น พฤติกรรมเริ่มต้นนั้นทำให้การเข้ารหัสสิ่งที่คุณต้องการง่ายมาก ในความเป็นจริงฉันทำบางสิ่งบางอย่างเกือบเหมือนกับสิ่งที่คุณเป็นหลังจากนั้นด้วยบล็อกโค้ดแบบง่ายสองบล็อก

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

ฉันสร้างการทำงานร่วมกันที่น่าสนใจเล็กน้อยเพื่อทำงานกับจอภาพหลายจอ โปรดทราบว่าใน Windows 7 การกดแป้น Shift + windows และการใช้ลูกศรเพื่อเลื่อนไปทางซ้ายและขวาจะเป็นการย้ายหน้าต่างที่ใช้งานอยู่ระหว่างจอภาพที่ความเร็วแสง ดังนั้นฉันจึงลองใช้คำที่ฉลาดและแมปเพื่อเลื่อน + window + w จะเรียกคืนคำว่าเปิดอยู่แล้วหรือเรียกใช้อินสแตนซ์ใหม่ถ้าไม่ ความสวยงามของวิธีการคือฉันไม่ปล่อยปุ่ม Shift + windows โดยการทำเช่นนั้นฉันสามารถใช้งาน / เริ่มต้นคำและย้ายไปยังตำแหน่งที่ฉันต้องการโดยใช้ปุ่มลูกศรซ้ายขวา (ขึ้นจะเพิ่มโดยวิธีการลงและจะลดลง) แผนที่ + # r เพื่อคืนค่าหน้าต่างที่ใช้งานอยู่และคุณสามารถควบคุมหน้าต่างทั้งหมดที่คุณใช้งานได้อย่างง่ายดายโดยไม่ต้องใช้เมาส์ สิ่งที่คุณต้องจำไว้คือตัวอักษรตัวแรกของแอพที่คุณพยายามเปิดใช้งาน

เพื่อตอบคำถามของคุณเกี่ยวกับการทำให้สคริปต์เป็นแบบทั่วไปมากขึ้น:

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,

หมายเหตุ: โค้ดด้านบนเป็นเพียงการปรับเอาท์พุททั่วไปของ autoscriptwriter มันค่อนข้างซ้ำซ้อน แต่มีประสิทธิภาพ ในการค้นหาบางสิ่งบางอย่างเช่น ahk_class ของหน้าต่างให้พิจารณาโดยใช้ Spy Window ของ AutoIt3

หากคุณต้องการค้นพบชื่อเรื่องของหน้าต่างคุณสามารถรับหัวเรื่องที่ใช้งานตามที่แสดงในไฟล์ช่วยเหลือตัวอย่าง ahk

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

เคล็ดลับอีกอย่างที่คุณสามารถใช้คือการตั้งค่าหัวเรื่องที่ใช้งานโดยใช้ WinSetTitle

แก้ไข: เมื่อพิจารณาว่าคุณมี excel / word / powerpoint หลายอินสแตนซ์ลอยอยู่ให้พิจารณาแก้ไขปัญหาด้วย officetabs รุ่นฟรี มันจะช่วยให้คุณเก็บไฟล์ excel ที่เปิดอยู่ทั้งหมดในอินสแตนซ์เดียวตัวอย่างเช่นแทนที่จะเกลื่อนกลาดเกี่ยวกับทาสก์บาร์


มันสมบูรณ์แบบ! เคล็ดลับที่ยอดเยี่ยมและรหัสที่มีประโยชน์มาก ฉันกำลังจะเพิ่มหน้าจอที่สองดังนั้นส่วนหนึ่งของคำตอบก็เป็นที่ชื่นชมเช่นกัน
Peter Verbeet

โดยวิธีการที่ฉันชอบทิปเคล็ดลับเจ้าหน้าที่ ฉันไม่รู้ว่ามันมีอยู่จริง แต่มันมีประโยชน์มาก
Peter Verbeet

โชคดีที่คำสั่ง "Run, winword" ทำงานได้ดังนั้นดูเหมือนว่าฉันไม่จำเป็นต้องระบุเส้นทางแบบเต็ม
Peter Verbeet

@Coldrainwater: คุณจะต้องเปลี่ยนสคริปต์ของคุณด้านบนเพื่อให้ทำงานกับ Google Chrome ได้อย่างไร ปัญหาคือชื่อเปลี่ยนไปตามเว็บไซต์ที่เปิดอยู่
Lernkurve

1

ฉันเห็นคุณรู้ภาษาออโต้คีย์อันงดงามแล้ว ฉันต้องการใช้:

  • ifWinActive; ตรวจสอบว่าหน้าต่างทำงานอยู่หรือไม่
  • WinGet, เอาท์พุท, MinMax; ตรวจสอบว่าหน้าต่างย่อเล็กสุดหรือไม่
  • ifWinExists; ตรวจสอบว่ามีหน้าต่างอยู่หรือไม่ (แต่ไม่ทำงาน)
  • วิ่ง ; รันโปรแกรมหากไม่มีกระบวนการที่เกี่ยวข้อง
  • Z-order / WinList; สิ่งเหล่านั้นจะช่วยคุณแสดงรายการอินสแตนซ์ทั้งหมด / พิจารณาว่าอินสแตนซ์ใดเป็นอันแรก

หากคุณมีคำถามเพิ่มเติมคุณควรถามพวกเขาอย่างแน่นอนในฟอรัม autohotkey

; 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

ขอบคุณ ฉันได้เล่นกับสิ่งเหล่านี้ แต่ไม่ทราบวิธีการวนลูป if-else ที่มีประสิทธิภาพในนั้น ดังนั้นถ้า IfWinActive เป็นเท็จฉันจะเรียกใช้คำสั่ง Run ที่เหมาะสมเป็นส่วนหนึ่งของคำสั่ง else ได้อย่างไร
Peter Verbeet

@PeterVerbeet: ดูการแก้ไข ฉันใช้ Word 2007 เวอร์ชันภาษาอังกฤษ กด Shift + 1 + w เพื่อดูว่าสคริปต์ทำงานอย่างไร
colemik

ฉันแก้ไขมันสองสามครั้ง
colemik

ขอบคุณ trismarck นั่นมันมีประโยชน์จริงๆ มันใช้งานได้ดี มีวิธีที่จะทำให้มัน "ทั่วไป" มากขึ้นหรือไม่? ฉันต้องการให้มันทำงานโดยไม่คำนึงถึงเอกสารที่ Word กำลังแก้ไขอยู่ ฉันคิดว่าฉันจะต้องเปลี่ยนชื่อด้วยตนเองในสคริปต์ทุกครั้ง (ฉันใช้ Word บ่อยครั้งและไม่ค่อยใช้ "Document1" สามารถทำได้โดยตรวจสอบว่า Word นั้นเปิดใช้งานอยู่หรือไม่ เปิดใช้งานหรือไม่
Peter Verbeet

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 เสมอหรือ
Sam Hasler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.