7 ответов:
Смотрите пример о том, как вы можете сделать это с полным исходным кодом здесь:
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) для активного окна.
документация: http://msdn.microsoft.com/en-us/library/ms633505(против.85).аспн
если это случится, что вам нужно текущая активная форма из вашего приложения MDI: (интерфейс MDI - Multi Document).
Form activForm; activForm = Form.ActiveForm.ActiveMdiChild;
база на https://msdn.microsoft.com/en-us/library/ms633505 (VS. 85). aspx
[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.
вы можете использовать класс process это очень легко. используйте это пространство имен
using System.Diagnostics;Если вы хотите сделать кнопку, чтобы получить активное окно.
private void button1_Click(object sender, EventArgs e) { Process currentp = Process.GetCurrentProcess(); TextBox1.Text = currentp.MainWindowTitle; //this textbox will be filled with active window. }
Comments