获取聚焦的窗口名称

本文关键字:窗口 聚焦 获取 | 更新日期: 2023-09-27 18:05:27

我试图获得当前聚焦窗口的名称。由于我的研究,我有这个代码:

[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()总是返回null或负值

获取聚焦的窗口名称

你需要得到文本的长度

[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;
}