MS Spy++ говорит, что окошко Desktop (#32769) относится к процессу csrss.exe и у этого процесса к такому-то потоку. Но если ID потока отдать в функцию EnumThreadWindows, то он не найдет ни одного окошка. Не хватает каких-то прав? (каких?) Или дело в чем-то другом?
окна скорее всего на другом десктопе. В виндоус для кажого сервиса создаётся своя виндоуссташон. И для того чтобы работать с окнами нужно быть в том же декстопе. Читать в мсдн CreateDesktop.
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
Ну ладно, всем спасибо Буду копать. Просто я надеялся, что типо надо просто заинейблить какую-нибудь привилегию и усё. (или чего-нибудь в этом роде) Но видно всё не так просто... kero Т.е. хотите сказать, что EnumThreadWindows типа перебирает все окна, пихает их (например) в GetWindowThreadProcessId, сравнивает полученный TID с тем который я ему скормил и т.д.? (так я и сам могу ) Я думал, что он это делает как-нибудь без перебора всех окон...