Создайте форму и разместите на ней два компонента ListBox. Скопируйте код, показанный ниже. Запустите SysEdit. Запустите форму Delphi. Первый ListBox должен содержать список всех запущенных приложений. Дважды щелкните на SysEdit и нижний ListBox покажет дочернее MDI-окно программы SysEdit. Paul Powers (Borland)
type TForm1 = class(TForm) ListBox1: TListBox; ListBox2: TListBox; procedure FormCreate(Sender: TObject); procedure ListBox1DblClick(Sender: TObject); private function enumListOfTasks(hWindow: hWnd): Bool; export; function enumListOfChildTasks(hWindow: hWnd): Bool; export; end;
THoldhWnd = class(TObject) private public hWindow: hWnd; end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin enumWindows(@TForm1.EnumListOfTasks, Longint(Self)); if (ListBox1.Items.Count > 0) then ListBox1.ItemIndex := 0; end;
function TForm1.enumListOfTasks(hWindow: hWnd): Bool; var HoldString: PChar; WindowStyle: Longint; IsAChild: Word; HoldhWnd: THoldhWnd;
{Добавляем строку с текстом задачи или именем класса и дескриптор в ListBox1.Items } if (GetWindowText(hWindow, HoldString, 255) > 0) and (WindowStyle > 0) and (IsAChild = Word(Nil)) then ListBox1.Items.AddObject(StrPas(HoldString), TObject(HoldhWnd)) else if (GetClassName(hWindow, HoldString, 255) > 0) and (WindowStyle > 0) and (IsAChild = Word(Nil)) then ListBox1.Items.AddObject(Concat('<',StrPas(HoldString),'>'), TObject(HoldhWnd));
FreeMem(HoldString, 256); HoldhWnd := Nil; Result := TRUE; end;
function TForm1.enumListOfChildTasks(hWindow: hWnd): Bool; var HoldString: PChar; WindowStyle: Longint; IsAChild: Word; HoldhWnd: THoldhWnd;
{Добавляем строку с текстом задачи или именем класса и дескриптор в ListBox1.Items } if (GetWindowText(hWindow, HoldString, 255) > 0) and (WindowStyle > 0)and (IsAChild <> Word(Nil))then ListBox2.Items.AddObject(StrPas(HoldString), TObject(HoldhWnd)) else if (GetClassName(hWindow, HoldString, 255) > 0) and (WindowStyle > 0) and (IsAChild = Word(Nil)) then ListBox2.Items.AddObject(Concat('<',StrPas(HoldString),'>'), TObject(HoldhWnd));
FreeMem(HoldString, 256); HoldhWnd := Nil; Result := TRUE; end;
procedure TForm1.ListBox1DblClick(Sender: TObject); begin enumChildWindows(THoldhWnd(ListBox1.Items.Objects[ListBox1.ItemIndex]).hWindow, @TForm1.enumListOfChildTasks, Longint(Self));