23

我正在使用生成 Internet Explorer 实例的第三方类。此类有一个属性 hWnd,它返回进程的 hWnd。

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

如何在 C# 和 .NET 3.5 中做到这一点?

4

1 回答 1

38

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

来自 msdn:

返回值

布尔值

如果窗口句柄标识一个现有窗口,则返回值非零。

如果窗口句柄没有识别现有窗口,则返回值为零。评论

线程不应将 IsWindow 用于它没有创建的窗口,因为在调用此函数后窗口可能会被销毁。此外,由于窗口句柄被回收,句柄甚至可以指向不同的窗口。

顺便说一句,因为你在 .NET 中,所以你必须执行以下操作:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindow(IntPtr hWnd);
于 2010-04-29T16:26:26.990 回答