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

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

Определить, запущен ли exe, не составляя список процессов. [D6, D7, WinXP]


Shakesbeer ©   (2007-06-26 11:55:00) 

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


Shakesbeer   (2007-06-26 15:04:00) [1]

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


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


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


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


Shakesbeer   (2007-06-26 14:09:00) [3]


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

:) не получилось.. хэндл возвращаеться вполне положительный. Если  есть время попробуйте сами
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 13:21:00) [4]


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


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


Rouse_   (2007-06-26 13:18:00) [5]


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

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


Dimaxx   (2007-06-26 13:09:00) [6]

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


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


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

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


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

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


Rouse_   (2007-06-26 13:02:00) [9]

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


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


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


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


Rouse_   (2007-06-26 12:53:00) [11]

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

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;


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

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


Cj   (2007-06-26 12:03:00) [13]


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


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


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


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


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


Наверх

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