Program zwraca Uchwyty aplikacji o danej nazwie :
Funkcja GetWindowProcessName zwraca ścieżke do aplikacji do której należy okno o danym uchwycie:
program Uchwyt;
{$APPTYPE CONSOLE}
uses
Windows, Messages, SysUtils, Variants,
TLHelp32,Psapi;
function GetProcessName95(const PID: DWord): string;
var
ToolHandle: THandle;
Process: TProcessEntry32;
begin
ToolHandle := CreateToolhelp32Snapshot(th32cs_SnapProcess, 0);
if ToolHandle = Invalid_Handle_Value then RaiseLastWin32Error else try
Process.dwSize := SizeOf(Process);
if Process32First(ToolHandle, Process) then repeat
if Process.th32ProcessID = PID then begin
Result := Process.szExeFile;
exit;
end;
until not Process32Next(ToolHandle, Process);
if GetLastError <> Error_No_More_Files then RaiseLastWin32Error;
finally
CloseHandle(ToolHandle);
end;
end;
function GetProcessNameNT(const PID: DWord): string;
var
Process: THandle;
Modules: array of HModule;
Needed: DWord;
Len: DWord;
begin
Process := OpenProcess(Process_Query_Information or Process_VM_Read,
False, PID);
if Process = 0 then RaiseLastWin32Error else try
Win32Check(EnumProcessModules(Process, nil, 0, Needed));
SetLength(Modules, Needed div SizeOf(Modules[0]));
Win32Check(EnumProcessModules(Process, PDWord(@Modules[0]), Needed,
Needed));
SetLength(Result, Max_Path);
Len := GetModuleFileNameEx(Process, Modules[0], PChar(Result),
Length(Result));
if Len = 0 then RaiseLastWin32Error else SetLength(Result, Len);
finally
CloseHandle(Process);
end;
end;
function GetWindowProcessName(const Wnd: HWnd): string;
var
PID: DWord;
begin
GetWindowThreadProcessID(Wnd, @PID);
if Win32Platform = Ver_Platform_Win32_NT then
Result := GetProcessNameNT(PID)
else
Result := GetProcessName95(PID);
end;
Teraz musimy przelecieć :-D wszystkie okna w poszukiwaniu uchwytów skojarzonych z GG
a ponieważ dostajemy całą ścieżkę musimy użyć ExtractFileName
Wersja 1 (dla widocznych i niewidoczych okien)
var
TestowaneOkno:THandle;
begin
TestowaneOkno:=GetTopWindow(0); // uchwyt okna górnego
While TestowaneOkno<>0 do // dopóki TestowaneOkno to okno
begin
if ExtractFileName( GetWindowProcessName(TestowaneOkno))='gg.exe' then Writeln('Uchwyt okna GG to ',TestowaneOkno);
TestowaneOkno:=getWindow(TestowaneOkno, GW_HWNDNEXT) ;//Jak nie to bierzesz następnne okno
end;
readln;
end.
Wersja 2 (tylko dla widocznych okien)
var
TestowaneOkno:THandle;
begin
TestowaneOkno:=GetTopWindow(0); // uchwyt okna górnego
While TestowaneOkno<>0 do // dopóki TestowaneOkno to okno
begin
if (ExtractFileName( GetWindowProcessName(TestowaneOkno))='gg.exe') and
(IsWindow(TestowaneOkno)= true) and
(IsWindowVisible(TestowaneOkno)=true) then Writeln('Uchwyt okna GG to ',TestowaneOkno);
TestowaneOkno:=getWindow(TestowaneOkno, GW_HWNDNEXT) ;//Jak nie to bierzesz następnne okno
end;