【问题标题】:Is it possible for 2 windows managed by Windows to have the same window handle value?Windows 管理的 2 个窗口是否有可能具有相同的窗口句柄值?
【发布时间】:2011-11-10 15:42:12
【问题描述】:

由 Windows 管理的 2 个窗口是否可以具有相同的窗口句柄值?

考虑这两种情况:这两个窗口由同一个进程打开,以及这两个窗口由两个不同的进程打开。

【问题讨论】:

  • 有趣,msdn 没有说明它是否是独一无二的,但出于功能的目的,我认为它们是

标签: c++ windows visual-c++ process window


【解决方案1】:

在特定时间打开的每个窗口都有一个唯一的句柄。 但是,一旦关闭窗口,它们就可以重复使用。

【讨论】:

    【解决方案2】:

    快速回答:不,如果它们在同一个桌面内是不可能的,窗口管理器发出的每个窗口句柄在整个窗口存在期间都是唯一的(在其桌面内),否则它无法唯一识别此类system 当前 window station 桌面上的窗口(MSDN 将其定义为“包含窗口、菜单和挂钩等用户界面对象的“逻辑显示表面”;它可以用来创建和管理窗口”)。


    长答案:

    这个问题在here讨论,指向this articleHWNDs 似乎是桌面本地的,所以你可以有两个相同的HWNDs 指向两个不同的窗口,但它们必须在两个单独的桌面中,所以没有歧义(您传递给每个 user32 函数的 WM 句柄隐含地指向当前桌面,要转到另一个您必须使用 SetThreadDesktop 的桌面,如果您的线程拥有任何桌面包含的对象到当前桌面)。

    另一方面,当一个窗口被销毁时,它的句柄可以被重用,但是窗口管理器 IIRC 采用了一些技术来避免立即重用一个句柄。

    【讨论】:

    • 据我所知,虚拟桌面上的句柄是独一无二的(例如,安全桌面上的 UAC 窗口永远不会在你的“真实”桌面上拥有资源管理器的句柄)
    • @0x5f3759df:从我读到 MSDN 的内容看来你是对的,我会修正我的答案。
    • 关于由 Windows 管理的桌面,EnumDesktopWindows 似乎会给出相同的 HWND,而 EnumWindows 会给出相同的 HWND?
    • 我不明白你的问题... :S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2021-08-21
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多