【发布时间】:2011-07-23 09:00:16
【问题描述】:
使用以下代码
[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) 之类的随机句柄成功并返回无值。
谁能解释一下这种行为?
【问题讨论】:
-
部分 Windows 源代码在几年前被泄露。如果你幸运的话,你可能会找到一个有它的副本的网站。假设它是泄漏的一部分,我想在大约 5000 万行代码中找到它需要付出一些努力。让我们知道您发现了什么。
-
围绕计算我有很多事情要做。我可以向你保证,那不是其中之一。大声笑
-
你确定这不是一个真正的句柄吗?此外,
123456甚至可以是一个真正的句柄值,也许 API 会直接忽略它,如果认为它无效。