// Overrides the base class hook procedure... //[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) { if (msg == WM_INITDIALOG) { IntPtr mainWindow = GetAncestor(hWnd, GA_ROOT); if (!mainWindow.Equals(IntPtr.Zero)) { EditWindows = new List <ApiWindow>((new WindowsEnumerator()).GetChildWindows(mainWindow, "Edit")); } } else if (msg == WM_CTLCOLOREDIT) { if ((EditWindows == null)) { IntPtr mainWindow = GetAncestor(hWnd, GA_ROOT); if (!mainWindow.Equals(IntPtr.Zero)) { EditWindows = new List <ApiWindow>((new WindowsEnumerator()).GetChildWindows(mainWindow, "Edit")); } } if ((EditWindows != null) && EditWindows.Count == 6) { byte red = 0, green = 0, blue = 0; if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[3].hWnd), out red)) { if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[4].hWnd), out green)) { if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[5].hWnd), out blue)) { OnUpdateColor?.Invoke(Color.FromArgb(red, green, blue), EventArgs.Empty); } } } } } // Always call the base class hook procedure. return(base.HookProc(hWnd, msg, wParam, lParam)); }
/// <summary> /// Handles the logon dialog by filling in the username and password. /// </summary> /// <param name="window">The window.</param> /// <returns></returns> public override bool HandleDialog(Window window) { if (CanHandleDialog(window)) { // Find Handle of the "Frame" and then the combo username entry box inside the frame var systemCredentialsHwnd = GetSystemCredentialsHwnd(window); NativeMethods.SetActiveWindow(window.Hwnd); Thread.Sleep(50); NativeMethods.SetForegroundWindow(window.Hwnd); Thread.Sleep(50); var windowEnumarator = new WindowsEnumerator(); // Find input fields var edits = windowEnumarator.GetChildWindows(systemCredentialsHwnd, "Edit"); // Enter userName var hwnd = new Hwnd(edits[0].Hwnd); hwnd.SetFocus(); hwnd.SendString(userName); // Enter password hwnd = new Hwnd(edits[1].Hwnd); hwnd.SetFocus(); hwnd.SendString(password); // Click OK button new WinButton(1, window.Hwnd).Click(); return(true); } return(false); }
public static bool ActivateChrome(string title) { //AutoIt.AutoItX.AutoItSetOption("WinTitleMatchMode", 2); var searchString = title; var enumerator = new WindowsEnumerator(); List <string> tabs = new List <string>(); var topLevelWindows = enumerator.GetTopLevelWindows("Chrome_WidgetWin_1"); foreach (var mainBrowserWindow in topLevelWindows) { tabs = new List <string>(); AutoIt.AutoItX.WinActivate(mainBrowserWindow.Hwnd); for (int i = 0; i < 50; i++) { if (AutoIt.AutoItX.WinGetTitle("[ACTIVE]").Contains(searchString)) { AutoIt.AutoItX.WinSetState(searchString, "", AutoIt.AutoItX.SW_MAXIMIZE); // AutoIt.AutoItX.WinSetState(searchString, "", AutoIt.AutoItX.SW_SHOW); return(true); // } AutoIt.AutoItX.Send("^{TAB}"); //Thread.Sleep(250); if (tabs.Any() && tabs.Contains(AutoIt.AutoItX.WinGetTitle("[ACTIVE]"))) { break; } tabs.Add(AutoIt.AutoItX.WinGetTitle("[ACTIVE]")); } } return(false); }
private async Task EnumerateWindowHandlesAsync() { var windows = await WindowsEnumerator.EnumerateWindowHandlesAsync().ToList().ToTask().ConfigureAwait(false); Assert.True(windows.Count > 0); }
private void EnumerateWindows_Take10() { var windows = WindowsEnumerator.EnumerateWindows().Take(10).ToList(); Assert.True(windows.Count == 10); }
private void EnumerateWindowHandles() { var windows = WindowsEnumerator.EnumerateWindowHandles().ToList(); Assert.True(windows.Count > 0); }
private async Task EnumerateWindowsAsync_Take10() { var windows = await WindowsEnumerator.EnumerateWindowsAsync().Take(10).ToList().ToTask().ConfigureAwait(false); Assert.True(windows.Count == 10); }
/// <summary> /// Test scrolling a window /// </summary> /// <returns></returns> //[StaFact] private async Task TestScrollingAsync() { var breakScroll = false; IDisposable keyboardhook = null; try { keyboardhook = KeyboardHook.KeyboardEvents.Where(args => args.Key == VirtualKeyCode.Escape).Subscribe(args => breakScroll = true); // Start a process to test against using (var process = Process.Start("notepad.exe", "C:\\Windows\\setupact.log")) { // Make sure it's started Assert.NotNull(process); // Wait until the process started it's message pump (listening for input) process.WaitForInputIdle(); try { // Find the belonging window, by the process id var notepadWindow = WindowsEnumerator.EnumerateWindows() .FirstOrDefault(interopWindow => { User32Api.GetWindowThreadProcessId(interopWindow.Handle, out var processId); return(processId == process.Id); }); Assert.NotNull(notepadWindow); // Create a WindowScroller var scroller = notepadWindow.GetChildren().Select(window => window.GetWindowScroller()).FirstOrDefault(); Assert.NotNull(scroller); // Notepad should have ScrollBarInfo scroller.GetScrollbarInfo(); Assert.True(scroller.ScrollBar.HasValue); Log.Info().WriteLine("Scrollbar info: {0}", scroller.ScrollBar.Value); User32Api.SetForegroundWindow(scroller.ScrollingWindow.Handle); await Task.Delay(1000); // Just make sure the window is changed KeyboardInputGenerator.KeyPresses(VirtualKeyCode.Next, VirtualKeyCode.Down); await Task.Delay(2000); scroller.ScrollMode = ScrollModes.WindowsMessage; scroller.ShowChanges = false; // Move the window to the start Assert.True(scroller.Start()); // A delay to make the window move await Task.Delay(2000); // Check if it did move to the start Assert.True(scroller.IsAtStart); // Loop do { if (breakScroll) { break; } // Next "page" Assert.True(scroller.Next()); // Wait a bit, so the window can update await Task.Delay(300); // Loop as long as we are not at the end yet } while (!scroller.IsAtEnd); scroller.Reset(); } finally { // Kill the process process.Kill(); } } } finally { keyboardhook?.Dispose(); } }
/// <summary> /// Get Windows displaying an IE /// </summary> /// <returns>IEnumerable IInteropWindow</returns> public static IEnumerable <IInteropWindow> GetIeWindows() { return(WindowsEnumerator.EnumerateWindows().Where(IsIeWindow)); }