FindWindow 收到的句柄是否需要释放?
Does a handle received by FindWindow need to be released?
我正在编写的应用程序正在使用虚拟键盘。要显示、隐藏、调整大小或移动虚拟键盘,我首先需要通过调用 FindWindow
函数来获取它的句柄,然后通过 PostMessage
.
向它发送一些消息
由于我没有使用 winapi 的经验,我的问题是我是否需要以某种方式释放这个句柄,或者我可以在完成后忘记它吗?
虚拟键盘是一个独立的进程,其生命周期比我的应用程序长。
您无需完成此句柄。它由创建 window 的进程所有,该进程还负责销毁它。
与内核句柄(文件句柄、事件句柄、互斥句柄等)不同,window 句柄不进行引用计数。你调用 FindWindow
,然后用 window 句柄做需要做的事情,然后就可以了。
但是请注意,由于系统不会跟踪对 window 句柄的引用,因此如果 window 被销毁,那么您可以保留被销毁的 [=20] 的句柄=].如果系统 re-uses 处理那么你现在有一个不同的句柄 window.
如果可能的话,当您以这种方式在多个进程之间协调用户界面时,您还应该传达 window 销毁事件以避免一个进程持有陈旧的句柄。
我正在编写的应用程序正在使用虚拟键盘。要显示、隐藏、调整大小或移动虚拟键盘,我首先需要通过调用 FindWindow
函数来获取它的句柄,然后通过 PostMessage
.
由于我没有使用 winapi 的经验,我的问题是我是否需要以某种方式释放这个句柄,或者我可以在完成后忘记它吗?
虚拟键盘是一个独立的进程,其生命周期比我的应用程序长。
您无需完成此句柄。它由创建 window 的进程所有,该进程还负责销毁它。
与内核句柄(文件句柄、事件句柄、互斥句柄等)不同,window 句柄不进行引用计数。你调用 FindWindow
,然后用 window 句柄做需要做的事情,然后就可以了。
但是请注意,由于系统不会跟踪对 window 句柄的引用,因此如果 window 被销毁,那么您可以保留被销毁的 [=20] 的句柄=].如果系统 re-uses 处理那么你现在有一个不同的句柄 window.
如果可能的话,当您以这种方式在多个进程之间协调用户界面时,您还应该传达 window 销毁事件以避免一个进程持有陈旧的句柄。