Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.05.2010, 11:21
hated8 hated8 вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 6
Репутация: 10
Вопрос Путь к файлу процесса

подскажите пожалуйста как по PID процесса узнать путь к файлу из каторого он запущен?

Нашел вот это:
Цитата:
function GetPathProcess(ProcessId: Cardinal): string;
var
hSnapshot: THandle;
lpme: TModuleEntry32;
begin
SetLength(Result, 0);
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
if hSnapshot = -1 then
RaiseLastWin32Error;
lpme.dwSize := SizeOf(lpme);
if Module32First(hSnapshot, lpme) then
begin
result := lpme.szExePath;
end;
end;
Но работает не для всех процессов.... Помогите плз...
Ответить с цитированием
  #2  
Старый 19.05.2010, 11:41
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Учитесь искать на просторах интернета:
Цитата:
Сообщение от с какого-то сайта...
Код:
uses tlhelp32, Psapi;

с помощью функции

function GetModulePath(PID: DWord): string;
var
cb: DWORD;
I: Integer;
ProcCount: Integer;
hMod: HMODULE;
hProcess: THandle;
PIDArray: array [0..1023] of DWORD;
ModuleName: array [0..300] of Char;

begin
FillChar(ModuleName, SizeOf(ModuleName), #0);
EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
ProcCount := cb div SizeOf(DWORD);
for I := 0 to ProcCount - 1 do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, PIDArray[i]);
if (hProcess <> 0) then
begin
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
if PID = PIDArray[i] then
Result:= ModuleName;
CloseHandle(hProcess);
end;
end;

end;

возможны проблемы с вистой! в xp все OK.

Вот тут еще гляньте
Ответить с цитированием
  #3  
Старый 19.05.2010, 12:04
hated8 hated8 вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 6
Репутация: 10
По умолчанию

Эта получше, но тоже не для всех процессов работает!
ну и по закону подлости, как раз для необходимых мне и не пашет...(

На winServer2003 для всех работает, а для нескольких нет!, но ведь при пользовании програмкой ProcessExplorer я вижу пути для всех!

Сделайте пробег по всем айдишникам и вы сами увидите что процедурка работает процентов на 40....!

Последний раз редактировалось hated8, 19.05.2010 в 12:21.
Ответить с цитированием
  #4  
Старый 19.05.2010, 12:27
hated8 hated8 вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 6
Репутация: 10
По умолчанию

ХОТЯ НЕТ!
СТОП! НАГЛО ВРУ!!!

На ХР все ОК!

А вот на winServ.... Не подскажете в чём может быть проблемма?
Ответить с цитированием
  #5  
Старый 19.05.2010, 17:52
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Process Explorer вызывает функцию GetNativeSystemInfo. Дизассемблер в руки вперед изучать принцип работы софтины.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #6  
Старый 19.05.2010, 17:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

GetNativeSystemInfo вызывает функцию из ntdll NtQuerySystemInformation описалово есть на МСДН, там в структурах должен быть ImagePath
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 20.05.2010, 10:30
hated8 hated8 вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 6
Репутация: 10
По умолчанию

Не совсем понял....
А как это реализовать на Делфи?
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter