Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2011, 20:57   #1
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
Вопрос Как узнать запущена ли программа(не по имени файла а по пути)

Собственно как узнать запущена ли программа?
Узнать необходимо не просто по имени файла а по полному пути, т.е. в системе возможно присутствие нескольких процессов с одинаковым названием(несколько копий одной и той же программы расположеные соответственно в разных папках, а получить информацию о том запущена программа или нет нужно именно об одной конкретной копии расположенной в конкретной папке).
Заранее спасибо за помощь =)
Crystallon вне форума Ответить с цитированием
Старый 02.08.2011, 21:19   #2
xrenomx
Пользователь
 
Аватар для xrenomx
 
Регистрация: 05.02.2011
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Crystallon Посмотреть сообщение
Собственно как узнать запущена ли программа?
Узнать необходимо не просто по имени файла а по полному пути, т.е. в системе возможно присутствие нескольких процессов с одинаковым названием(несколько копий одной и той же программы расположеные соответственно в разных папках, а получить информацию о том запущена программа или нет нужно именно об одной конкретной копии расположенной в конкретной папке).
Заранее спасибо за помощь =)
Насколько я знаю,выяснить это можно по тому активен данный процесс или нет.
xrenomx вне форума Ответить с цитированием
Старый 02.08.2011, 22:30   #3
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Цитата:
Сообщение от xrenomx Посмотреть сообщение
Насколько я знаю,выяснить это можно по тому активен данный процесс или нет.
Ваш ответ не содержит смысловой нагрузки...
Crystallon вне форума Ответить с цитированием
Старый 02.08.2011, 22:33   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Первое что пришло в голову, так это попробовать получить доступ к файлу и посмотреть что нам ответит на это система. Что-то вроде етакой ереси:
Код:
try
  assignfile(f, 'c:\program.exe');
  reset(f);
  closefile(f);
  showmessage('Всё нормально');
except
  showmessage('Ошибка №' + inttostr(getlasterror) + #10#13 + syserrormessage(getlasterror));
end
Если получили ошибку 32, то "The process cannot access the file because it is being used by another process."
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
eoln вне форума Ответить с цитированием
Старый 02.08.2011, 22:38   #5
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Первое что пришло в голову, так это попробовать получить доступ к файлу и посмотреть что нам ответит на это система. Что-то вроде етакой ереси:
Код:
try
  assignfile(f, 'c:\program.exe');
  reset(f);
  closefile(f);
  showmessage('Всё нормально');
except
  showmessage('Ошибка №' + inttostr(getlasterror) + #10#13 + syserrormessage(getlasterror));
end
Если получили ошибку 32, то "The process cannot access the file because it is being used by another process."
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Спасибо, по идее должно работать, как по мне гениальное решение, сам бы я до такого врятли додумался xD
Crystallon вне форума Ответить с цитированием
Старый 02.08.2011, 22:52   #6
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Эхх гениальное решение не прокатило =( а было бы просто замечательно еслиб все было так просто... Вобщем после запуска программы ее исполняемый файл не "занят", т.е. его хоть удалять можно а программа будет работать...
Еще какие варианты есть? ^_^
Crystallon вне форума Ответить с цитированием
Старый 02.08.2011, 22:58   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Наверное эта программа (та которую в запущенном состоянии можно удалить) очень хитрая
eoln вне форума Ответить с цитированием
Старый 03.08.2011, 06:21   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Может начнем читать документацию?

Цитата:
szExeFile

The name of the executable file for the process. To retrieve the full path to the executable file, call the Module32First function and check the szExePath member of the MODULEENTRY32 structure that is returned. However, if the calling process is a 32-bit process, you must call the QueryFullProcessImageName function to retrieve the full path of the executable file for a 64-bit process.
p51x вне форума Ответить с цитированием
Старый 03.08.2011, 11:50   #9
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Нашел готовенькое ^^
Код:
    function GetExeFilePath(ExeFileName:string):string;
    var hSnapshot,hSnapshot2:THandle;
        proc:TProcessEntry32;
        m:TModuleEntry32;
    begin
    result:='';
    hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    proc.dwSize:=Sizeof(proc);
    if Process32First(hSnapshot,proc) then repeat
     if AnsiSameText(proc.szExeFile,ExeFileName) then begin
     hSnapshot2:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,proc.th32ProcessID);
     m.dwSize:=SizeOf(TModuleEntry32);
     if Module32First(hSnapshot2,m) then begin
      result:=(m.szExePath);
      CloseHandle(hSnapshot2);
      CloseHandle(hSnapshot);
      exit;
      end;
     end;
    until not Process32Next(hSnapshot,proc);
    CloseHandle(hSnapshot);
    end;
Crystallon вне форума Ответить с цитированием
Старый 03.08.2011, 12:45   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Ровно то, что и было написано в доках
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, запущена программа с локальных диска или с флешки? KWN, lnc Общие вопросы Delphi 4 07.07.2011 22:31
Как узнать программа запущена или нет? ilSMoKEli Общие вопросы Delphi 5 02.05.2010 23:01
обновление в блоге - Как узнать, запущена программа с правами администратора или нет Pblog Обсуждение статей 0 05.03.2010 20:50
Как узнать деректорию откуда запущена программа? dolphin705 Общие вопросы Delphi 4 22.03.2009 19:32
Как программно узнать IP компа, на котором запущена программа? Andr Безопасность, Шифрование 4 23.11.2008 14:25