Bagaimana cara mendapatkan judul jendela aktif saat ini menggunakan c #?


109

Saya ingin tahu bagaimana cara mengambil judul Jendela dari jendela yang sedang aktif (yaitu yang memiliki fokus) menggunakan C #.


2
Apakah Anda mencoba menentukan jendela mana dalam aplikasi Anda yang memiliki fokus atau jendela aplikasi mana yang memiliki fokus?
— Peder Rice

ini relevan stackoverflow.com/questions/2423234/… jadi jika Anda ingin mengklik tombol untuk melakukannya, sebaiknya pastikan formulir Anda tidak fokus.
— barlop

Jawaban:


165

Lihat contoh bagaimana Anda dapat melakukan ini dengan kode sumber lengkap di sini:

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

Diedit dengan komentar @Doug McClean untuk kebenaran yang lebih baik.


7
Jangan lupa menjadi warga negara yang baik. blogs.msdn.com/oldnewthing/archive/2007/07/27/4072156.aspx dan blogs.msdn.com/oldnewthing/archive/2008/10/06/8969399.aspx memiliki info yang relevan.
— Greg D

3
catatan newb, untuk menjalankannya, using System.Runtime.InteropServices; dan kembali ke mana harus meletakkan impor dll dan garis eksternal statis. menempelkannya di dalam kelas
— barlop

1
@smink Bagaimana cara mendapatkan jendela latar depan yang aktif untuk pengguna tertentu (katakanlah proses berjalan sebagai layanan).
— tchelidze

Situs yang Anda tautkan tidak tersedia. Ini (mungkin) arsip webnya: web.archive.org/web/20150814043810/http://www.csharphelp.com/…
— Piotrek

2
Selain itu, saya ingin aplikasi saya diberi tahu setiap kali jendela latar depan berubah. Apakah ada acara untuk itu?
— Piotrek

18

Jika Anda berbicara tentang WPF, gunakan:

 Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);

Jika seluruh aplikasi tidak aktif (program lain memiliki fokus), maka tidak ada jendela yang akan mengatur IsActive ke true.
— Todd

Sebenarnya itu bisa salah, dalam kasus saya, saya mencoba mengakses array Window pada utas non-UI. Namun, lihat juga ini jika saya masih benar: social.msdn.microsoft.com/Forums/vstudio/en-US/…
— Todd

4

Ulangi Application.Current.Windows[]dan temukan yang dengan IsActive == true.


11
Bukankah ini hanya berfungsi untuk jendela di aplikasi .Net saat ini? Saya rasa d4nt ingin mendapatkan judul dari jendela aktif saat ini di desktop, tidak peduli aplikasi apa yang dimilikinya.
— Quagmire


2

Berdasarkan fungsi 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;
}

Ini mendukung karakter UTF8.


0

Jika ternyata Anda memerlukan Formulir Aktif Saat Ini dari aplikasi MDI Anda : (MDI- Multi Document Interface).

Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;

-3

Anda dapat menggunakan kelas proses dengan sangat mudah. gunakan namespace ini

using System.Diagnostics;

jika Anda ingin membuat tombol untuk mendapatkan jendela aktif.

private void button1_Click(object sender, EventArgs e)
    {            
       Process currentp = Process.GetCurrentProcess();
       TextBox1.Text = currentp.MainWindowTitle;  //this textbox will be filled with active window.
    }

2
Ini salah. Ini akan menunjukkan judul program Anda bukan dari jendela aktif saat ini.
— isHuman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.