Как с помощью делфи получить список всех открытых окон?
Здравствуйте мне нужно чтобы в мемо построчно показывались все открытые окна на пк. Я делал так
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text:=TaskList(Handle,Handle,False);
end;
Function TaskList(ApHandle: HWND; FirstHandle: THandle; ListAll: Boolean): String;
Var
LngLen: Longint;
StrBuffer,This,All: String;
TaskHandle: THandle;
CChar: Char;
Begin
Try
CChar:=Chr(13);
TaskHandle:=GetWindow(FirstHandle,GW_HWNDFIRST);
While TaskHandle > 0 Do
Begin
If (TaskHandle <> FirstHandle) And (TaskHandle <> ApHandle) Then
Begin
LngLen:=GetWindowTextLength(TaskHandle) + 1;
SetLength(StrBuffer,LngLen);
LngLen:=GetWindowText(TaskHandle,PChar(StrBuffer),LngLen);
If LngLen > 0 Then
Begin
This:=TrimRight(StrBuffer);
If ListAll Then
All:=All +' - '+ This +' - '+ CChar +' - '+ IntToStr(TaskHandle) +' - '+ CChar
Else
If IsWindowVisible(TaskHandle) Then
//All:=All +' - '+ This +' - '+ CChar +' - '+ IntToStr(TaskHandle) +' - '+ CChar;
All:=All +'$'+This;
End;
End;
TaskHandle:=GetWindow(TaskHandle,GW_HWNDNEXT);
End;
TaskList:=Copy(All,1,Length(All)-1);
Except
End;
End;
procedure TForm1.Button2Click(Sender: TObject);
var
str:String;
bet:Boolean;
begin
bet:=False;
str:=Memo1.Text+'$';
Memo1.Clear;
delete(str,1,1);
While bet<>True do begin
Memo1.Lines.Add(Copy(str,1,pos('$',str)-1));
delete(str,1,pos('$',str));
if pos('$',str)=0 then bet:=True;
end;
end;
Но может есть другой способ?