![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать запущен ли экзекшник по его имени? [D7, WinXP]
FireHawk © (2005-05-14 21:16:00)Собственно, в сабже всё сказано. Знаем путь к программе и её имя. Не знаем имя окна, класса, ничего. Как резидентной программе узнать, запущен ли экзешник?
VMcL (2005-05-15 12:27:00) [21]>> peppo © (15.05.05 11:56) [8]
> Его, конечно, кто-то может просто открыть, а не запустить, поэтому совет и "глючный"
Сами же и ответили на свой вопрос.
Ученик (2005-05-15 12:09:00) [22]>peppo © (15.05.05 10:09) [3]
Файл может Read Only и запущен
Ученик (2005-05-15 11:59:00) [23]>VMcL © (15.05.05 10:21) [5]
>2.
Вы считаете, что так совсем неправильно или необходимо изменить
параметр fmOpenReadWrite ?
peppo (2005-05-15 11:56:00) [24]> VMcL © (15.05.05 11:14) [7]
А этого не понимаю. Почему никакого?
Требовалось узнать запущен ли некий exe, имеется полный путь к нему.
Если попытаться открыть этот файл, то, если он используется однозначно будет получен отказ => запущен (ведь exe становится сам-себе страничным файлом при запуске).
Его, конечно, кто-то может просто открыть, а не запустить, поэтому совет и "глючный"(может ещё почему-то), но по сабжу...
Я не припираюсь, просто хочу понять что криво.
VMcL (2005-05-15 11:14:00) [25]>> peppo © (15.05.05 11:06) [6]
Код-то работает. Только к сабджевому вопросу не имеет никакого отношения.
peppo (2005-05-15 11:06:00) [26]> Огромная просьба: не давать глюкосоветы в тематических
> конференциях.
Понимаю, не буду.
Но работает же :)
VMcL (2005-05-15 10:21:00) [27]>> Almaz © (15.05.05 03:07) [2]
Я понимаю, что в вопросе указана WinXP, но:
1. > if AnsiCompareText(lppe.szExeFile, ExeFileName) = 0 then
if AnsiCompareText( ExtractFileName(lppe.szExeFile), ExeFileName) = 0 then
Поскольку в Win9x возвращается полный путь к файлу.
2. PsAPI для Win NT.
>> peppo © (15.05.05 10:09) [3]
>> peppo © (15.05.05 10:10) [4]
Огромная просьба: не давать глюкосоветы в тематических конференциях.
peppo (2005-05-15 10:10:00) [28]Application.ExeName в смысле путь к файлу
peppo (2005-05-15 10:09:00) [29]Гораздо быстрее - просто открыть файл
if FileOpen( Application.ExeName, fmOpenReadWrite)<0 then //запущен
Almaz (2005-05-15 03:07:00) [30]
> Dimaxx © (15.05.05 00:10) [1]
> GetModuleHandle. Если вернула INVALID_HANDLE_VALUE, то не
> запушена. Иначе получим хэндл.
Вы ошибаетесь, GetModuleHandle возвратит хэндл только если искомый модуль был загружен в АП вызывающего функцию процесса, поэтому для любого запущенного экзешника, кроме собственного, GetModuleHandle вернет 0. Поэтому в данном случае эта функция не поможет.
> FireHawk (14.05.05 21:16)
> Собственно, в сабже всё сказано. Знаем путь к программе
> и её имя. Не знаем имя окна, класса, ничего. Как резидентной
> программе узнать, запущен ли экзешник?
Вам следует воспользоваться, например, Toolhelp API функциями. Что-то вроде этого:
function IsExeRunnign(ExeFileName: TFileName): Boolean;
var
hSnapshot: THandle;
lppe: TProcessEntry32;
begin
Result := False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnapshot, lppe) then
repeat
if AnsiCompareText(lppe.szExeFile, ExeFileName) = 0 then
begin
Result := True;
Break;
end;
until not Process32Next(hSnapshot, lppe);
CloseHandle(hSnapshot);
end;
...
if IsExeRunnign('Delphi32.exe') then
ShowMessage('Delphi is running');
Удачи.
Dimaxx (2005-05-15 00:10:00) [31]GetModuleHandle. Если вернула INVALID_HANDLE_VALUE, то не запушена. Иначе получим хэндл.