Есть ли процесс в диспетчере задач?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Есть ли процесс в диспетчере задач?

Сообщение Andreich » 10.06.2010 11:56:20

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

Кто что может посоветовать?
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Есть ли процесс в диспетчере задач?

Сообщение скалогрыз » 10.06.2010 12:09:50

способы такие:
1) (извращенческий) запускаешь taskmgr из папки Window. Получаешь поток и основное окно процесса.
Находишь на этом онке ListView, и ищешь в этом ListView нужное поле. Всё делается на WinAPI :)

2) (легальный) msdn
все заголовки сконвертированы в модуле jwatlhelp32.pas
примеры здесь: http://bugs.freepascal.org/view.php?id=16089

что интересно, для некоторых системных процессов, информацию получить нельзя (нет прав) - так написано в MSDN-е, но FAR умудряется! интересно как... ^^
Последний раз редактировалось скалогрыз 10.06.2010 12:10:46, всего редактировалось 1 раз.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Есть ли процесс в диспетчере задач?

Сообщение Odyssey » 10.06.2010 12:10:36

Например WinAPI Process32First/Process32Next. По ссылке внизу страницы жалуются на какие-то проблемы с Вистой, так что осторожнее. Других способов навскидку не знаю.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Есть ли процесс в диспетчере задач?

Сообщение Mr.Smart » 10.06.2010 13:29:27

Например так:
Код: Выделить всё
uses ..., Windows, JwaTlHelp32, ...;
....
function IsTask(ExeFileName: String): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
  result := False;

  FSnapshotHandle := CreateToolhelp32Snapshot
                     (TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
                                 FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
         UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      begin
       Result:=True;
       Break;
      end;
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32);
  end;

  CloseHandle(FSnapshotHandle);
end;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Есть ли процесс в диспетчере задач?

Сообщение Andreich » 10.06.2010 15:26:44

Mr.Smart
Функция IsTask отлично работает, то что нужно,.. Спасибо!
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru