Получить сфокусированное имя окна

1

Я пытаюсь получить имя текущего сфокусированного окна. Благодаря моим исследованиям, у меня есть этот код:

[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() всегда возвращает нулевое или отрицательное значение.

Теги:
focus
window

1 ответ

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, (IntPtr)builder.Capacity);

    return builder.ToString() == name;
}
  • 0
    Спасибо ! Оно работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню