コード例 #1
0
 // 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));
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        private async Task EnumerateWindowHandlesAsync()
        {
            var windows = await WindowsEnumerator.EnumerateWindowHandlesAsync().ToList().ToTask().ConfigureAwait(false);

            Assert.True(windows.Count > 0);
        }
コード例 #5
0
        private void EnumerateWindows_Take10()
        {
            var windows = WindowsEnumerator.EnumerateWindows().Take(10).ToList();

            Assert.True(windows.Count == 10);
        }
コード例 #6
0
        private void EnumerateWindowHandles()
        {
            var windows = WindowsEnumerator.EnumerateWindowHandles().ToList();

            Assert.True(windows.Count > 0);
        }
コード例 #7
0
        private async Task EnumerateWindowsAsync_Take10()
        {
            var windows = await WindowsEnumerator.EnumerateWindowsAsync().Take(10).ToList().ToTask().ConfigureAwait(false);

            Assert.True(windows.Count == 10);
        }
コード例 #8
0
        /// <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();
            }
        }
コード例 #9
0
 /// <summary>
 ///     Get Windows displaying an IE
 /// </summary>
 /// <returns>IEnumerable IInteropWindow</returns>
 public static IEnumerable <IInteropWindow> GetIeWindows()
 {
     return(WindowsEnumerator.EnumerateWindows().Where(IsIeWindow));
 }