C#を使用して、現在アクティブなウィンドウ(フォーカスがあるウィンドウ)のウィンドウタイトルを取得する方法を知りたいです。
完全なソースコードを使用してこれを行う方法の例については、こちらをご覧ください。
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のコメントで編集.
WPFについて話している場合は、次を使用します。
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
Windows APIを使用します。 GetForegroundWindow()
を呼び出します。
GetForegroundWindow()
は、アクティブウィンドウへのハンドル(hWnd
という名前)を提供します。
ループApplication.Current.Windows[]
とIsActive == true
。
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文字をサポートしています。
必要な場合は、MDI application:( MDI-マルチドキュメントインターフェイス)。
Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;