Как получить все дескрипторы всех процессов только недавно открытого окна chrome, а не целых окон chrome?
Привет друзья,
Я создаю exe - файл для запуска при нажатии пользовательской клавиши, которая при запуске создает новое окно Chrome с вкладкой веб-сайта Google Translate, я хочу вывести только это окно на передний план и установить фокус на его текстовое поле, чтобы пользователь начал печатать.
Я также мог бы вместо этого искать открытое окно Chrome с одним только Google Translate в нем, поэтому я не создаю новое окно, а вывожу только это окно, а не все окна Chrome на передний план и фокусируюсь на его текстовом поле.
Что я уже пробовал:
static List<Process> l; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { ProcessStartInfo prs = new ProcessStartInfo("chrome.exe"); prs.Arguments = "http://translate.google.com" + " --new-window"; prs.WindowStyle = ProcessWindowStyle.Normal; List<Process> processesBeforeNewChrome = Process.GetProcessesByName("chrome").ToList(); Process.Start(prs); System.Threading.Thread.Sleep(100); List<Process> processesAfterLaunchingChrome = Process.GetProcessesByName("chrome").ToList(); l = new List<Process>(); for (int i = 0; i < processesAfterLaunchingChrome.Count; i++) { for (int k = 0; k < processesBeforeNewChrome.Count; k++) { if (processesAfterLaunchingChrome[i].Id == processesBeforeNewChrome[k].Id) { goto skip; } } l.Add(processesAfterLaunchingChrome[i]); skip:; } foreach (Process p in l) { ShowWindow(p.MainWindowHandle, SW_RESTORE); } foreach (Process p in l) { ShowWindow(p.MainWindowHandle, SW_MINIMIZE); } foreach (Process p in l) { ShowWindow(p.MainWindowHandle, SW_RESTORE); SetWindowPos(p.MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); BringWindowToTop(p.MainWindowHandle); SetForegroundWindow(p.MainWindowHandle); } foreach (Process p in l) { SetWindowPos(p.MainWindowHandle, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); SetWindowPos(p.MainWindowHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); } foreach (Process p in l) { ShowWindow(p.MainWindowHandle, SW_RESTORE); BringWindowToTop(p.MainWindowHandle); SetFocus(new HandleRef(null, p.MainWindowHandle)); } foreach (Process p in l) { SetForegroundWindow(p.MainWindowHandle); } gkh.HookedKeys.Add(Keys.Escape); gkh.KeyDown += Gkh_KeyDown; Application.Run(); } private static void Gkh_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { foreach (Process p in l) { try { ShowWindow(p.MainWindowHandle, SW_MINIMIZE); } catch { } } System.Diagnostics.Process.GetCurrentProcess().Kill(); } } static globalKeyboardHook gkh = new globalKeyboardHook();