Форум: "WinAPI";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Вниз
Как определить путь к программе по ее хендлу? Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c