2014-05-23 2 views
0

내 AHK 스크립트의 예상 실행 시간은 이벤트에 따라 5 분에서 25 분 사이입니다. 그리고 대부분 브라우저에서 화면을 긁어 내고 패턴을 검색하고 그에 따라 화면상의 특정 영역을 클릭하여 조치를 취합니다. 모두 완료되면 브라우저 세션을 종료합니다. 그리고 Windows 작업 스케줄러에서 매 시간마다 실행되도록 예약했습니다.autohotkey : 워치 독 설정 방법

내 문제는 네트워크 문제가 있거나 워크 스테이션 CPU에 시니어 순간이있는 경우 웹 페이지를로드하는 데 필요한 시간이 충분하지 않다는 것입니다 (일반적으로 약 15 초이며 실행할 수 없습니다). 콘텐츠가 30 초 후에 변경 될 수 있으므로 길어집니다.) 또는 처리 과정 중에 무엇인가가 매달릴 수 있습니다. 그런 일이 발생하면

, 나는 AHK 스크립트를 종료하고 바로 종료하기 전에, 내가 올 드릴 수 없습니다, 그것은 지금까지 (이 특정 경우에 크롬을)

를 모든 브라우저 세션을 종료하고자합니다 "단일 스크립트"솔루션으로

나의 현재 상태는 파일의 내용을 30 분마다 모니터링하는 스크립트를 시작하는 것입니다, 그리고 내용이 마지막으로 변경하지 않은 경우, 새로운 구글 크롬 세션을 열고 Shift 키를 보내 - Ctrl - Q 크롬의 모든 인스턴스를 닫기위한 키 시퀀스입니다. 한편, 내 주된 스크립트는 완료시 동일한 파일을 이전 값과 다른 번호로 업데이트하며 그것은 고유합니다. 이 접근법의 결핍 : 나는이 감시 스크립트를 죽이지 않고 다른 AHK 스크립트 (hang a hang)를 어떻게 죽일지 모른다.

그리고 궁극적 인 목적은이 기능을 메인 스크립트에 구현하는 것입니다.이 스크립트는 매달리기 쉽습니다.

내 주요 스크립트

send #r 
send chrome.exe http://myURL{enter} 
mousemove 200,200 
send ^a 
send ^c 

; 
; using a series of IfInString commands 
; determine the condition 
; then use mousemove, x, y and mouseclick, l 
; commands, do my deed 

filedelete, c:\mydir\myfile 
fileappend, newnumber, c:\mydir\myfile 
exitapp 

내 감시 스크립트는 물론

loop ; forever 
{ 
; old content is stored in variable PREV 
fileread, newval, c:\mydir\myfile 
if (newval = PREV) 
{ 
    send #r 
    send chrome.exe 
    sleep 10000 ; wait for chrome window to pop up 
    send ^+Q 
    ; I need a way to stop my hung AHK script here but don't know how 
} 
else 
{ 
    PREV = %newval% 
    sleep 1800000 ; sleep 30 minutes 
} 
} ; end of loop 
f10::exitapp ; when I need to stop watchdog 

이 실제 스크립트를하지 않습니다. 그냥 당신에게 아이디어를 줄 수 있습니다. 그렇지 않으면 페이지가로드 될 때까지 기다리는 데는 많은 시간이 걸리지 만 그 중 요점은 있습니다.

미리

난 당신이 설명하는 문제를 해결해야 할 몇 가지 AutoHotkey에 코드 블록을 제공 한
+1

사용은'대신 SetTimer'. –

+1

그 스크립트의 목적이 무엇인지 알 수는 없지만 프로그래밍 방식으로 요청을 프로그래밍하면 쉽게 만들 수 있습니다. [WinHttpRequest] (http://www.autohotkey.com/board/topic/56987-com-object-reference-autohotkey-v11/#entry358508)를 사용하십시오. – MCL

+0

@JoeDF와 마찬가지로, 워치 독 스크립트의 루프를 대신 'SetTimer'에 넣으십시오. –

답변

0
  • 에 도움을 주셔서 감사합니다.
  • 나는 두 스크립트를 모두 작성하여 작성 했으므로 두 스크립트가 종료 된 경우 이 발생하지 않은 것으로 확인하고 다시 시작할 수 있습니다. 즉, 더 많은 유연성을 추가하십시오.
  • 저는 개인적으로 거의 사용하지 않습니다. , 과 루프를 사용합니다.이 경우 스크립트를 개선하는 데 도움이되지 않을 것이라고 생각합니다.
  • 멈춘 스크립트에 대해서는 오류 메시지가 표시되지 않고 종료 된 것으로 나타났습니다. hWnd (창 핸들)와 PID (프로세스 ID)를 검색하여 종료 할 수 있습니다.
  • 웹 페이지를 다운로드 한 다음 html을 구문 분석하여 UrlDownloadToFile 또는 WinHttpRequest (포럼의 예 참조)을 사용하여 몇 가지 작업을보다 쉽게 ​​수행 할 수 있습니다.
  • 다른 작업은 COM (구성 요소 개체 모델) 인 Internet Explorer ( )를 사용하여 라이브 웹 페이지의 웹 요소를 쿼리/조작하여 더 쉽게 수행 할 수 있습니다.

-

;to launch Chrome and wait for it to open (with an optional delay afterwards) 
;if the window is not seen within 60 seconds, ErrorLevel is set to 1 and action can be taken 
Run, "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://www.google.com/" 
WinWaitActive, ahk_class Chrome_WidgetWin_1, , 60 
if ErrorLevel 
{ 
MsgBox error ;put code here 
} 
else 
{ 
Sleep 10000 
;put code here 
} 

;to launch Internet Explorer and wait for it to open (with an optional delay afterwards) 
Run, "C:\Program Files\Internet Explorer\iexplore.exe" "https://www.google.com/" 
WinWaitActive, ahk_class IEFrame 
Sleep 10000 

;to terminate a script 
DetectHiddenWindows, On 
vPathScript = %A_ScriptDir%\my script.ahk 
WinGet, hWnd, ID, %vPathScript% - AutoHotkey v ahk_class AutoHotkey 
IfWinExist, ahk_id %hWnd% 
{ 
WinGet, vPID, PID, ahk_id %hWnd% 
Process, Close, %vPID% 
} 
관련 문제