Главная страница
    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.009 c
6-62686
Viksoft
2002-11-20 22:37
2003.01.20
Как написать свой DNS сервер


6-62712
BALU1111
2002-11-22 12:18
2003.01.20
FastNet


14-62833
Plugin
2003-01-02 07:36
2003.01.20
Чуваки! я малость не продвинутый...


14-62757
kronprince
2003-01-04 18:13
2003.01.20
Хотел задать очередной наболевший вопрос но передумал :(


1-62615
Smok_er
2003-01-09 00:21
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский