Как получить заголовки всех открытых окон (включая окна, такие как вкладки в Internet Explorer)?получить заголовки всех открытых окон
ответ
Что-то вроде этого:
using System.Diagnostics;
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
if (!String.IsNullOrEmpty(process.MainWindowTitle))
{
Console.WriteLine("Process: {0} ID: {1} Window title: {2}", process.ProcessName, process.Id, process.MainWindowTitle);
}
}
вы должны использовать EnumWindow API.
есть много примеров о том, как использовать его из C#, я нашел кое-что здесь:
Не могу понять это. Можете ли вы дать мне пример, plesae? –
Ответы только на связь - это не ответы. – zzzzBov
http://pinvoke.net/default.aspx/user32.EnumDesktopWindows
Там есть пример использования user.dll-х EnumWindow в C# для отображения всех открытых окон.
ссылка не работает! –
http://pinvoke.net/default.aspx/user32.EnumDesktopWindows – 62071072SP
Исходя из предыдущего ответа, которые дают мне некоторые ошибки,, наконец, я использую этот код с GetOpenedWindows
функции:
public class InfoWindow
{
public IntPtr Handle = IntPtr.Zero;
public FileInfo File = new FileInfo(Application.ExecutablePath);
public string Title = Application.ProductName;
public override string ToString() {
return File.Name + "\t>\t" + Title;
}
}//CLASS
/// <summary>Contains functionality to get info on the open windows.</summary>
public static class RuningWindows
{
internal static event EventHandler WindowActivatedChanged;
internal static Timer TimerWatcher = new Timer();
internal static InfoWindow WindowActive = new InfoWindow();
internal static void DoStartWatcher() {
TimerWatcher.Interval = 500;
TimerWatcher.Tick += TimerWatcher_Tick;
TimerWatcher.Start();
}
/// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
/// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
public static IDictionary<IntPtr , InfoWindow> GetOpenedWindows()
{
IntPtr shellWindow = GetShellWindow();
Dictionary<IntPtr , InfoWindow> windows = new Dictionary<IntPtr , InfoWindow>();
EnumWindows(new EnumWindowsProc(delegate(IntPtr hWnd , int lParam) {
if (hWnd == shellWindow) return true;
if (!IsWindowVisible(hWnd)) return true;
int length = GetWindowTextLength(hWnd);
if (length == 0) return true;
StringBuilder builder = new StringBuilder(length);
GetWindowText(hWnd , builder , length + 1);
var info = new InfoWindow();
info.Handle = hWnd;
info.File = new FileInfo(GetProcessPath(hWnd));
info.Title = builder.ToString();
windows[hWnd] = info;
return true;
}) , 0);
return windows;
}
private delegate bool EnumWindowsProc(IntPtr hWnd , int lParam);
public static string GetProcessPath(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd , out pid);
if (hwnd != IntPtr.Zero) {
if (pid != 0) {
var process = Process.GetProcessById((int) pid);
if (process != null) {
return process.MainModule.FileName.ToString();
}
}
}
return "";
}
[DllImport("USER32.DLL")]
private static extern bool EnumWindows(EnumWindowsProc enumFunc , int lParam);
[DllImport("USER32.DLL")]
private static extern int GetWindowText(IntPtr hWnd , StringBuilder lpString , int nMaxCount);
[DllImport("USER32.DLL")]
private static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("USER32.DLL")]
private static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("USER32.DLL")]
private static extern IntPtr GetShellWindow();
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
//WARN: Only for "Any CPU":
[DllImport("user32.dll" , CharSet = CharSet.Auto , SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr handle , out uint processId);
static void TimerWatcher_Tick(object sender , EventArgs e)
{
var windowActive = new InfoWindow();
windowActive.Handle = GetForegroundWindow();
string path = GetProcessPath(windowActive.Handle);
if (string.IsNullOrEmpty(path)) return;
windowActive.File = new FileInfo(path);
int length = GetWindowTextLength(windowActive.Handle);
if (length == 0) return;
StringBuilder builder = new StringBuilder(length);
GetWindowText(windowActive.Handle , builder , length + 1);
windowActive.Title = builder.ToString();
if (windowActive.ToString() != WindowActive.ToString()) {
//fire:
WindowActive = windowActive;
if (WindowActivatedChanged != null) WindowActivatedChanged(sender , e);
Console.WriteLine("Window: " + WindowActive.ToString());
}
}
}//CLASS
Внимание: Вы можете только compil/отлаживать под «Any CPU», чтобы получить доступ к 32bits Apps. ..
Функция Hera UpdateWindowsList_WindowMenu(), которую вы должны вызывать после выполнения любых операций над Tabs.Here windowToolStripMenuItem - это элемент меню, добавленный в меню Window в полосу меню.
public void UpdateWindowsList_WindowMenu()
{
//get all tab pages from tabControl1
TabControl.TabPageCollection tabcoll = tabControl1.TabPages;
//get windowToolStripMenuItem drop down menu items count
int n = windowToolStripMenuItem.DropDownItems.Count;
//remove all menu items from of windowToolStripMenuItem
for (int i = n - 1; i >=2; i--)
{
windowToolStripMenuItem.DropDownItems.RemoveAt(i);
}
//read each tabpage from tabcoll and add each tabpage text to windowToolStripMenuItem
foreach (TabPage tabpage in tabcoll)
{
//create Toolstripmenuitem
ToolStripMenuItem menuitem = new ToolStripMenuItem();
String s = tabpage.Text;
menuitem.Text = s;
if (tabControl1.SelectedTab == tabpage)
{
menuitem.Checked = true;
}
else
{
menuitem.Checked = false;
}
//add menuitem to windowToolStripMenuItem
windowToolStripMenuItem.DropDownItems.Add(menuitem);
//add click events to each added menuitem
menuitem.Click += new System.EventHandler(WindowListEvent_Click);
}
}
private void WindowListEvent_Click(object sender, EventArgs e)
{
//casting ToolStripMenuItem to ToolStripItem
ToolStripItem toolstripitem = (ToolStripItem)sender;
//create collection of tabs of tabContro1
//check every tab text is equal to clicked menuitem then select the tab
TabControl.TabPageCollection tabcoll = tabControl1.TabPages;
foreach (TabPage tb in tabcoll)
{
if (toolstripitem.Text == tb.Text)
{
tabControl1.SelectedTab = tb;
//call UpdateWindowsList_WindowMenu() to perform changes on menuitems
UpdateWindowsList_WindowMenu();
}
}
}
Вот код, который вы можете использовать, чтобы получить список всех открытых окон. Фактически, вы получаете словарь, в котором каждый элемент является KeyValuePair, где ключ является дескриптором (hWnd) окна, а значением является его название.
using HWND = IntPtr;
/// <summary>Contains functionality to get all the open windows.</summary>
public static class OpenWindowGetter
{
/// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
/// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
public static IDictionary<HWND, string> GetOpenWindows()
{
HWND shellWindow = GetShellWindow();
Dictionary<HWND, string> windows = new Dictionary<HWND, string>();
EnumWindows(delegate(HWND hWnd, int lParam)
{
if (hWnd == shellWindow) return true;
if (!IsWindowVisible(hWnd)) return true;
int length = GetWindowTextLength(hWnd);
if (length == 0) return true;
StringBuilder builder = new StringBuilder(length);
GetWindowText(hWnd, builder, length + 1);
windows[hWnd] = builder.ToString();
return true;
}, 0);
return windows;
}
private delegate bool EnumWindowsProc(HWND hWnd, int lParam);
[DllImport("USER32.DLL")]
private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);
[DllImport("USER32.DLL")]
private static extern int GetWindowText(HWND hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("USER32.DLL")]
private static extern int GetWindowTextLength(HWND hWnd);
[DllImport("USER32.DLL")]
private static extern bool IsWindowVisible(HWND hWnd);
[DllImport("USER32.DLL")]
private static extern IntPtr GetShellWindow();
}
А вот код, который использует его:
foreach(KeyValuePair<IntPtr, string> window in OpenWindowGetter.GetOpenWindows())
{
IntPtr handle = window.Key;
string title = window.Value;
Console.WriteLine("{0}: {1}", handle, title);
}
Пытался использовать этот код, пришлось изменить первую строку на 'using HWND = System.IntPtr ;, вместо этого –
- 1. Скриншот всех открытых окон
- 2. Получить PID всех открытых окон на MacOS
- 3. Javascript: Как получить список всех открытых окон
- 4. Минимизация всех открытых окон в C#
- 5. Получить список открытых всплывающих окон
- 6. Получить список открытых окон C#
- 7. Пакет экспорта всех открытых окон в Gimp
- 8. Получить список всех открытых окон из командной строки
- 9. Получить список всех открытых окон с использованием командного файла
- 10. Как получить список открытых окон с xserver
- 11. Как получить список открытых окон в Qt
- 12. Как получить QWidget из списка открытых окон
- 13. Получить список открытых окон в Python
- 14. Получить количество открытых окон приложения в linux
- 15. Как получить количество открытых окон в WPF
- 16. Отслеживание открытых окон
- 17. Список партий открытых окон
- 18. Подсчитайте количество открытых окон
- 19. Наличие открытых окон
- 20. Получите список всех открытых окон с помощью AutoIt
- 21. Закрытие всех открытых хромированных окон с использованием селена - python - osx
- 22. Отображение всех открытых окон на главной странице WPF
- 23. гр заголовки окон # Get процесс
- 24. Получить заголовки не-Java-окон на Java
- 25. Mac - Список открытых окон на терминале
- 26. Получить дескрипторы всех окон процесса
- 27. Как обрабатывать несколько открытых окон
- 28. получить отчет обо всех открытых окнах проводника
- 29. Страница NSIS со списком открытых окон браузера
- 30. Список всех открытых файлов
таким образом, он будет получить только главное окно каждого процесса, он попросил всех открытых окон в система. –
Он говорит: «больше похожи на имена всех открытых приложений». – CodeCaster
Давид Пирас прав, мне нужны все открытые окна. как вкладки в Intrarnt. Так или иначе? Еще раз спасибо! –