在.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] 举报,一经查实,本站将立刻删除。