![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывести список компонент чужого окна. [D7, WinXP]
worldmen © (2008-10-20 11:32:00)Вывести список компонент чужого окна - это можно сделать?
worldmen (2008-10-24 09:31:00) [1]> Сергей М. © (23.10.08 11:53) [17]
> Там нет ни слова про "список компонент чужого окна".
Я просто не правильно вопрос задал.
123 (2008-10-23 23:22:00) [2]Удалено модератором
Vayrus (2008-10-23 17:34:00) [3]
> Это что, PR-акция ?)
Нет, Вы о чем, что я сделал не так? Я дал ссылку человеку на ветку, которая, возможно, помогла бы ему решить его проблему.
Сергей М. (2008-10-23 14:53:00) [4]
> Vayrus (23.10.08 14:44) [18]
Это что, PR-акция ?)
Vayrus (2008-10-23 14:44:00) [5]Удалено модератором
Примечание: Ненужно так делать.
Сергей М. (2008-10-23 11:53:00) [6]
> можно переходить в другие потоки?
Что значит "переходить" ?
> нашел то что искал здесь
Там нет ни слова про "список компонент чужого окна".
worldmen (2008-10-23 11:37:00) [7]Спасибо, даже не знал такого. А можно переходить в другие потоки?
--------------------
Я нашел то что искал здесь http://forum.codeby.net/topic3765.html
Сергей М. (2008-10-23 10:47:00) [8]
> worldmen (23.10.08 10:23) [12]
Каждое существующее в системе окно принадлежит конкретному создавшему его потоку.
Если в потоке T1 были созданы окна W1 и W2, а в потоке T2 - W3 и W4, и в дан.момент времени активно, например, окно W3, то ф-ция GetActiveWindow, будучи вызыванная в потоке T1 вернет 0 (потому что текущее активное окно НЕ принадлежит потоку T1), в то время как та же ф-ция, вызыванная в потоке T2, вернет хэндл окна W3.
brother (2008-10-23 10:37:00) [9]> Промпту двойка
он никогда не отличался хорошим переводом
clickmaker (2008-10-23 10:35:00) [10]> восстанавливает маркер окна к активному окну
возвращает дескриптор (описатель) активного окна
Промпту двойка
worldmen (2008-10-23 10:23:00) [11]Т.е. возвращает то, чем было вызвана функция?
Так мне перевел промт:
"Функция GetActiveWindow восстанавливает маркер окна к активному окну, связанному с потоком, который вызывает функцию."
Сергей М. (2008-10-21 10:58:00) [12]
> 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.
worldmen (2008-10-21 09:46:00) [13]> GrayFace ©
> GetActiveWindow возвращает окно от данного потока.
Создал тестовую форму с несколькими полями - Прога-1
Создал программу (Прога-2) с GetActiveWindow - а она почемуто эта функция возвращает имя окна только самой программы (Прога-2),когда она активна, а не активной Проги-1(даже когда она активна) - почему?
GrayFace (2008-10-20 23:28:00) [14]worldmen (20.10.08 12:12) [3]
1. Раз в компонент на форме осуществлялся ввод, то форма полюбому активна, тада:
GetActiveWindow возвращает окно от данного потока.
clickmaker (2008-10-20 13:12:00) [15]> имя класса окна - можно же узнать дочерние классы этого
> окна?
там нет понятия "дочерние классы"
класс окна - это не то, что класс в ООП
есть дочерние окна, я уже писал - EnumChildWindows()
Сергей М. (2008-10-20 13:03:00) [16]
> можно же узнать дочерние классы этого окна?
>
Нельзя.
Можно узнать лишь классы дочерних окон этого окна, если таковые вообще имеются.
Но какое отношение это имеет к " компонентчужого окна" ?
worldmen (2008-10-20 13:00:00) [17]Но если мы знаем имя класса окна - можно же узнать дочерние классы этого окна?
worldmen (2008-10-20 12:40:00) [18]Да, точно, не то.
Сергей М. (2008-10-20 12:26:00) [19]
> В ListBox1 будут выведены классы всех child окон
А вопрос твой звучал совсем иначе
> компонентчужого окна
"child окно" <> "компонент"
worldmen (2008-10-20 12:12:00) [20]Я вот кое-что нашел, буду пробовать:
1. Раз в компонент на форме осуществлялся ввод, то форма полюбому активна, тада:
Код:
var2. Получили заголовок окна... требуется получить все хендлы компонентов и их классы, сделаем цикл:
H: HWND;
Zagolovok:array[0..255] of Char;
...
begin
H:= GetActiveWindow // - узнаем текущее активное окно
GetWindowText(H, Zagolovok, SizeOf(Zagolovok)); //- считываем заголовок
Код:
В ListBox1 будут выведены классы всех child окон
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;