【问题标题】:How can I tell if a given hWnd is still valid?如何判断给定的 hWnd 是否仍然有效?
【发布时间】:2011-02-13 21:40:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# winforms handle hwnd


    【解决方案1】:

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

    来自 msdn:

    返回值

    布尔

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

    如果窗口句柄不能识别 现有窗口,返回值 为零。备注

    线程不应该使用 IsWindow 它没有创建的窗口,因为 之后窗户可能会被破坏 这个函数被调用了。进一步, 因为窗把手被回收 手柄甚至可以指向 不同的窗口。

    顺便说一下,由于您使用的是 .NET,因此您必须执行以下操作:

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

    【讨论】:

    • 完美,正是我想要的。感谢您的帮助!
    • 注意一点,DllImport 属性位于 System.Runtime.InteropServices 命名空间中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多