为什么 GetWindowText 挂起“关闭”句柄而不是随机句柄

Max*_*ich 5 c# api winapi handle

使用以下代码

    [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();
    }
Run Code Online (Sandbox Code Playgroud)

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

传入随机句柄,例如new IntPtr(123456)成功并返回无值。

任何人都可以解释这种行为吗?

Sim*_*ier 4

请阅读此处对 GetWindowText 秘密的描述:GetWindowText 的秘密生活

我认为你不会得到更好的:-) 如果你真的想 100% 确定你不会挂起调用它,你需要在另一个你可以自己管理的线程上执行此操作(即:kill如果你需要)