Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

Как определить путь к программе по ее хендлу?   Найти похожие ветки 

 
slpro ©   (2002-12-05 07:49) [0]

Есть хендл окна программы, как определить имя ЕХЕшника и путь к нему ?


 
slpro ©   (2002-12-05 08:13) [1]

Очень надо. Помогите плз!


 
Song ©   (2002-12-05 08:18) [2]

GetModuleFileName()
Нужен хэндл процесса.
NTQuerySystemInformation()
GetCommandLineA()


 
kostik78ua   (2002-12-05 09:44) [3]

Про это уже много писали:

uses ..., psapi, TlHelp32;

function IsExeFile(st: string): boolean; // Файлы, которые мы хотим отловить
var
extSt: string;
begin
extSt:=ExtractFileExt(st);
Result:=(CompareText(extSt, ".EXE") = 0) or
(CompareText(extSt, ".COM") = 0);
end;

function GetFileNameWin9x(ProcessId: THandle): string;
var
hSnapshot : THandle;
ModuleEntry : TModuleEntry32;
begin
try
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPALL, ProcessID);
if hSnapshot > 0 then
try
ModuleEntry.dwSize := SizeOf(ModuleEntry);
if Module32First(hSnapshot, ModuleEntry) then
repeat
SetString(Result, ModuleEntry.szExePath, StrLen(ModuleEntry.szExePath));
if IsExeFile(Result) then
begin
Result:=AnsiUpperCase(ExtractFileName(Result));
Exit;
end;
until not Module32Next(hSnapshot, ModuleEntry);
Result:=AnsiUpperCase(Result);
finally
CloseHandle(hSnapshot);
end;
except
Result:="";
end;
end;

function GetFileNameWinNT(ProcessId: THandle): string;
type
TPath = array [0..MAX_PATH - 1] of char;
var
i: Integer;
hProcess, cRequest, cModules : THandle;
hModules : array of THandle;
Buffer: TPath;
begin
try
FillChar(Buffer, sizeof(Buffer), #0);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS, false, ProcessId);
if hProcess > 0 then
try
cRequest := 96; cModules := 0;
repeat
SetLength(hModules, cRequest div 4);
if not EnumProcessModules(hProcess, PDWord(Pointer(@hModules)^), cRequest, cModules) then Break;
if cModules < cRequest then Break else cRequest := cRequest shl 1;
until False;
cModules := cModules div 4;
for i := 0 to cModules - 1 do
begin
if GetModuleFileNameEx(hProcess, hModules[i], Buffer, sizeof(Buffer)) > 0 then
begin
SetString(Result, Buffer, StrLen(Buffer));
if IsExeFile(Result) then
begin
Result:=AnsiUpperCase(Result);
Exit;
end;
end
end;
finally
CloseHandle(hProcess);
end;
Result:=AnsiUpperCase(ExtractFileName(Result));
except
Result:="";
end;
end;

function WinVersion: TOSVersionInfo;
begin
FillChar(Result, SizeOf(TOSVersionInfo), 0);
Result.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);
GetVersionEx(Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
dwProcessId: Cardinal;
st: string;
HandleWindow: THandle;
IsWinNT: boolean;
begin
HandleWindow:=Handle; //Здесь известный хэндл окна
GetWindowThreadProcessId(HandleWindow, @dwProcessId);
IsWinNT:=WinVersion.dwPlatformId=VER_PLATFORM_WIN32_NT;
if IsWinNT
then st:=GetFileNameWinNT(dwProcessId)
else st:=GetFileNameWin9x(dwProcessId);
Edit1.Text:=st;
end;


 
Игорь Шевченко ©   (2002-12-05 09:47) [4]

В кладовке, в разделе "Готовые программы" программа EnumFunctions - там есть механизм определения пути к exe"шнику для Nt-систем.


 
slpro ©   (2002-12-05 12:12) [5]

Все работает .Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2003.01.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-62614
EvgeniyM
2003-01-09 13:40
2003.01.20
Вопрос по TPopupMenu


14-62768
Ru
2002-12-19 14:36
2003.01.20
---|Ветка была без названия|---


3-62409
sumrak
2002-12-25 18:04
2003.01.20
Построение отчета


14-62807
Ежик
2003-01-01 06:20
2003.01.20
Господа программеры из Эстонии, С новым Годом!


14-62755
Dron_coder
2002-12-29 17:41
2003.01.20
Всем, всем, всем!!!