Перейти к содержимому

Фотография

Диспетчер задач


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 beyz

beyz

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Александр


Отправлено 05 октября 2011 - 11:25

Добрый день, не подскажите: как можно отслеживать состояние (работает/не отвечает) приложения (.exe) в диспетчере задач? Допустим, есть abrUser.exe, я хочу знать какое на данные момент у этого экзешника состояние в диспетчере задач - работает или не отвечает. Спасибо.
  • 0

#2 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 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("Процесс не запущен");

  • 0

#3 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 05 октября 2011 - 12:52

Если надо анализировать именно в диспетчере задач, тогда надо в закладке "Приложения" в таблице найти строку с названием приложения, а во втором столбце ("Состояние") посмотреть, какое значение.
  • 0

#4 beyz

beyz

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Александр


Отправлено 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
Жду критику
  • 0

#5 Vader

Vader

    Активный участник

  • Members
  • PipPip
  • 129 сообщений
  • Город:Харьков

Отправлено 06 октября 2011 - 11:14

А не проще ли запустить "tasklist" и посмотреть что он скажет? Например, так:

tasklist /FI "IMAGENAME eq myprocess.exe" /V /FO LIST


Можно еще покопаться в WMI, думаю, что и там статусы должны найтись.
  • 0

#6 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 07 октября 2011 - 07:57

Можно еще покопаться в WMI, думаю, что и там статусы должны найтись.

В WMI, по-моему, такого нет, зато есть в .NET:
// JScript
var p = Sys.Process("Explorer");
var dotNETprocess = dotNET.System_Diagnostics.Process.GetProcessById(p.ID);
if (! dotNETprocess.Responding)
{
  // Процесс не отвечает
}
Надо добавить System.dll в проектные настройки CLR Bridge. Источник.
  • 1


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных