tập lệnh để khôi phục / đưa ra phía trước chương trình hoặc mở nó nếu nó không hoạt động


11

Tôi đang cố gắng phát triển một kịch bản nên làm như sau. Ví dụ !W: nên:

  • kiểm tra xem Word có hoạt động không (có thể mở hoặc thu nhỏ)
  • nếu nó được thu nhỏ, nó sẽ được khôi phục về kích thước và vị trí của nó trước khi thu nhỏ
  • nếu nó đang mở, nhưng "ẩn" đằng sau các cửa sổ đang mở khác, tập lệnh sẽ đưa nó ra phía trước, làm cho nó trở thành cửa sổ phía trước / hoạt động
  • nếu nó không được thu nhỏ hay mở, chương trình sẽ được bắt đầu mới

Tôi muốn làm điều này cho một số chương trình: !Wcho Word, !Ncho Notepad ++, !Xcho excel, !Pcho powerpoint, !Fcho Firefox.

Nếu nhiều phiên bản của một chương trình đang chạy hoặc nếu có nhiều tab có sẵn, thì nó sẽ làm như trên cho ví dụ hoặc tab gần đây nhất. Vì vậy, khi nhiều cửa sổ của Firefox được mở, nó sẽ khôi phục (hoặc đưa ra phía trước) cửa sổ được xem gần đây nhất với tab được mở gần đây nhất. Tương tự, nếu nhiều tài liệu từ được mở, nó sẽ làm điều này cho tài liệu tôi làm việc cuối cùng. Và, nếu không có tài liệu Word nào được mở hoặc thu nhỏ, thì nó sẽ mở một ví dụ từ mới ..

Tôi có thể thực hiện một số điều này, cho một số chương trình, nhưng không nhất quán, cũng không phải trong một phím nóng (tôi vẫn đang học ngôn ngữ kịch bản). Làm thế nào tôi có thể đạt được điều này?

Câu trả lời:


14

Sự hiểu biết của tôi về cách hoạt động của Window Activation khá đơn giản. Nó khôi phục cửa sổ sử dụng gần đây nhất của loại đó. Hành vi mặc định đó làm cho mã hóa những gì bạn muốn rất đơn giản. Trong thực tế, tôi làm một cái gì đó gần giống với những gì bạn đang có với hai khối mã đơn giản.

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

Tôi đã tạo ra một chút sức mạnh tổng hợp thú vị để làm việc với nhiều màn hình. Lưu ý rằng trên Windows 7, giữ phím shift + phím windows và sử dụng mũi tên để điều hướng sang trái và phải sẽ di chuyển cửa sổ hoạt động giữa các màn hình ở tốc độ ánh sáng. Vì vậy, tôi đã thử một cái gì đó một chút thông minh và ánh xạ từ để shift + window + w. Nó khôi phục từ nếu đã mở hoặc chạy một thể hiện mới nếu không. Cái hay của cách tiếp cận là tôi không bao giờ buông phím shift + phím windows. Bằng cách làm như vậy tôi có thể vừa kích hoạt / bắt đầu từ và di chuyển nó đến chính xác vị trí tôi muốn bằng cách sử dụng các phím mũi tên trái phải (lên sẽ tối đa hóa theo cách và xuống sẽ giảm thiểu). Bản đồ + # r để khôi phục cửa sổ đang hoạt động và bạn hoàn toàn kiểm soát tất cả các cửa sổ mà bạn thường sử dụng dễ dàng mà không cần chuột. Tất cả những gì bạn phải nhớ là chữ cái đầu tiên của ứng dụng bạn đang cố gắng kích hoạt.

Trả lời câu hỏi của bạn về việc làm cho tập lệnh chung chung hơn:

1) Cân nhắc sử dụng

; 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

Hoặc một khả năng khác:

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

Lưu ý: Đoạn mã trên chỉ là sự điều chỉnh của đầu ra chung của trình ghi tự động. Nó có phần dư thừa nhưng hiệu quả. Để tìm thứ gì đó như ahk_group của cửa sổ, hãy xem xét sử dụng gián điệp cửa sổ AutoIt3.

Nếu bạn cần khám phá tiêu đề của một cửa sổ, bạn có thể nhận được tiêu đề hoạt động như trong tệp trợ giúp ví dụ ahk

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

Một mẹo khác bạn có thể sử dụng là đặt tiêu đề hoạt động bằng WinSetTitle

Chỉnh sửa: Cho rằng bạn có nhiều phiên bản excel / word / powerpoint nổi xung quanh, cũng xem xét giải quyết vấn đề đó với phiên bản miễn phí của docetabs. Nó sẽ cho phép bạn giữ tất cả các tệp excel đang mở trong một ví dụ duy nhất thay vì rải rác về thanh tác vụ.


Đây là hoàn hảo! Lời khuyên tuyệt vời và mã rất hữu ích. Tôi sẽ thêm một màn hình thứ hai, để một phần của câu trả lời cũng được đánh giá cao.
Peter Verbeet

Nhân tiện, tôi cũng thích mẹo của docetabs. Tôi không biết nó tồn tại, nhưng nó có vẻ rất hữu ích.
Peter Verbeet

May mắn thay, lệnh "Run, winword" hoạt động, vì vậy có vẻ như tôi không phải cung cấp đường dẫn đầy đủ.
Peter Verbeet

@Coldrainwater: Làm thế nào một người cần thay đổi tập lệnh của bạn ở trên để làm cho nó hoạt động cho Google Chrome? Vấn đề là tiêu đề thay đổi tùy thuộc vào trang web nào được mở.
Lernkurve

1

Tôi thấy bạn đã biết về ngôn ngữ Autohotkey tuyệt vời;). Tôi sẽ sử dụng:

  • ifWinActive; kiểm tra xem cửa sổ có hoạt động không
  • WinGet, đầu ra, MinMax; kiểm tra nếu cửa sổ thu nhỏ
  • ifWinExists; kiểm tra xem cửa sổ có tồn tại không (nhưng không hoạt động)
  • Chạy ; chạy chương trình nếu không có quá trình liên quan
  • Thứ tự Z / WinList; những trường hợp này sẽ giúp bạn liệt kê tất cả các trường hợp / xác định trường hợp nào là trường hợp đầu tiên

Nếu bạn có nhiều câu hỏi, bạn chắc chắn nên hỏi họ trên diễn đàn 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

Cảm ơn. Tôi đã chơi với những thứ này, nhưng thực sự không biết làm thế nào để có được một vòng lặp if-other hiệu quả trong đó. Vì vậy, nếu IfWinActive sai, làm cách nào để khởi chạy lệnh Run thích hợp như một phần của lệnh khác?
Peter Verbeet

@PeterVerbeet: xem phần chỉnh sửa. Tôi đã sử dụng Word 2007 phiên bản tiếng Anh. Nhấn Shift + 1 + w để xem kịch bản hoạt động như thế nào.
colemik

Tôi đã chỉnh sửa điều này một vài lần.
colemik

Cảm ơn trismarck, điều đó thực sự hữu ích. Nó hoạt động rất tốt. Có cách nào để làm cho nó "chung chung" hơn không? Tôi muốn nó chạy bất kể tài liệu nào đang được Word chỉnh sửa. Dường như với tôi rằng tôi sẽ phải thay đổi tên theo cách thủ công trong tập lệnh mỗi lần (Tôi sử dụng Word rất nhiều và hiếm khi sử dụng "Document1". Có thể thực hiện bằng cách kiểm tra xem Word có hoạt động hay không, bất kể đó là tài liệu nào hoạt động vào?
Peter Verbeet

1

Nó có thể không phức tạp như một số, nhưng đây là những gì tôi sử dụng để khởi chạy hầu hết các chương trình của mình. Chuyển đổi cho phép bạn thu nhỏ cửa sổ nếu nó đã hoạt động.

^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
            }
        }
}

sẽ không chuyển đổi luôn là 0?
Sam Hasler

0

Đây là cách tôi giải quyết vấn đề này cho chính mình. /superuser//a/1405409/997992 Tôi đã quên đề cập đến trong bài viết gốc rằng tôi đang sử dụng một cửa sổ bổ sung được gọi là trình quản lý cửa sổ thực tế, đó là lý do tại sao tôi có một kiểm tra bổ sung với WinExist trong đó cho trình duyệt thực tế HOẶC explorer.exe.

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.