Я пытаюсь получить имя текущего сфокусированного окна. Благодаря моим исследованиям, у меня есть этот код:
[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()
всегда возвращает нулевое или отрицательное значение.
Вы должны получить длину текста
[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, (IntPtr)builder.Capacity);
return builder.ToString() == name;
}