如何判断给定的hWnd是否仍然有效?

问题描述:

我正在使用生成Internet Explorer实例的第三方类。这个类有一个属性hWnd,它返回进程的hWnd。如何判断给定的hWnd是否仍然有效?

后来,我可能想重用应用程序的实例,如果它仍然存在,所以我需要告诉我的助手类来附加它。在此之前,我想知道给定的hWnd是否仍然有效,否则我会产生另一个实例。

如何在C#中执行此操作#& .NET 3.5?

如果它是一个窗口句柄,可以调用isWindow(hWnd);

从MSDN:

返回值

BOOL

如果窗口句柄标识 现有的窗口,返回值为 非零。

如果窗口句柄未标识 现有窗口,则返回值 为零。备注

线程不应该使用IsWindow的 窗口,它没有创建因为 窗口可能被破坏 后调用此函数。此外, ,因为窗口句柄回收 句柄甚至可以指向一个 不同的窗口。

顺便说一句,因为你是在.NET中你必须做一些事情,如:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool IsWindow(IntPtr hWnd); 
+0

完美,正是我一直在寻找。谢谢您的帮助! – 2010-04-29 16:38:29

+5

需要注意的一点是,DllImport属性位于System.Runtime.InteropServices命名空间中。 – 2010-04-29 16:56:24