【问题标题】:Does a handle received by FindWindow need to be released?FindWindow 收到的句柄是否需要释放?
【发布时间】:2017-01-25 08:43:20
【问题描述】:

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

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

虚拟键盘是一个独立的进程,其生命周期比我的应用程序更长。

【问题讨论】:

    标签: windows winapi hwnd


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多