-
Вывести список компонент чужого окна - это можно сделать?
-
что такое "компонент чужого окна" ?
-
у окна нет компонентов. Есть дочерние окна, но если приложение написано на дельфи, то некоторые компоненты (Label, к примеру) окнами не являются. EnumChildWindows()
-
Я вот кое-что нашел, буду пробовать: 1. Раз в компонент на форме осуществлялся ввод, то форма полюбому активна, тада: Код: var
H: HWND;
Zagolovok:array[0..255] of Char;
...
begin
H:= GetActiveWindow GetWindowText(H, Zagolovok, SizeOf(Zagolovok));
2. Получили заголовок окна... требуется получить все хендлы компонентов и их классы, сделаем цикл: Код:
var
Wnd: HWND;
Buff:array[0..255] of Char;
begin
H:=GetActiveWindow;
Wnd:= GetWindow(H, gw_child);
While Wnd <> 0 then begin
If (GetParent(Wnd) = H) then begin
GetClassName(Wnd,Buff,SizeOf(Buff));
ListBox1.Items.Add(StrPas(buff)); end;
Wnd:= GetWindow(H, gw_HWNDNext);
end;
В ListBox1 будут выведены классы всех child окон
-
> В ListBox1 будут выведены классы всех child окон
А вопрос твой звучал совсем иначе
> компонент чужого окна
"child окно" <> "компонент"
-
Да, точно, не то.
-
Но если мы знаем имя класса окна - можно же узнать дочерние классы этого окна?
-
> можно же узнать дочерние классы этого окна? >
Нельзя. Можно узнать лишь классы дочерних окон этого окна, если таковые вообще имеются. Но какое отношение это имеет к "компонент чужого окна" ?
-
> имя класса окна - можно же узнать дочерние классы этого > окна?
там нет понятия "дочерние классы" класс окна - это не то, что класс в ООП есть дочерние окна, я уже писал - EnumChildWindows()
-
worldmen (20.10.08 12:12) [3] 1. Раз в компонент на форме осуществлялся ввод, то форма полюбому активна, тада: GetActiveWindow возвращает окно от данного потока.
-
> GrayFace © > GetActiveWindow возвращает окно от данного потока. Создал тестовую форму с несколькими полями - Прога-1 Создал программу (Прога-2) с GetActiveWindow - а она почемуто эта функция возвращает имя окна только самой программы (Прога-2),когда она активна, а не активной Проги-1(даже когда она активна) - почему?
-
> worldmen (21.10.08 09:46) [10]
Ты читать умеешь ? Читай внимательно справку:
The GetActiveWindow function retrieves the window handle to the active window associated with the thread that calls the function.
-
Т.е. возвращает то, чем было вызвана функция? Так мне перевел промт: "Функция GetActiveWindow восстанавливает маркер окна к активному окну, связанному с потоком, который вызывает функцию."
-
> восстанавливает маркер окна к активному окну
возвращает дескриптор (описатель) активного окна Промпту двойка
-
> Промпту двойка
он никогда не отличался хорошим переводом
-
> worldmen (23.10.08 10:23) [12]
Каждое существующее в системе окно принадлежит конкретному создавшему его потоку.
Если в потоке T1 были созданы окна W1 и W2, а в потоке T2 - W3 и W4, и в дан.момент времени активно, например, окно W3, то ф-ция GetActiveWindow, будучи вызыванная в потоке T1 вернет 0 (потому что текущее активное окно НЕ принадлежит потоку T1), в то время как та же ф-ция, вызыванная в потоке T2, вернет хэндл окна W3.
-
-
> можно переходить в другие потоки?
Что значит "переходить" ?
> нашел то что искал здесь
Там нет ни слова про "список компонент чужого окна".
-
Удалено модератором Примечание: Ненужно так делать.
-
> Vayrus (23.10.08 14:44) [18]
Это что, PR-акция ?)
|