Ich möchte wissen, wie man mit C # den Fenstertitel des aktuell aktiven Fensters (dh des Fensters mit Fokus) abruft.
Ich möchte wissen, wie man mit C # den Fenstertitel des aktuell aktiven Fensters (dh des Fensters mit Fokus) abruft.
Antworten:
Ein Beispiel dafür, wie Sie dies mit vollständigem Quellcode tun können, finden Sie hier:
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;
}
Bearbeitet mit @ Doug McClean Kommentaren für eine bessere Korrektheit.
using System.Runtime.InteropServices;
und wo die DLL-Import- und statischen externen Zeilen abgelegt werden sollen. Einfügen in die Klasse
Wenn Sie über WPF gesprochen haben, verwenden Sie:
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
Schleife vorbei Application.Current.Windows[]
und finde den mit IsActive == true
.
Verwenden Sie die Windows-API. Rufen Sie an GetForegroundWindow()
.
GetForegroundWindow()
gibt Ihnen ein Handle (benannt hWnd
) für das aktive Fenster.
Dokumentation: GetForegroundWindow-Funktion | Microsoft Docs
Basierend auf der GetForegroundWindow-Funktion | 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;
}
Es unterstützt UTF8-Zeichen.
Wenn es passiert, dass Sie die brauchen aktuelle aktive Formular aus Ihrer MDI-Anwendung: (MDI-Multi Document Interface).
Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
Sie können Prozessklasse verwenden, es ist sehr einfach. Verwenden Sie diesen Namespace
using System.Diagnostics;
Wenn Sie eine Schaltfläche erstellen möchten, um ein aktives Fenster zu erhalten.
private void button1_Click(object sender, EventArgs e)
{
Process currentp = Process.GetCurrentProcess();
TextBox1.Text = currentp.MainWindowTitle; //this textbox will be filled with active window.
}