自己用代码也能实现,底层原理就是EnumWindows函数和一个EnumWindowsProc回调函数。
这里JCL帮我们做了下封装,方便以后一键调用。
function EnumWindowsProc(Handle: THandle; LParam: TStrings): Boolean; stdcall;
var
St: array [0..256] of Char;
St2: string;
begin
if Windows.IsWindowVisible(Handle) then
begin
GetWindowText(Handle, St, Length(St));
St2 := St;
if St2 <> '' then
TStrings(LParam).AddObject(St2, TObject(Handle));
end;
Result := True;
end;
procedure GetVisibleWindows(List: TStrings);
begin
List.BeginUpdate;
try
List.Clear;
EnumWindows(@EnumWindowsProc, LPARAM(List));
finally
List.EndUpdate;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S : TStringlist;
i : integer;
begin
S