![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Путь
Ivolg © (2007-07-17 14:47:00)Как можно узнать адресс файла, зная имя процесса ?
Юрий Зотов (2007-07-20 12:26:00) [1]> Ivolg © (20.07.07 10:42) [22]
Сразу бы так - простыми словами и без всяких терминов. Сколько бы времени сэкономили.
Но снова - "название процесса". Ну нет у процесса никаких названий, понимаете? Не-ту.
Ответ - см. [20] и [21].
Но вообще, в ТАКОЙ постановке эта задача ОДНОЗНАЧНОГО решения не имеет. Ведь никто не мешает запустить хоть сотню программ Test.exe из РАЗНЫХ папок - и если известно только имя файла Test.exe, то что в таком случае делать? Выдавать первый найденный процесс? Выдавать их все? Еще что-то?
Если список процессов Вы строите сами, то есть простое и точное решение - запоминать в этом же списке не только имена файлов, а еще и ID процессов. Тогда ничего не придется искать (поскольку ID прoцесса просто сразу берется из списка, а по нему сразу же определяется полное имя его исполнимого файла).
Ivolg (2007-07-20 10:42:00) [2]Инс © (20.07.07 09:23) [21]
Спасибо за помощь ! Буду пробовать !
Юрий Зотов © (19.07.07 22:43) [19]
Имеется список процессов, такой же как и в "Диспетчере задач" (вкладка "Процессы"), и нужно получить путь до файла процесса. Например запустили мы некую прогу Test.exe из папки C:\Windows\, прога загрузилась в память и
появилась в списке процессов, в данном случае имя программы соответствует имени процесса Test.exe, который отображен в списке процессов. Нужно определить по названию процесса, какой файл был запущен и где он находится. Понятно, что заранее неизвестно откуда программа была запущена. Вот вся суть задачи.
Инс (2007-07-20 09:23:00) [3]Ой, рано нажал отправить
2. Найти процесс, чей exename равен искомому
3. Запомнить идентификатор этого процесса
4. Открыть процесс с правами PROCESS_QUERY_INFORMATION
5. С помощью GetModuleFileNameEx и дескриптора, полученного в п.4. получить полный путь
Если программа твоя - Application.ExeName
Дерзай
Инс (2007-07-20 09:20:00) [4]Если программа чужая, то
1. С помощью ToolHelp получить список процессов
Юрий Зотов (2007-07-19 22:43:00) [5]> Ivolg © (19.07.07 22:09) [18]
1. Project1.exe - это не имя процесса. Еще раз - у процессов имен нет. У них есть хэндлы, приоритеты и еще куча всего, но имен у них нет.
2. Если Вы хотите получить правильный ответ на какой-то вопрос, то и вопрос, видимо, нужно тоже формулировать правильно. По крайней мере, не употребляя терминов, смысл которых Вам непонятен. Иначе только вводите всех в заблуждение и шансы на правильный ответ, соответственно, падают.
3. Уточните вопрос - Вам нужно определить полный путь к файлу Project1.exe из САМОЙ программы Project1.exe, или из какой-то ДРУГОЙ программы?
Ivolg (2007-07-19 22:09:00) [6]Инс © (19.07.07 20:11) [16]
GetModuleFileName работает не с хэндлом процесса, а с хэндлом исполняемого модуля - разные вещи.
Теперь что касается ответа на твой вопрос. Насколько я правильно телепатировал, у тебя есть только имя файла чужого процесса без пути, тебе нужно узнать путь. Так?
Да. У меня есть только имя процесса, мне нужно по этому имени процесса, определить местонахождение файла. Например, имя процесса Project1.exe, после определения должно показать путь файла, C:\Program Files\Borland\Delphi7\Projects\Project1.exe.
MsGuns (2007-07-19 20:35:00) [7]Юный хакер робко прячет цель свою в английских термах,
Он наивно полагает, будто ввел всех в заблужденье
Типа плохо сшитой фразой с кучей ляпов и описок
;)
Инс (2007-07-19 20:11:00) [8]GetModuleFileName работает не с хэндлом процесса, а с хэндлом исполняемого модуля - разные вещи.
Теперь что касается ответа на твой вопрос. Насколько я правильно телепатировал, у тебя есть только имя файла чужого процесса без пути, тебе нужно узнать путь. Так?
Pont (2007-07-19 19:07:00) [9]http://www.netcode.ru/cpp/zert995.htm
Ivolg (2007-07-19 18:33:00) [10]Может кто подскажет как правильно использовать функцию GetModuleFileName() ?
Anatoly Podgoretsky (2007-07-17 20:55:00) [11]> Ivolg (17.07.2007 20:44:12) [12]
Ошибаешься
Ivolg (2007-07-17 20:44:00) [12]Если я не ошибаюсь, функция FindWindow(); ищет дискриптор окна только по его заголовку.
Pont (2007-07-17 20:27:00) [13]Ivolg
FindWindow
Попробуй это для поиска дескриптора окна. Чтобы найти экзешник надо в GetModuleFileName() один из параметров указать 0.
Ivolg (2007-07-17 19:34:00) [14]Сори, неправельно написал )))) Мне необходимо узнать полный путь к .exe'шнику, зная только его имя процесса ! Можно с помощью функции
GetModuleFileName(), тогда как получить хендл процесса, используемый в первом параметре или я ошибаюсь ?
Ivolg (2007-07-17 19:28:00) [15]Сори, неправельно написал )))) Мне необходимо узнать полный путь к .exe'шнику, зная только его имя процесса !
Юрий Зотов (2007-07-17 16:32:00) [16]> Ivolg © (17.07.07 14:47)
У файла нет адреса. А у процесса нет имени.
Наверное, стоит уточнить вопрос?
Anatoly Podgoretsky (2007-07-17 14:56:00) [17]> Dib@zol (17.07.2007 14:53:05) [5]
Так форум же для начинающих, а он то к этому какое отношение имеет?
Сергей М. (2007-07-17 14:53:00) [18]
> телепатор свой глюкавый
Я вижу.
По "пчелке".
Dib@zol (2007-07-17 14:53:00) [19]Удалено модератором
Dib@zol (2007-07-17 14:51:00) [20]Нее, просто телепатор свой глюкавый фклучил...