Конференция "WinAPI" » Вывести список компонент чужого окна. [D7, WinXP]
 
  • worldmen (20.10.08 11:32) [0]
    Вывести список компонент чужого окна - это можно сделать?
  • Сергей М. © (20.10.08 11:36) [1]
    что такое "компонент чужого окна" ?
  • clickmaker © (20.10.08 11:36) [2]
    у окна нет компонентов. Есть дочерние окна, но если приложение написано на дельфи, то некоторые компоненты (Label, к примеру) окнами не являются.
    EnumChildWindows()
  • worldmen (20.10.08 12:12) [3]
    Я вот кое-что нашел, буду пробовать:
    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 окон
  • Сергей М. © (20.10.08 12:26) [4]

    > В ListBox1 будут выведены классы всех child окон


    А вопрос твой звучал совсем иначе


    > компонент чужого окна


    "child окно" <> "компонент"
  • worldmen (20.10.08 12:40) [5]
    Да, точно, не то.
  • worldmen (20.10.08 13:00) [6]
    Но если мы знаем имя класса окна - можно же узнать дочерние классы этого окна?
  • Сергей М. © (20.10.08 13:03) [7]

    > можно же узнать дочерние классы этого окна?
    >


    Нельзя.
    Можно узнать лишь классы дочерних окон этого окна, если таковые вообще имеются.
    Но какое отношение это имеет к "компонент чужого окна" ?
  • clickmaker © (20.10.08 13:12) [8]
    > имя класса окна - можно же узнать дочерние классы этого
    > окна?

    там нет понятия "дочерние классы"
    класс окна - это не то, что класс в ООП
    есть дочерние окна, я уже писал - EnumChildWindows()
  • GrayFace © (20.10.08 23:28) [9]
    worldmen   (20.10.08 12:12) [3]
    1. Раз в компонент на форме осуществлялся ввод, то форма полюбому активна, тада:

    GetActiveWindow возвращает окно от данного потока.
  • worldmen (21.10.08 09:46) [10]
    > GrayFace ©
    > GetActiveWindow возвращает окно от данного потока.
    Создал тестовую форму с несколькими полями - Прога-1
    Создал программу (Прога-2) с GetActiveWindow - а она почемуто эта функция возвращает имя окна только самой программы (Прога-2),когда она активна, а не активной Проги-1(даже когда она активна) - почему?
  • Сергей М. © (21.10.08 10:58) [11]

    > 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 (23.10.08 10:23) [12]
    Т.е. возвращает то, чем было вызвана функция?
    Так мне перевел промт:
    "Функция GetActiveWindow восстанавливает маркер окна к активному окну, связанному с потоком, который вызывает функцию."
  • clickmaker © (23.10.08 10:35) [13]
    > восстанавливает маркер окна к активному окну

    возвращает дескриптор (описатель) активного окна
    Промпту двойка
  • brother © (23.10.08 10:37) [14]
    > Промпту двойка

    он никогда не отличался хорошим переводом
  • Сергей М. © (23.10.08 10:47) [15]

    > worldmen   (23.10.08 10:23) [12]


    Каждое существующее в системе окно принадлежит конкретному создавшему его потоку.

    Если в потоке T1 были созданы окна W1 и W2, а в потоке T2 - W3 и W4, и в дан.момент времени активно, например, окно W3, то ф-ция GetActiveWindow, будучи вызыванная в потоке T1 вернет 0 (потому что текущее активное окно НЕ принадлежит потоку T1), в то время как та же ф-ция, вызыванная в потоке T2, вернет хэндл окна W3.
  • worldmen (23.10.08 11:37) [16]
    Спасибо, даже не знал такого. А можно переходить в другие потоки?
    --------------------
    Я нашел то что искал здесь http://forum.codeby.net/topic3765.html
  • Сергей М. © (23.10.08 11:53) [17]

    > можно переходить в другие потоки?


    Что значит "переходить" ?


    > нашел то что искал здесь


    Там нет ни слова про "список компонент чужого окна".
  • Vayrus (23.10.08 14:44) [18]
    Удалено модератором
    Примечание: Ненужно так делать.
  • Сергей М. © (23.10.08 14:53) [19]

    > Vayrus   (23.10.08 14:44) [18]


    Это что, PR-акция ?)
 
Конференция "WinAPI" » Вывести список компонент чужого окна. [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]