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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2014, 10:55   #1
pj-infest
Пользователь
 
Аватар для pj-infest
 
Регистрация: 09.10.2010
Сообщений: 25
Восклицание Получение полного пути к файлу процесу по ID

Имею доступен ID процесса, отсюда могу найти его хендл, нужно найти
полный путь к файлу, пока из примеров Майкрософт удалось только
получить название файла с расширением, а нужно полный путь включая
название. может кто направить на путь истинный?

также мне удалось получить полный путь к файлу, но процесса,
в котором эта функция вызывалась. Нужно в одном процессе найти
полный путь к фалу другого процесса. Может кто-то может что-то
посоветовать по теме? буду очень благодарен

Код:
std::string FunctionalSet::GetProcCommandLine(_int32 ProcessID)
 {

 HANDLE hProcessSnap;

 PROCESSENTRY32 pe32;

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
    return ("0");
}

pe32.dwSize = sizeof (PROCESSENTRY32);

Process32First(hProcessSnap, &pe32);

do
{
    if (pe32.th32ProcessID == ProcessID)
    {
        return pe32.szExeFile;
    }

} while (Process32Next(hProcessSnap, &pe32));

return ("0");

}
pj-infest вне форума Ответить с цитированием
Старый 28.11.2014, 12:16   #2
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
function ProcessFileName(PID: DWORD): string;
var
 Handle: THandle;
begin
 Result := '';
 Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
 if Handle <> 0 then
   try
     SetLength(Result, MAX_PATH);
       if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
         SetLength(Result, StrLen(PChar(Result)));
   finally
     CloseHandle(Handle);
   end;
end;
Iron Monk вне форума Ответить с цитированием
Старый 28.11.2014, 12:50   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не надо 10 раз считать длину строки.
Код:
function ProcessFileName(PID: DWORD): string;
var
 Handle: THandle;
begin
 Result := '';
 Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
 if Handle <> 0 then
   try
     SetLength(Result, MAX_PATH);
     SetLength(Result, GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH));
   finally
     CloseHandle(Handle);
   end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.11.2014, 12:56   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

--сut
Согласен

Последний раз редактировалось Iron Monk; 28.11.2014 в 13:01.
Iron Monk вне форума Ответить с цитированием
Старый 28.11.2014, 13:27   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

давно существует GetProcessImageFileName...
Человек_Борща вне форума Ответить с цитированием
Старый 28.11.2014, 13:39   #6
pj-infest
Пользователь
 
Аватар для pj-infest
 
Регистрация: 09.10.2010
Сообщений: 25
По умолчанию

спасибо за идеи, сейчас попробую и отпишусь
pj-infest вне форума Ответить с цитированием
Старый 28.11.2014, 13:44   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
давно существует GetProcessImageFileName...
тогда уж QueryFullProcessImageName, правда с висты.
GetProcessImageFileName не смотря на громкое название возвращает не совсем то что ожидается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.11.2014, 14:02   #8
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
давно существует GetProcessImageFileName...
Почитал...
Бурелом...
Iron Monk вне форума Ответить с цитированием
Старый 28.11.2014, 14:57   #9
pj-infest
Пользователь
 
Аватар для pj-infest
 
Регистрация: 09.10.2010
Сообщений: 25
По умолчанию

в принципе

GetProcessImageFileName и GetModuleFileNameEx

могли бы подойти, но в моем визуал студио их нет

буду искать как их добавить
pj-infest вне форума Ответить с цитированием
Старый 28.11.2014, 15:33   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

предлагаю залезть на MSDN и посмотреть какой заголовочник и какая библиотека нужна.
http://msdn.microsoft.com/ru-ru/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение пути к файлу из ListBox artemavd Общие вопросы Delphi 8 07.08.2010 15:27
Достать директории из полного пути к файлу Kuzya59 Общие вопросы Delphi 7 23.09.2009 13:08
Получение пути к файлу путем перетаскивания k1r1ch Общие вопросы Delphi 7 29.06.2009 21:19
Как из полного пути к файлу получить имя файла с расширением uraura Компоненты Delphi 2 20.03.2009 15:53
Определение полного пути папок TreeView vitawt Общие вопросы Delphi 8 22.02.2009 15:13