Mi piacerebbe sapere come afferrare il titolo della finestra della finestra attiva corrente (cioè quella che ha il focus) usando C #.
Mi piacerebbe sapere come afferrare il titolo della finestra della finestra attiva corrente (cioè quella che ha il focus) usando C #.
Risposte:
Guarda un esempio su come puoi farlo con il codice sorgente completo qui:
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;
}
Modificato con i commenti di @Doug McClean per una migliore correttezza.
using System.Runtime.InteropServices;
e dove mettere l'importazione della dll e le righe esterne statiche. incollandolo all'interno della classe
Se stavi parlando di WPF, usa:
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
Fai un giro Application.Current.Windows[]
e trova quello con IsActive == true
.
Usa l'API di Windows. Chiama GetForegroundWindow()
.
GetForegroundWindow()
ti darà un handle (denominato hWnd
) per la finestra attiva.
Documentazione: funzione GetForegroundWindow | Microsoft Docs
Basato sulla funzione GetForegroundWindow | 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;
}
Supporta i caratteri UTF8.
Se succede che hai bisogno del modulo attivo corrente dalla tua applicazione MDI : (MDI- Multi Document Interface).
Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
puoi usare la classe di processo è molto semplice. usa questo spazio dei nomi
using System.Diagnostics;
se vuoi creare un pulsante per attivare la finestra.
private void button1_Click(object sender, EventArgs e)
{
Process currentp = Process.GetCurrentProcess();
TextBox1.Text = currentp.MainWindowTitle; //this textbox will be filled with active window.
}