我想知道如何使用 C # 获取当前活动窗口(即有焦点的窗口)的 Window 标题。
使用 WindowsAPI。调用 GetForegroundWindow()。
GetForegroundWindow()
GetForegroundWindow()将为活动窗口提供一个句柄(名为 hWnd)。
hWnd
Documentation: GetForegroundWindow function | Microsoft Docs
在这里可以看到如何使用完整源代码实现这一点的示例:
Http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/
[DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); private string GetActiveWindowTitle() { const int nChars = 256; StringBuilder Buff = new StringBuilder(nChars); IntPtr handle = GetForegroundWindow(); if (GetWindowText(handle, Buff, nChars) > 0) { return Buff.ToString(); } return null; }
与@Doug McClean 一起编辑 以获得更好的正确性。
循环 Application.Current.Windows[]并找到带有 IsActive == true的那个。
Application.Current.Windows[]
IsActive == true
如果你说的是 WPF,那么使用:
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
你可以使用过程类,这是非常容易的。 使用这个名称空间
using System.Diagnostics;
如果你想创建一个按钮来获得活动窗口。
private void button1_Click(object sender, EventArgs e) { Process currentp = Process.GetCurrentProcess(); TextBox1.Text = currentp.MainWindowTitle; //this textbox will be filled with active window. }
如果碰巧需要 < em > MDI 应用程序的当前活动表单 : (MDI-Multi Document Interface)。
Form activForm; activForm = Form.ActiveForm.ActiveMdiChild;
基于 GetForegroundWindow function | Microsoft Docs:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern int GetWindowTextLength(IntPtr hWnd); private string GetCaptionOfActiveWindow() { var strTitle = string.Empty; var handle = GetForegroundWindow(); // Obtain the length of the text var intLength = GetWindowTextLength(handle) + 1; var stringBuilder = new StringBuilder(intLength); if (GetWindowText(handle, stringBuilder, intLength) > 0) { strTitle = stringBuilder.ToString(); } return strTitle; }
它支持 UTF8字符。