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

c# – 为什么GetWindowText会挂起一个“关闭”的句柄而不是一个随机句柄

使用以下代码

[DllImport("user32.dll",EntryPoint = "GetwindowText",ExactSpelling = false,CharSet = CharSet.Auto,SetLastError = true)]
    private static extern int GetwindowText(IntPtr hWnd,StringBuilder lpWindowText,int nMaxCount);

    public static String GetwindowText(IntPtr hWnd)
    {
        StringBuilder title = new StringBuilder(MAX_TITLE_LENGTH);            
        int titleLength = WinAPI.GetwindowText(hWnd,title,title.Capacity + 1);
        title.Length = titleLength;
        return title.ToString();
    }

如果将句柄传递给最近关闭的应用程序,GetwindowText将挂起(IE:永不返回). (这对我来说很奇怪,因为我原以为它会以零值返回)

传入随机句柄(如新的IntPtr(123456))成功并返回没有值.

有人可以解释一下这种行为吗?

解决方法

在这里阅读GetwindowText undercovers的描述: The secret life of GetWindowText.

我不认为你会得到更好的一个:-)如果你真的想100%确定你不会挂起来调用它,你需要在另一个你自己管理的线程上做(如果你需要的话就杀掉)

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

相关推荐