获取焦点窗口名称

时间:2014-05-27 15:28:20

标签: c# window focus

我正在尝试获取当前焦点窗口的名称。感谢我的研究,我有这段代码:

[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()始终返回空值或负值。

1 个答案:

答案 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;
}