Главная страница
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.014 c
14-62823
De
2003-01-01 22:43
2003.01.20
Винда не грузится…


14-62734
Fenik
2002-12-29 17:49
2003.01.20
гады-программисты


6-62699
kalishenko stas
2002-11-19 17:45
2003.01.20
Запуск любого приложения на удал. клиенте


3-62415
johny
2002-12-25 12:11
2003.01.20
Сортировка в DBGRID


6-62715
Андрей Жорник
2002-11-19 05:11
2003.01.20
Как организовать Update моей программы?