Что нового

[Процессы] Получить имя и окна "зависшего" процесса

inx

Знающий
Сообщения
43
Репутация
12
Возникла необходимость помониторить зависания приложения (многооконное).
При зависании получать список всех окон, принадлежащий этому процессу.

Почему-то такой код для попытки получить имя процесса:

Код:
#include <WinAPIProc.au3>
Opt("WintitleMatchMode", 2)

Local $hWnd = WinWait ("Не отвечает", "", 0)

; Возвращает "AutoIT3.exe" вместо нужного процесса
Local $ProcName = _WinAPI_GetProcessName (_WinAPI_GetProcessID ( $hWnd ))

; Если окно "Не отвечает" - возвращает "dwm.exe" - Диспетчер окон рабочего стола, вместо нужного процесса
; Если приложение не "висит" - возвращает то что нужно
Local $ProcName = _WinAPI_GetProcessName (WinGetProcess ( $hWnd )) ;

MsgBox ("", "Сообщение", "Процесс:" & @CRLF & @CRLF & $ProcName)


работает, как видно из комментариев в коде, немного не так как я ожидал...

В общем вопрос "Что не так и почему?" :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Re: [Процессы] Получить имя "зависшего" процесса

http://autoit-script.ru/index.php/topic,7419.0.html
 
Автор
I

inx

Знающий
Сообщения
43
Репутация
12
Re: [Процессы] Получить имя "зависшего" процесса

joiner сказал(а):
http://autoit-script.ru/index.php/topic,7419.0.html
Поиском я уже пользовался. Меня интересует вопрос по коду в моей цитате.
''Почему разные результаты в таком получении имени процесса по зависшему окну.''
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Re: [Процессы] Получить имя "зависшего" процесса

inx потому что _WinAPI_GetProcessID в первый параметр нужно передавать Handle to the process. а вы туда засунули Дескриптор окна


Добавлено:
Сообщение автоматически объединено:

И таким способом вы не получите зависшее приложение, когда такое приложении висит, то оно уже не реагирует ни на какие команды типа, прочитать заголовок, переместить закрыть и тп. Но что бы как то закрыть такое приложение, windows подменяет окно на свое, с активной кнопкой закрыть.
 
Автор
I

inx

Знающий
Сообщения
43
Репутация
12
Re: [Процессы] Получить имя "зависшего" процесса

inververs сказал(а):
когда такое приложении висит, то оно уже не реагирует ни на какие команды типа, прочитать заголовок, переместить закрыть и тп.
А есть способ все-таки получить заголовки окон зависшего положения?
Или только считывать их каждые N секунд и при следующей проверке на зависание использовать полученный ранее список (а он может быть уже неактуальным).
Или получать список всех открытых окон, потом отфильтровать по "Не отвечает"?
Закрывать окна и завершать зависший процесс мне не нужно, а вот получить список всех его окон неплохо бы.
 
Верх