2014-02-03 1 views
0

Как я могу автоматически закрывать не отвечающие приложения autoit под окнами? Эти типы приложений обычно получают заголовок формы «XXXX (не отвечает)». Я пробовал следующий код, но безуспешно:убить все не отвечающие приложения с помощью autoit

; Wait 10 seconds for the a window to appear. 
Local $hWnd = WinWait("Not Responding", "", 10) 

; Wait for 2 seconds before calling the WinKill function. 
Sleep(2000) 

; Kill the window using the handle returned by WinWait. 
WinKill($hWnd, "") 
+0

Я предполагаю, что приведенный выше код выполняется после достижения не отвечающего окна. Можете ли вы объяснить, что происходит, когда вы выполняете вышеуказанный код? – Vish

+0

ну, первая линия не попал. Скрипт все еще ждет, пока не будет запущено приложение «Не реагировать», я полагаю, – arthur

ответ

1

Используйте это для теста. (Нужно положить его в петле, если вы хотите, чтобы проверить каждые х секунды)

Opt('WinTitleMatchMode', 2) 
Opt('WinSearchChildren', 1) 

Local $var = WinList() 
Local $s_PID_Buffer 
For $i = 2 To $var[0][0] 
    If BitAND(WinGetState($var[$i][1]), 2) Then 
     ; is visible 
     If Not StringInStr($s_PID_Buffer, ";" & WinGetProcess($var[$i][1]) & ";") Then 
      ; show PID only once 
      $s_PID_Buffer &= ";" & WinGetProcess($var[$i][1]) & ";" 
      ConsoleWrite($i & @TAB & "Title=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1] & @CRLF & "PID: " & WinGetProcess($var[$i][1]) & @CRLF & @CRLF) 
      If StringInStr($var[$i][0], 'Not Responding') Then 
       ProcessClose(WinGetProcess($var[$i][1])) 
       WinKill($var[$i][1]) 
      EndIf 
     EndIf 
    EndIf 
Next 
+1

Я нахожу ответ проницательным. На моей машине Windows 7 (я полагаю) «ProcessClose» жестоко пытается закрыть мертвый процесс. Затем мониторы вспыхивают пару раз, а не отвечает окно trully зависает (что даже AutoIt Window Info дает информацию), хотя процесс все еще присутствует в меню задач. Положительный момент в том, что у меня есть повешенное приложение, которое я могу попытаться убить :) – arthur

2

Вашего кода хорошо, вам просто нужно установить WinTitleMatchMode для того, чтобы соответствовать названию подстроки.

Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase 

; Wait 10 seconds for the a window to appear. 
Local $hWnd = WinWait("Not Responding", "", 10) 

; Wait for 2 seconds before calling the WinKill function. 
Sleep(2000) 

; Kill the window using the handle returned by WinWait. 
WinKill($hWnd, "") 
+0

Подтвердите удар. Какое простое мощное решение для того, чтобы убивать не отвечающие окна :) – arthur

+1

Вы должны проверить прямо перед вызовом Kill, еще ли в заголовке «Не отвечает» ... В то же время он мог бы снова реагировать. , – Samoth