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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2019, 20:26   #1
куки
 
Регистрация: 02.05.2016
Сообщений: 4
Счастье По имени процесса вычислить полный путь до файла как 64 так и 32 битных

Delphi По имени процесса вычислить полный путь до файлов как 64 так и 32 битных

Код:
uses Psapi, tlhelp32,
 
//////////////
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 
type
TStringArray = array of string;
function GetPathOfNameProcess(name_exe:string):TStringArray;
var
hSnap:THandle;
pe:TProcessEntry32;
pid: DWORD;
offset: integer;
Count: Integer;
function GetPathFromPID(const PID: cardinal): string;
type
TQueryFullProcessImageName = function(hProcess: Thandle; dwFlags: DWORD; lpExeName: PChar; nSize: PDWORD): BOOL; stdcall;
var
hProcess: THandle;
path: array[0..MAX_PATH - 1] of char;
QueryFullProcessImageName: TQueryFullProcessImageName;
nSize: cardinal;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
if hProcess <> 0 then
try
 
if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) <> 0 then
begin
result := path;
end
else if Win32MajorVersion >= 6 then
begin
nSize := MAX_PATH;
ZeroMemory(@path, MAX_PATH);
@QueryFullProcessImageName := GetProcAddress(GetModuleHandle('kernel32'), 'QueryFullProcessImageNameW');
if Assigned(QueryFullProcessImageName) then
if QueryFullProcessImageName(hProcess, 0, path, @nSize) then Result := path;
end;
 
finally
CloseHandle(hProcess)
end
else
RaiseLastOSError;
end;
begin
offset := 0;
Count := 0;
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
If Process32First(hSnap,pe) then
While Process32Next(hSnap,pe) do
begin
if ExtractFileName(pe.szExeFile)=name_exe then
begin
SetLength(result, Count + 1);
Result[Count] := GetPathFromPID(pe.th32ProcessID);
Inc(Count);
end;
end;
end;
Пути к файлам по имени процесса получаем так

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
arr: TStringArray;
i: Integer;
begin
arr := GetPathOfNameProcess('Skype.exe');
for i := 0 to High(arr) do
ShowMessage(arr[i]); //Выводит полный путь до файла
end;
Robot
куки вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм формирования 32-битных чисел с плав. точкой из полученных 16-ти битных integer MaratMT Помощь студентам 5 22.01.2016 14:09
через API получаю полный путь и название процесса, а получаю только название процесса Den7656 Win Api 5 12.09.2011 09:03
Открытие файла, используя полный путь к нему kleinsnake Общие вопросы C/C++ 2 09.02.2011 20:12
полный путь tae1980 Microsoft Office Excel 7 08.05.2009 10:46
Из процесса получить полный путь к ехе файлу. Ozerich Общие вопросы Delphi 4 08.08.2008 12:12