Собственно сабж. Нужно определить наличие активного процесса некоторого приложения под Windows.
Интересует именно сам процесс, потому как поиск окна по заголовку не подходит (заголовок может изменяться в зависимости от версии программы и пользователя, от имени которого она запущена).
Кто что может посоветовать?
Есть ли процесс в диспетчере задач?
Модератор: Модераторы
способы такие:
1) (извращенческий) запускаешь taskmgr из папки Window. Получаешь поток и основное окно процесса.
Находишь на этом онке ListView, и ищешь в этом ListView нужное поле. Всё делается на WinAPI
2) (легальный) msdn
все заголовки сконвертированы в модуле jwatlhelp32.pas
примеры здесь: http://bugs.freepascal.org/view.php?id=16089
что интересно, для некоторых системных процессов, информацию получить нельзя (нет прав) - так написано в MSDN-е, но FAR умудряется! интересно как... ^^
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 раз.
Например WinAPI Process32First/Process32Next. По ссылке внизу страницы жалуются на какие-то проблемы с Вистой, так что осторожнее. Других способов навскидку не знаю.
Например так:
Код: Выделить всё
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
Функция IsTask отлично работает, то что нужно,.. Спасибо!
Функция IsTask отлично работает, то что нужно,.. Спасибо!
