为什么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:永不返回)。 (这对我来说很奇怪,因为我原以为它会以零值返回)
传入随机句柄(如new IntPtr(123456)
成功并返回无值。
有人可以解释一下这种行为吗?
在这里阅读GetWindowText undercovers的描述:GetWindowText 的秘密生活 。
我不认为你会得到一个更好的:-)如果你真的想100%确定你不会挂断它,你需要在另一个你自己管理的线程上做(即:杀如果你需要)
以任何有意义的方式回答这个问题都是不可能的。 Win32接口不保证将无效窗口句柄传递给例程时会发生什么。 这样做是错误的。 请不要。
说了这么多,即使使用有效的窗口句柄,将title.Capacity + 1
传递给GetWindowText
也是一个错误。