EnumThreadWindows и рабочий стол

Тема в разделе "WASM.WIN32", создана пользователем MegaDwarf, 23 ноя 2006.

  1. MegaDwarf

    MegaDwarf New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2006
    Сообщения:
    11
    MS Spy++ говорит, что окошко Desktop (#32769) относится к процессу csrss.exe и у этого процесса к такому-то потоку. Но если ID потока отдать в функцию EnumThreadWindows, то он не найдет ни одного окошка. Не хватает каких-то прав? (каких?) Или дело в чем-то другом?
     
  2. zxm

    zxm New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2006
    Сообщения:
    71
    окна скорее всего на другом десктопе. В виндоус для кажого сервиса создаётся своя виндоуссташон. И для того чтобы работать с окнами нужно быть в том же декстопе. Читать в мсдн CreateDesktop.
     
  3. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    zxm
    Таки в шоке от сказаного :)

    MegaDwarf
    EnumThreadWindows, как и EnumWindows и EnumChildWindows, перебирает окна.
    Окна из иерархии, на вершине которой - (Get)DesktopWindow, т.е. "окошко Desktop (#32769)".
    В список своих подчиненных DesktopWindow, очевидно, не включен.
    Вот ведь и EnumWindows "не замечает" #32769.

    Кое-что еще об Enum: http://www.wasm.ru/forum/viewtopic.php?id=14302&p=1 (пост #24).

    А чтобы все-таки увидеть окна одного с #32769 потока -
    вот утилитка ParentOwner (http://www.wasm.ru/forum/attachment.php?item=250):
    запускаете, жмете кнопку "All", выбираете в комбобоксе "#32769", жмете "Pid" или'Tid" -
    и в комбобоксе остаются окна только этого потока.

    О ParentOwner: http://www.wasm.ru/forum/viewtopic.php?id=15560
     
  4. zxm

    zxm New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2006
    Сообщения:
    71
    А вы шо не пьёте? ))
     
  5. MegaDwarf

    MegaDwarf New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2006
    Сообщения:
    11
    Ну ладно, всем спасибо :) Буду копать. Просто я надеялся, что типо надо просто заинейблить какую-нибудь привилегию и усё. (или чего-нибудь в этом роде) Но видно всё не так просто...

    kero
    Т.е. хотите сказать, что EnumThreadWindows типа перебирает все окна, пихает их (например) в GetWindowThreadProcessId, сравнивает полученный TID с тем который я ему скормил и т.д.? (так я и сам могу :) ) Я думал, что он это делает как-нибудь без перебора всех окон...