Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать запущен ли экзекшник по его имени? [D7, WinXP]


Страницы:   1 2

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, то не запушена. Иначе получим хэндл.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо