![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток, подскажите как получить список объектов чужого окна, с примером.
|
|
#2
|
||||
|
||||
|
"список объектов чужого окна, с примером" - а это как? Не достаточно инфы по-тому, что нужно
|
|
#3
|
|||
|
|||
|
Например, так в ListBox1 помещаю список окон.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var wnd: hwnd;
buff: array [0..127] of char;
begin
ListBox1.clear;
wnd := GetWindow(handle, gw_hwndfirst);
while wnd <> 0 do
begin // Не показываем:
if (wnd <> Application.Handle) // Собственное окно
and IsWindowVisible(wnd) // Невидимые окна
and (GetWindow(wnd, gw_owner) = 0) // Дочерние окна
and (GetWindowText(wnd, buff, SizeOf(buff)) <> 0) then
begin
GetWindowText(wnd, buff, SizeOf(buff));
ListBox1.Items.Add(StrPas(buff));
end;
wnd := GetWindow(wnd, gw_hwndnext);
end;
ListBox1.ItemIndex := 0;
end;теперь нужно поместить например в Memo список всех объектов выбранного окна. Последний раз редактировалось M.A.D.M.A.N., 13.02.2015 в 17:27. |
|
#4
|
||||
|
||||
|
Ну так и помещай их сразу в Memo, а не в ListBox.
|
|
#5
|
|||
|
|||
|
В ListBox я помещаю список всех открытых окон разных приложений, выбираю нужное, теперь мне необходимо создать список всех объектов находящихся на выбранном окне,(кнопки,иконки и т.д).
Как? |
|
#6
|
||||
|
||||
|
Цитата:
Код:
// Автор: Александр (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)
| ||