Диспетчер задач
#1
Отправлено 05 октября 2011 - 11:25
#2
Отправлено 05 октября 2011 - 12:13
Добрый день, не подскажите: как можно отслеживать состояние (работает/не отвечает) приложения (.exe) в диспетчере задач? Допустим, есть abrUser.exe, я хочу знать какое на данные момент у этого экзешника состояние в диспетчере задач - работает или не отвечает. Спасибо.
могу только предложить определение использования памяти и ЦПУ данного процесса в данный момент )
if (Sys.WaitProcess("abrUser",100).Exists)
{
Log.Message("Процесс запущен");
Log.Message("Использование памяти данным процессором: "+Sys.Process("abrUser").MemUsage);
Log.Message("Использование ЦПУ данным процессом: "+Sys.Process("abrUser").CPUUsage);
}
else
Log.Warning("Процесс не запущен");
#3
Отправлено 05 октября 2011 - 12:52
#4
Отправлено 06 октября 2011 - 03:57
Sub Wait_task_manager
Sys.Process("taskmgr").Window("#32770", "Диспетчер задач Windows", 1).Window("SysTabControl32", "Tab1", 1).ClickTab("Приложения")
'поиск задачи
n = 0
do while name_task <> "Erg"
name_task = Sys.Process("taskmgr").Window("#32770", "Диспетчер задач Windows", 1).Window("#32770", "", 1).Window("SysListView32", "Задачи", 1).wItem(n, 0)
n = n + 1
loop
'мониторинг (через 2 сек) состояния найденной задачи Работает/Не отвечает
status_task = Sys.Process("taskmgr").Window("#32770", "Диспетчер задач Windows", 1).Window("#32770", "", 1).Window("SysListView32", "Задачи", 1).wItem(n - 1, 1)
do while status_task = "Не отвечает"
status_task = Sys.Process("taskmgr").Window("#32770", "Диспетчер задач Windows", 1).Window("#32770", "", 1).Window("SysListView32", "Задачи", 1).wItem(n - 1, 1)
aqutils.Delay(2000)
loop
End SubЖду критику
#5
Отправлено 06 октября 2011 - 11:14
tasklist /FI "IMAGENAME eq myprocess.exe" /V /FO LIST
Можно еще покопаться в WMI, думаю, что и там статусы должны найтись.
#6
Отправлено 07 октября 2011 - 07:57
В WMI, по-моему, такого нет, зато есть в .NET:Можно еще покопаться в WMI, думаю, что и там статусы должны найтись.
// JScript
var p = Sys.Process("Explorer");
var dotNETprocess = dotNET.System_Diagnostics.Process.GetProcessById(p.ID);
if (! dotNETprocess.Responding)
{
// Процесс не отвечает
}
Надо добавить System.dll в проектные настройки CLR Bridge. Источник.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных

