Показать сообщение отдельно

  #6  
Старый 09.05.2010, 14:10
=Zeus=
Участник форума
Регистрация: 10.08.2009
Сообщений: 238
С нами: 8817310

Репутация: 108
По умолчанию

mailbrush, вот небольной пример, если я правильно понял вопрос. Положи 2 Листбокса на форму (для наглядности).

Код:
procedure TForm1.Button1Click(Sender: TObject);
var h: HWND;
    i: byte;
begin
ListBox1.Clear;
ListBox2.Clear;
h:=FindWindow(nil, PChar(Заголовок окна));
GetSubChild(h);
for i:=0 to ListBox1.Items.Count-1 do
  EnumProc(StrToInt(ListBox1.Items[i]), 0);
end;
Следующие процедуры взяты с delphikingdom.ru и чуть переделаны.
Код:
Procedure TForm1.GetSubChild(wd:HWnD); // 
Передаем  в процедуру описатель окна 
верхнего уровня
Var Cw:HWnd;			 // 
Описываем еще один описатель
Begin
// Очищать список в процедуре нельзя !!!
If WD=0 then Exit;	  	      // Если 
родительское окно не определено то уходим
Cw := FindWindowEx(Wd, 0, nil, nil); // Находим 
первый элемент произвольного класса
 while (Cw <> 0) do		     // Есть еще 
что искать ?
    begin
       ListBox1.Items.Add(IntToStr(Cw)); 	        // 
Добавим описатель в виде текста в список
       Application.ProcessMessages;                        
 // Дадим поработать другим
       GetSubChild(Cw);			
         //Вызываем себя, но родительское 
окно уже Cw
       Cw := FindWindowEx(Wd, Cw, nil, nil);       // 
Ищем следующие дочернее окно
     End;
End;

function TForm1.EnumProc (WD: HWnd; Param: 
LongInt): Boolean; stdcall;
var Nm:Array[0..255] of Char; // буфер для 
имени
    Cs: Array[0..255] of Char; // буфер для 
класса
Begin 
GetWindowText(Wd,Nm,255); // считываем 
текст заголовка окна
GetClassName(Wd,Cs,255); // считываем 
название класса окна 
ListBox2.Items.Add(String(Nm)+'/'+String(Cs));  
//Запихнули в список название и класс
EnumProc:=True;
End;
 
Ответить с цитированием