Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #6  
Старый 14.02.2015, 21:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Aleks99
...Как?
Код:
//  Автор: Александр (Rouse_) Багель
//  © Fangorn Wizards Lab 1998 - 2002
//  16 октября 2002 18:21
//
//  Рекурсивная функция, строит дерево всех открытых окон, кнопок, едитов и т.д.
//  В качестве входных данных получает узел дерева и Хэндл окна
//

procedure TMainForm.Sys_Windows_Tree(Node: TTreeNode; AHandle: HWND);
const
  MAX = 128;
var
  szClassName, szCaption: array[0..MAX - 1] of Char;
  Result    : String;
  szFileName : array[0..255] of Char;
  PID, TID: Cardinal;
  szLayoutName: array[0..MAX - 1] of Char;
begin
  //Запускаем цикл пока не закончатся окна
  while AHandle <> 0 do
  begin
    //Получаем имя класса окна
    GetClassName(AHandle, szClassName, MAX);
    //Получаем текст (Его Caption) окна
    GetWindowText(AHandle, szCaption, MAX);
    // Получаем имя модуля
    if GetwindowModuleFilename(AHandle, szFileName, SizeOf(szFileName)) = 0 then
      FillChar(szFileName, 256, #0);
    TID := GetWindowThreadProcessId(AHandle, PID);

    AttachThreadInput(GetCurrentThreadId, TID, True);
    VerLanguageName(GetKeyboardLayout(TID) and $FFFF, szLayoutName, MAX);
    AttachThreadInput(GetCurrentThreadId, TID, False);

    Result := Format('%s [%s] Caption = %s, Handle = %d, PID = %d, Layout = %s',
      [String(szClassName), String(szFileName), String(szCaption),
      AHandle, PID, String(szLayoutName)]);

    //В следующей процедуре, в скобках, добавляем результат
    //в дерево, получаем хэндл дочернего окна и с результатами
    //выполнения этих двух функций выполняем процедуру Sys_Windows_Tree
    Sys_Windows_Tree(TreeView1.Items.AddChild(Node, Result),
      GetWindow(AHandle, GW_CHILD));
    //Получаем хэндл следующего (не дочернего) окна
    AHandle := GetNextWindow(AHandle, GW_HWNDNEXT);
    //Handle := 0;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Aleks99 (15.02.2015)
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025