gpt4 book ai didi

.net - .NET 中的窗口句柄可以更改它的值吗?

转载 作者:可可西里 更新时间:2023-11-01 12:47:33 24 4
gpt4 key购买 nike

在 .NET 进程的生命周期中,System.Windows.Forms.Form 的句柄,假设是 Application.Run(form) 中使用的主窗体code> 实际上改变了它的值,即如果在不同的进程中使用句柄的值,例如IntPtr handle = User32.FindWindow(null, "Name"),是否存在 .NET 运行时可能使该句柄无效的情况?

编辑

我需要知道句柄,因为我想为 IPC 使用 SendMessageWM_COPYDATA 等。

最佳答案

只要窗口存在,窗口句柄就保证有效并且不会被重复使用。它本质上是索引,全局有效并且通常表现得更像全局 ID 而不是内核句柄(仅在一个进程和指针中有效)。窗口关闭后,窗口句柄可能会被重用,现在指向另一个窗口。

但不明显的是 Form 和底层窗口 window 的生命周期是否相同。我依稀记得在 Delphi 的 VCL(它是 Windows.Forms 的精神前身)中,某些属性更改会在后台重新创建窗口。

Control.RecreatingHandle 的存在属性似乎强烈表明底层窗口的生命周期确实可以短于 .net 控件的生命周期。这可能会导致 Form 的句柄在其生命周期内发生变化。

Control.RecreateHandle
The RecreateHandle method is called whenever parameters are needed for a new control, but using a call from UpdateStyles to CreateParams is insufficient. This method also calls DestroyHandle and CreateHandle and sets RecreatingHandle to true.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.recreatehandle.aspx

根据这个方法的描述,我得出结论,窗口句柄确实可以在窗体的生命周期内改变。

关于.net - .NET 中的窗口句柄可以更改它的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com