微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET中的窗口句柄可以改变它的值吗?

在.NET进程的生命周期中,执行System.Windows.Forms.Form的句柄,可以说Application.Run(form)使用的主表单实际上改变了它的值,也就是说,如果使用不同的进程,例如IntPtr handle = User32.FindWindow(null,"Name") ,是否有一种情况下,该处理可能会失效.NET运行时?

编辑

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

在正在运行的程序中堆栈跟踪(在Windows中等同于pstack)

如何防止或检测“%APPNAME%停止工作”对话框?

是否可以使用extern和override修饰符指定一个函数

dynamic识别控件的容器(GroupBox等)

包含无法从Windows中看到的文件

是否可以在Windows 7和Visual Studio 2012中开发Windows Mobile应用程序

在C#中我的程序注销部分错误,我可以得到一些帮助吗?

在Windows窗体中认button命中(试图find最好的解决scheme)

为什么winform面板仅在鼠标hover或鼠标点击时更新?

延迟窗口注销(XP,Vista和7)

窗口句柄保证是有效的,只要窗口存在就不会被重用。 它像自然界中的索引一样,在全局上是有效的,一般而言,它的行为更像是一个全局ID,而不像内核句柄(它只在一个进程和指针中有效)。 一旦窗口关闭,窗口句柄可能被重用,现在指向另一个窗口。

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

Control.RecreatingHandle属性的存在似乎是一个强有力的指示,实际上底层窗口的生命周期可能比.net控件的生命周期短。 这可能会导致在其生命周期中更改Form的句柄。

Control.RecreateHandle

无论何时需要新控件的参数,都会调用RecreateHandle方法,但使用从UpdateStyles到CreateParams的调用是不够的。 此方法调用DestroyHandle和CreateHandle并将RecreatingHandle设置为true。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.recreatehandle.aspx

从这个方法的描述我得出结论,窗口句柄确实可以在表单的生命周期中改变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐