![]() |
|
|
Регистрация | << Правила форума >> | 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.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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)
|