web-dev-qa-db-ja.com

C#を使用して現在のアクティブウィンドウのタイトルを取得するにはどうすればよいですか?

C#を使用して、現在アクティブなウィンドウ(フォーカスがあるウィンドウ)のウィンドウタイトルを取得する方法を知りたいです。

106
d4nt

完全なソースコードを使用してこれを行う方法の例については、こちらをご覧ください。

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のコメントで編集.

160
Jorge Ferreira

WPFについて話している場合は、次を使用します。

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

Windows APIを使用します。 GetForegroundWindow()を呼び出します。

GetForegroundWindow()は、アクティブウィンドウへのハンドル(hWndという名前)を提供します。

ドキュメント: GetForegroundWindow関数| Microsoft Docs

4
ine

ループApplication.Current.Windows[]IsActive == true

4
Azher

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

UTF8文字をサポートしています。

2
Mohammad Dayyan

必要な場合は、MDI application:( MDI-マルチドキュメントインターフェイス)。

Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
0
Arthur Zennig