我正在尝试获取当前焦点窗口的名称。感谢我的研究,我有这段代码:
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
private static bool IsFocused(string name)
{
StringBuilder buffer = new StringBuilder(256);
if (GetWindowText(GetForegroundWindow(), buffer, buffer.Length + 1) > 0)
{
if (buffer.ToString() == name)
{
return true;
}
}
return false;
}
我已经检查过,GetForegoundWindow()
返回的句柄是正确的。但GetWindowText()
始终返回空值或负值。
答案 0 :(得分:2)
您需要获取文本的长度
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
public static extern int GetWindowTextLength(IntPtr hWnd);
private static bool IsFocused(string name)
{
var handle = GetForegroundWindow();
var length = GetWindowTextLength(handle);
var builder = new StringBuilder(length + 1);
GetWindowText(handle, builder, builder.Capacity);
return builder.ToString() == name;
}