Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

Определить, запущен ли exe, не составляя список процессов.   Найти похожие ветки 

 
Shakesbeer ©   (2007-06-26 11:55) [0]

Здраствуйте. Делюсь проблемой - как мне узнать, запущен ли конкретный (то есть я знаю путь к файлу) exe? Тут _http://delphi-faq.zoxt.net/732.htm есть решение этого вопроса. Так же полезные вещи я обнаружил и в "Королевстве Дельфи". Но все они так или иначе составляют список процессов, из которого определяеться нужный. В принципе, этого достаточно, но я уже "загорелся" проблемой - как обойти составление оного списка. Почитал описания ф-ций WinAPI, но скорей всего что-то упустил. Может кто знает решение - пожалуйста хоть намекните :)


 
Сергей М. ©   (2007-06-26 11:58) [1]


> как обойти составление оного списка


чем он тебе насолил ?)


 
Cj ©   (2007-06-26 12:03) [2]


> как мне узнать, запущен ли конкретный


а некоторые процессы могут себя и скрывать.


 
Shakesbeer ©   (2007-06-26 12:07) [3]

Это я понимаю. Но имееться ввиду то что врят ли будет прятаться - Винамп там, Ася...


 
Сергей М. ©   (2007-06-26 12:53) [4]


> Тут _http://delphi-faq.zoxt.net/732.htm есть решение этого
> вопроса


Это решение - для Маздая.
А у тебя - ХР.
А для ХР следует пользовать PSAPI, хотя и там строятся списки.


 
Rouse_ ©   (2007-06-26 12:53) [5]

Ну ежели тупо в лоб:

function IsFileRunnig(const Path: String): Boolean;
var
 hFile: THandle;
begin
 Result := False;
 hFile := CreateFile(PChar(Path),
   GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 if hFile = INVALID_HANDLE_VALUE then
   Result := GetLastError = ERROR_SHARING_VIOLATION;
end;


 
Rouse_ ©   (2007-06-26 13:02) [6]

CloseHandle(hFile); еще добавить нужно ;)


 
Однокамушкин   (2007-06-26 13:06) [7]


> Сергей М. ©   (26.06.07 12:53) [4]
> Это решение - для Маздая.
> А у тебя - ХР.
> А для ХР следует пользовать PSAPI, хотя и там строятся списки.

Начиная с Win2000 Tool Help поддерживается и в NT-линейке, так что в XP работать будет...


 
Shakesbeer ©   (2007-06-26 13:06) [8]

Спасибо. Проверю на обеденном перерыве :)


 
Dimaxx ©   (2007-06-26 13:09) [9]

А разве GetModuleHandle не катит? Вернет либо хэндл процесса, либо INVALID_HANDLE_VALUE.


 
Rouse_ ©   (2007-06-26 13:18) [10]


> Dimaxx ©   (26.06.07 13:09) [9]
> А разве GetModuleHandle не катит? Вернет либо хэндл процесса,
>  либо INVALID_HANDLE_VALUE.

Сам пробовал?


 
Сергей М. ©   (2007-06-26 13:21) [11]


> Однокамушкин   (26.06.07 13:06) [7]


А я и не говорил про поддержку.
Да, поддерживается, но в список попадают не все процессы.


 
Shakesbeer ©   (2007-06-26 14:09) [12]


> Ну ежели тупо в лоб

:) не получилось.. хэндл возвращаеться вполне положительный. Если  есть время попробуйте сами
procedure TForm1.Button1Click(Sender: TObject);
begin
if  IsFileRunnig("C:\Program Files\Borland\Delphi6\Bin\delphi32.exe")
then showmessage("da") else showmessage("no");
end;

только не знаю какая делфя у вас...


 
Сергей М. ©   (2007-06-26 14:34) [13]


> не знаю какая делфя у вас


Ты еще спроси, в какого размера горошка у него рисунок на исподнем)


 
Shakesbeer ©   (2007-06-26 15:04) [14]

Спасибо Rouse_"у, подсказал ещё, что параметр GENERIC_READ меняуться на GENERIC_WRITE. Всё заработало.



Страницы: 1 вся ветка

Текущий архив: 2008.01.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
2-1198899007
Joe
2007-12-29 06:30
2008.01.27
Перетаскивание строк в ListBox


3-1190089436
Mery
2007-09-18 08:23
2008.01.27
Сортировка в DBGrid


15-1198089746
serega
2007-12-19 21:42
2008.01.27
Установка


15-1198132418
Pazitron_Brain
2007-12-20 09:33
2008.01.27
SIP провайдер


1-1192971907
Dimmitt
2007-10-21 17:05
2008.01.27
Синхронная прокрутка двух Memo