FindWindow收到的句柄是否需要发布?

时间:2017-01-25 08:43:20

标签: windows winapi hwnd

我写的应用程序正在使用虚拟键盘。要显示,隐藏,调整大小或移动虚拟键盘,我首先需要通过调用FindWindow函数来获取它,然后通过PostMessage向它发送一些消息。

由于我没有使用winapi的经验,我的问题是我是否需要以某种方式释放此句柄,或者我可以在完成后忘记它?

虚拟键盘是一个独立的过程,其使用寿命比我的应用程序更长。

1 个答案:

答案 0 :(得分:4)

您无需最终确定此句柄。它由创建窗口的进程所拥有,该窗口也负责销毁它。

与内核句柄(文件句柄,事件句柄,互斥锁句柄等)不同,窗口句柄不是引用计数。你调用FindWindow,然后做窗口句柄需要做的事情。

但是请注意,由于系统不跟踪对窗口句柄的引用,如果窗口被销毁,那么您可以保留一个被破坏窗口的句柄。如果系统重新使用该句柄,那么您现在可以使用不同的窗口。

如果可能的话,当您以这种方式协调多个进程之间的用户界面时,您还应该传达窗口销毁事件,以避免一个进程留下过时的句柄。