为什么有些窗口无法枚举?

时间:2018-11-15 22:02:28

标签: winapi

我正在对Window关系进行一些测试,发现有些窗口无法通过EnumWindows()EnumChildWindows()函数进行访问。

我发现一些通过GetParent()到达关系树的根节点到根节点(nullptr),而另一个发现是通过窥视正在发送的消息。有没有办法找到这些手柄?如果是这样,怎么办?如果不是,是出于安全目的这样做吗?还是有问题?

编辑

我已经添加了一个代码仓库(包括我做过的VS解决方案)here,以防有人感兴趣。当我未经修改地运行它时,它会给我一个not enumable类名称为Message的HWND。我不知道为什么消息窗口中未包含该信息。在allocate_nodes(false)函数中将行allocate_nodes(true)更改为main(),将强制查找使用已发布接口找不到的其他HWND。我不确定它们是真实的还是幻象,尽管它确实捕获了not enumable HWND。

一些示例输出:

handle #!window_status!got expected!visible!tree!class name!window title
         1!       special!correct!0!"00000000"!!
         2!       special!correct!1!" 00010010"!#32769!
         3!     top level!correct!0!"  00010290"!ComboLBox!
         4!     top level!correct!0!"  000102FE"!ComboLBox!
         5!     top level!correct!0!"  000404A0"!ComboLBox!
         6!     top level!correct!0!"  000404A4"!ComboLBox!
         7!     top level!correct!0!"  00040822"!ComboLBox!
         8!     top level!correct!0!"  00071DF8"!ComboLBox!
         9!     top level!correct!0!"  000A0FF6"!ComboLBox!
        10!     top level!correct!0!"  001A1CD0"!ComboLBox!
        11!     top level!correct!0!"  001C1626"!ComboLBox!
        12!     top level!correct!0!"  001E1C30"!ComboLBox!
        13!     top level!correct!0!"  001F17FC"!ComboLBox!
        14!     top level!correct!0!"  002B19E8"!ComboLBox!
        15!     top level!correct!0!"  003517D2"!ComboLBox!
        16!     top level!correct!0!"  00351906"!ComboLBox!
        17!     top level!correct!0!"  00351AE4"!ComboLBox!
        18!     top level!correct!0!"  003714D2"!ComboLBox!
        19!     top level!correct!0!"  003916E2"!ComboLBox!
        20!     top level!correct!0!"  00421248"!ComboLBox!
        21!     top level!correct!0!"  005B0472"!ComboLBox!
        22!     top level!correct!0!"  006517CA"!ComboLBox!
        23!     top level!correct!0!"  00680E16"!ComboLBox!
        24!     top level!correct!0!"  006F11D0"!ComboLBox!
        25!     top level!correct!0!"  00751B08"!ComboLBox!
        26!     top level!correct!0!"  007A165E"!ComboLBox!
        27!     top level!correct!0!"  00840C0E"!ComboLBox!
        28!     top level!correct!0!"  009816AC"!ComboLBox!
        29!     top level!correct!0!"  009E0EE2"!ComboLBox!
        30!     top level!correct!0!"  00A01AAC"!ComboLBox!
        31!     top level!correct!0!"  00B1134A"!ComboLBox!
        32!     top level!correct!0!"  00BA10F8"!ComboLBox!
        33!     top level!correct!0!"  00C00994"!ComboLBox!
        34!     top level!correct!0!"  00E014C0"!ComboLBox!
        35!     top level!correct!0!"  00EA0452"!ComboLBox!
        36!     top level!correct!0!"  00F911E2"!ComboLBox!
        37!     top level!correct!0!"  014913EC"!ComboLBox!
        38!     top level!correct!0!"  015804D0"!ComboLBox!
        39!     top level!correct!0!"  018E0FF0"!ComboLBox!
        40!     top level!correct!0!"  01D60FA4"!ComboLBox!
        41!     top level!correct!0!"  021E087C"!ComboLBox!
        42!  not enumable!correct!0!" 00010012"!Message!
        43!       message!correct!0!"  0015184E"!ScriptedMessageWindow!
        44!       message!correct!0!"  005C0C54"!AccessibleNotificationsWindow!
        45!       message!correct!0!"  00A6043A"!ScriptedMessageWindow!
        46!       message!correct!0!"  00E80DEE"!ScriptedMessageWindow!
        47!       message!correct!0!" 00010014"!#32774!
        48!     top level!correct!0!" 00010048"!Dwm!DWM Notification Window
        49!       message!correct!0!" 00010086"!#43!MCI command handling window
        50!       message!correct!0!" 0001008A"!OleMainThreadWndClass!OleMainThreadWndName
        51!     top level!correct!0!" 0001008C"!DDEMLMom!
        52!     top level!correct!0!" 00010090"!DDEMLEvent!
        53!       message!correct!0!" 00010094"!OleMainThreadWndClass!OleMainThreadWndName
        54!       message!correct!0!" 00010098"!WorkerW!AppResolver_NotifyWnd
        55!       message!correct!0!" 000100A8"!OleMainThreadWndClass!OleMainThreadWndName
        56!       message!correct!0!" 000100B0"!CicMarshalWndClass!CicMarshalWnd
        57!       message!correct!0!" 000100B2"!UserAdapterWindowClass!
        58!       message!correct!0!" 000100BC"!OleMainThreadWndClass!OleMainThreadWndName
        59!       message!correct!0!" 000100C0"!CicMarshalWndClass!CicMarshalWnd
        60!     top level!correct!0!" 000100CC"!PushNotificationsPowerManagement!Windows Push Notifications Platform
        61!     top level!correct!0!"  000100CE"!IME!Default IME
        62!       message!correct!0!" 000100D6"!UserAdapterWindowClass!
        63!       message!correct!0!" 000100DC"!UserAdapterWindowClass!
        64!     top level!correct!0!" 000100E2"!GDI+ Hook Window Class!G
        65!     top level!correct!0!"  000100E4"!IME!Default IME
        66!     top level!correct!0!" 000100E8"!#32770!The Event Manager Dashboard
        67!     top level!correct!0!"  000100EA"!IME!Default IME
        68!     top level!correct!0!"   00010102"!MSCTFIME UI!MSCTFIME UI
        69! not top level!correct!0!"  000100F0"!Button!OK
        70! not top level!correct!0!"  000100F2"!Static!Activity Information
        71! not top level!correct!0!"  000100F4"!Button!Cancel
        72! not top level!correct!0!"  000100F6"!ListBox!

默认字段分隔符为!,但可以在源文件的顶部进行更改。我想知道所有这些隐藏的ComboBox都在桌面之外吗?

0 个答案:

没有答案