프로그램 앞에서 복원 / 가져 오기위한 스크립트, 또는 활성화되지 않은 경우 열기


11

다음을 수행 해야하는 스크립트를 개발하려고합니다. 예를 들어, !W해야한다 :

  • Word가 활성화되어 있는지 확인 (열거 나 최소화 할 수 있음)
  • 최소화 된 경우 최소화하기 전의 크기와 위치로 복원해야합니다.
  • 열려 있지만 다른 열린 창 뒤에 "숨겨진"경우 스크립트는 맨 앞 / 활성 창으로 만들어야합니다.
  • 최소화되거나 열려 있지 않으면 프로그램을 새로 시작해야합니다.

!WWord, !NNotepad ++, !XExcel, !PPowerpoint, !FFirefox의 여러 프로그램 에서이 작업을 수행하고 싶습니다 .

프로그램의 여러 인스턴스가 실행 중이거나 여러 개의 탭을 사용할 수있는 경우 가장 최근의 인스턴스 또는 탭에 대해 위의 작업을 수행해야합니다. 따라서 여러 개의 Firefox 창이 열려있을 때 가장 최근에 열린 탭이있는 가장 최근에 본 창을 복원하거나 맨 앞으로 가져와야합니다. 마찬가지로 여러 단어 문서가 열려 있으면 마지막으로 작업 한 문서에 대해이 작업을 수행해야합니다. 그리고 Word 문서가 열려 있거나 최소화되어 있지 않으면 새로운 단어 인스턴스를 열어야합니다.

일부 프로그램에 대해 이러한 작업 중 일부를 수행 할 수 있지만 일관되게 수행 할 수는 없으며 하나의 단축키로도 사용할 수 있습니다 (여전히 스크립팅 언어를 배우고 있습니다). 어떻게하면 되나요?

답변:


14

Window Activation 작동 방식에 대한 이해는 매우 간단합니다. 해당 유형의 가장 최근에 사용 된 창을 복원합니다. 이 기본 동작은 원하는 것을 매우 간단하게 코딩합니다. 사실, 나는 두 개의 간단한 코드 블록으로 당신이 겪은 것과 거의 동일한 것을 수행합니다.

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

여러 모니터와 함께 사용할 수있는 흥미로운 시너지 효과를 만들었습니다. Windows 7에서 shift + windows 키를 누른 상태에서 화살표를 사용하여 왼쪽과 오른쪽으로 탐색하면 활성 창이 광 속도로 모니터간에 이동합니다. 그래서 나는 약간 영리한 것을 시도하고 단어를 shift + 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,

참고 : 위의 코드는 오토 스크립트 작성기의 일반 출력에 맞게 조정 된 것입니다. 다소 중복되지만 효과적입니다. 창의 ahk_class와 같은 것을 찾으려면 AutoIt3 창 스파이 사용을 고려하십시오.

창의 제목을 찾아야하는 경우 ahk 예제 도움말 파일에 표시된대로 활성 제목을 얻을 수 있습니다.

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

사용할 수있는 또 다른 트릭은 WinSetTitle을 사용하여 활성 타이틀을 설정하는 것입니다

편집 : 여러 엑셀 / 단어 / 파워 포인트가 떠있는 경우 officetabs 무료 버전으로 해당 문제를 해결하십시오. 예를 들어 작업 표시 줄에 흩어져 있지 않고 열려있는 모든 Excel 파일을 단일 인스턴스로 유지할 수 있습니다.


이것은 완벽 해요! 훌륭한 팁과 매우 유용한 코드. 두 번째 모니터를 추가하여 답변의 일부도 높이 평가합니다.
Peter Verbeet

그건 그렇고, 나는 또한 officetabs 팁을 좋아합니다. 나는 그것이 존재한다는 것을 몰랐지만 매우 유용하게 보입니다.
Peter Verbeet

운 좋게도 "Run, winword"명령이 작동하므로 전체 경로를 제공하지 않아도됩니다.
Peter Verbeet

@Coldrainwater : Chrome에서 작동하도록 스크립트를 어떻게 변경해야합니까? 문제는 제목이 열려있는 웹 사이트에 따라 제목이 변경된다는 것입니다.
Lernkurve

1

나는 당신이 이미 웅장한 오토 핫키 언어를 알고 있음을 본다;). 나는 사용할 것이다 :

  • ifWinActive; 창이 활성화되어 있는지 확인
  • WinGet, 출력, MinMax; 창이 최소화되었는지 확인
  • ifWinExists; 창이 존재하는지 확인하십시오 (그러나 활성화되지는 않음)
  • 운영 ; 연관된 프로세스가없는 경우 프로그램을 실행하십시오.
  • Z 순서 / 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가 false이면 else 명령의 일부로 적절한 실행 명령을 어떻게 시작합니까?
Peter Verbeet

@PeterVerbeet : 편집 내용을 참조하십시오. Word 2007 영어 버전을 사용했습니다. 스크립트 작동 방식을 보려면 Shift + 1 + w를 누르십시오.
colemik

나는 이것을 몇 번 편집했다.
colemik

감사합니다 trismarck, 정말 유용합니다. 잘 작동합니다. 더 "일반적인"방법으로 만들 수 있습니까? Word에서 현재 편집중인 문서에 관계없이 실행하고 싶습니다. 매번 스크립트에서 수동으로 이름을 변경해야 할 것 같습니다 (Word를 많이 사용하고 "Document1"을 거의 사용하지 않습니다. Word가 어떤 문서인지에 관계없이 Word 자체가 활성화되어 있는지 확인할 수 있습니다. 활성에?
피터 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

0

이것이 내가이 문제를 직접 해결 한 방법입니다. https://superuser.com/a/1405409/997992 원래 게시물에서 실제 Windows 관리자라는 Windows 추가 기능을 사용하고 있다는 사실을 잊어 버렸습니다. 또는 explorer.exe.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.