앱이 닫힐 때 자동 핫키 루프를 끊는 방법


1

이전 스크립트에 키 입력을 반복해서 입력하는 자동 단축키가 있습니다. 나는 그것이 얼마나 오래 걸릴지 미리 알지 못 하므로이 스크립트가 있습니다.

#NoEnv
^m::

Loop 
{
if (BreakLoop = 1)
  break 
  SEND, 3
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  sleep, 100
}

Esc::
BreakLoop = 1
return

그리고 나는 그것이 끝날 때까지 기다렸다가 끝났을 때 탈출로 들어갑니다 (수면 타이머가있어 실제로 탈출 할 수 있습니다).

스크립트가 완료 되 자마자 창이 닫히고 해당 이벤트를 사용하여 autohotkey 루프를 끊고 싶지만 아직 방법을 찾지 못했습니다.

답변:


1

WinActive 또는 WinExist를 사용하여 창 닫기를 확인할 수 있습니다. while 문을 사용하여 별도의 if / break가 필요하지 않고 조건부 break 문을 결합 할 수도 있습니다. 또한 완전히 재시작하지 않고 스크립트를 여러 번 실행하는 경우 BreakLoop 변수를 확인하고 초기화합니다.

#NoEnv
^m::
setTitleMatchMode, 2               ; inexact title match
myID := WinExist(myWinTitle:="A")  ; put WinSpy title details here
BreakLoop = 0
While !BreakLoop and WinActive("ahk_id" myID)
{
  SEND, 3
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  sleep, 100
}

Esc::
BreakLoop = 1
return

코드를 사용하려고하는데 활성 창을 사용하는 것이 내가 원하는 것이라고 생각 했지만 스크립트가 시작되지 않았습니다. 뭔가 빠졌습니까? 활성 창이 닫힐 때까지 스크립트를 실행하고 싶습니다. 위의 샘플 코드를 사용하고 "title ahk_exe my.exe"를 "A"로 바꿨습니다. 나와 함께 이것을 찾아 주셔서 감사합니다 :).
Jóhann

WinActive ... 로직 오류 앞의 not 문을 제거하십시오. 창이 활성화되어있는 동안 루프를 실행하려고합니다. 그러나 ID를 먼저 읽지 않으면 창에 A를 사용할 수 없습니다. 그렇지 않으면 루프는 항상 활성 창을 찾고 다른 창일뿐입니다.
JJohnston2

이전 주석에서 언급 한 변경 사항을 반영하여 위 코드 블록을 업데이트했습니다. 활성 창을 읽고 더 이상 활성 상태가 될 때까지 해당 창을 확인합니다.
JJohnston2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.