Показать сообщение отдельно
  #1  
Старый 16.02.2011, 00:08
Feodor Feodor вне форума
Прохожий
 
Регистрация: 19.01.2011
Сообщения: 24
Репутация: 10
По умолчанию Помогите Перечисление всех окон

Суть программы очень простая - вывести в TreeView все окна + их дочерние окна сохраняя всю структуру. Мой вариант выводит многое, но говорят это не все окна. И под окном Delphi нет окон Object Inspector и т.д
Думаю ошибка в GetWindow(Handle,gw_child) - она не возвращает по хэндлу Delphi его дочерние окна, хотя по хэндлу Object Inspector - Delphi является родителем (GetParent(Handle)). Может есть другой способ получать дочернее окно? (GetTopWindow, EnumChildWindows - почему-то тоже не срабатывают так как требуется).
P.S.: Добавил во вложения zip со своей прогой.

Мой код:
Код:
procedure Detka(H:hWnd;Tree:TTreeView; N:TTreeNode);{Хэндл окна с которого начинаем поиск, TreeView, Node родитель}
var
  buff:ARRAY [0..255] OF Char;{ для хранения заголовков окон}
  PNode:TTreeNode;{Node для TreeView}
begin
While H<>0 do   { пока успешно возвращается следующее окно}
  begin
        GetWindowText(H,buff,256); {получаем текст окна}
        PNode:=Tree.Items.AddChild(N ,buff);{записываем и запоминаем Node}
             Detka(GetTopWindow(H),Tree,PNode);{вызываем поиск дочернего, передаем Node родителя}
        H:= GetWindow(H, gw_hWndNext); {получаем следующее окно}
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TreeView1.Items.Clear; {очищаем TreeView перед добавлением}
  {хэндл первого окна на Z-уровне родителя нашего окна}
  Detka(GetWindow (GetWindow(Handle, gw_Owner), GW_HWNDFIRST) ,TreeView1,nil);{вызываем процедуру, передаем хэндл, TreeView, Node родитель}
end;

lmikle: пользуемся тегами!!!
Вложения
Тип файла: zip WINDOW.zip (10.8 Кбайт, 24 просмотров)
Ответить с цитированием