
14.02.2015, 21:20
|
 |
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;
|