ГА
Грайр Арушанян

Как с помощью делфи получить список всех открытых окон?

Здравствуйте мне нужно чтобы в мемо построчно показывались все открытые окна на пк. Я делал так

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;

Но может есть другой способ?

Похожие вопросы
Создание книги на делфи с помощью Treview WEbbrowser.
Делфи, цепной список. нашёлся такой пример:
Уважаемые нужна помощь по делфи (внутри)
Задача в делфи. Очень нужна ваша помощь!
Нужно создать оконное приложение в делфи 7
нужна помощ с делфи, две программы.
Косяк в делфи. Нужна помощь. Очень нужна.
ОЧень нужна помощь по делфи
Вопрос про открытие окон...
нужна помощь помогите в делфи решить одномерный массив