mirror of
https://github.com/ngeor/Chameleon.git
synced 2025-12-19 09:53:43 +01:00
46 lines
911 B
ObjectPascal
46 lines
911 B
ObjectPascal
unit WindowEnumerator;
|
|
|
|
{$mode Delphi}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows;
|
|
|
|
type
|
|
{ An object method that accepts a HWND }
|
|
TWndConsumer = procedure(Wnd: HWND) of object;
|
|
|
|
{ Calls the given consumer for every child window of the given window }
|
|
procedure EnumerateChildWindows(Wnd: HWND; Consumer: TWndConsumer);
|
|
|
|
implementation
|
|
|
|
type
|
|
{ Wrapper structure to hold the object procedure and pass it as a pointer }
|
|
PWrapper = ^TWrapper;
|
|
|
|
TWrapper = record
|
|
Consumer: TWndConsumer;
|
|
end;
|
|
|
|
{ Callback for Windows' EnumChildWindows }
|
|
function MyEnumChildrenProc(Wnd: HWND; Lp: LPARAM): BOOL; stdcall;
|
|
var
|
|
Wrapper: PWrapper;
|
|
begin
|
|
Wrapper := PWrapper(Lp);
|
|
Wrapper^.Consumer(Wnd);
|
|
Result := True;
|
|
end;
|
|
|
|
procedure EnumerateChildWindows(Wnd: HWND; Consumer: TWndConsumer);
|
|
var
|
|
Wrapper: TWrapper;
|
|
begin
|
|
Wrapper.Consumer := Consumer;
|
|
EnumChildWindows(Wnd, @MyEnumChildrenProc, LPARAM(@Wrapper));
|
|
end;
|
|
|
|
end.
|