Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
14-62772
Top Gun
2002-12-27 00:41
2003.01.20
sp3 (eng) не ставится на w2k rus


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


1-62562
diks
2003-01-11 12:38
2003.01.20
Помогите


1-62454
dumb
2003-01-09 07:38
2003.01.20
Component -> Import ActiveX Control


1-62479
Ag2002
2003-01-09 17:09
2003.01.20
Вид компонентов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский