GetWindow

Тема в разделе "WASM.WIN32", создана пользователем Bobus, 2 апр 2005.

  1. Bobus

    Bobus New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2005
    Сообщения:
    9
    Народ! Как заставить Windows'а вернуть хэндл окна ЧУЖОЙ апликации? Все варианты GetWindow и GetFocus работают только внутри процесса... :dntknw:
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    FindWindow, FindWindowEs, EnumWindows работают с окнами чужих процессов.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    GetWindow может перебирать не только окна своего процесса, для этого есть флаги GW_HWNDFIRST, GW_HWNDNEXT и т.д. Перебираешь в цикле все окна и сравниваешь их с искомым. Т.е. сделать всё-таки можно. Но проще так, как сказал Quantum
     
  4. Bobus

    Bobus New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2005
    Сообщения:
    9
    не пашут. Тоже рассчитывал на них. А вообще, спасибо!
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Хм, что значит не пашут? Если бы не пахали, то не было бы таких флагов в природе. Наверное это у тебя не получилось ?
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Вот кусок кода, правда не на асме а на vb, но тем не менее. Рабочий. Складывает в листбокс заголовки всех окошек, запущенных в системе. Кстати, показывает значительно больше,чем таскменеждер.


    Код (Text):
    1. Sub GetTaskList()
    2.     Dim str As String
    3.     ListBox1.Clear
    4.     str = ""
    5.     'получение первого по Z-Order hWnd
    6.     'перечисление начинается со своего окна
    7.     CurrWnd = GetWindow(MyWindow.hwnd, GW_HWNDFIRST)
    8.     'перебираем в цикле все окна, пока очередной hWnd имеет значение не ноль
    9.     Do While CurrWnd <> 0
    10.         Length = GetWindowTextLength(CurrWnd)
    11.         ListItem = Space(Length + 1)
    12.         Length = GetWindowText(CurrWnd, ListItem, Length + 1)
    13.         If Length > 0 Then
    14.             If InStr(1, str, Trim(ListItem)) Then GoTo lbl_1
    15.                 ListBox1.AddItem ListItem
    16.                 str = str & ListItem
    17.         End If
    18.         'передаём последний найденный hWnd(CurrWnd) и флаг GW_HWNDNEXT
    19. lbl_1:  CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)
    20.     Loop
    21. End Sub
     
  7. Bobus

    Bobus New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2005
    Сообщения:
    9
    - это точно. Жалко только что я расстроился, все снес и сказать точно как было не могу. Ладно, буду пробовать заново.
     
  8. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia




    Наверное, потому что TaskManager и не должен все окошки показывать, да? :)



    Сравивай результаты своей программки со Spy++ лучше.
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    flankerx

    Видимо менеджеру запретили, вот и не показывает :)



    Bobus

    Тут в аттаче GetWindow. Хотя EnumWindows наверное правильней.

    [​IMG] _1730398896__GetWindow.zip