【发布时间】:2011-11-10 15:42:12
【问题描述】:
由 Windows 管理的 2 个窗口是否可以具有相同的窗口句柄值?
考虑这两种情况:这两个窗口由同一个进程打开,以及这两个窗口由两个不同的进程打开。
【问题讨论】:
-
有趣,msdn 没有说明它是否是独一无二的,但出于功能的目的,我认为它们是
标签: c++ windows visual-c++ process window
由 Windows 管理的 2 个窗口是否可以具有相同的窗口句柄值?
考虑这两种情况:这两个窗口由同一个进程打开,以及这两个窗口由两个不同的进程打开。
【问题讨论】:
标签: c++ windows visual-c++ process window
在特定时间打开的每个窗口都有一个唯一的句柄。 但是,一旦关闭窗口,它们就可以重复使用。
【讨论】:
快速回答:不,如果它们在同一个桌面内是不可能的,窗口管理器发出的每个窗口句柄在整个窗口存在期间都是唯一的(在其桌面内),否则它无法唯一识别此类system 当前 window station 桌面上的窗口(MSDN 将其定义为“包含窗口、菜单和挂钩等用户界面对象的“逻辑显示表面”;它可以用来创建和管理窗口”)。
长答案:
这个问题在here讨论,指向this article。 HWNDs 似乎是桌面本地的,所以你可以有两个相同的HWNDs 指向两个不同的窗口,但它们必须在两个单独的桌面中,所以没有歧义(您传递给每个 user32 函数的 WM 句柄隐含地指向当前桌面,要转到另一个您必须使用 SetThreadDesktop 的桌面,如果您的线程拥有任何桌面包含的对象到当前桌面)。
另一方面,当一个窗口被销毁时,它的句柄可以被重用,但是窗口管理器 IIRC 采用了一些技术来避免立即重用一个句柄。
【讨论】: