Exemplo n.º 1
0
        /// <summary>
        /// Retreives message from popup
        /// </summary>
        /// <param name="paccParent">Parent window as IAccessible</param>
        /// <param name="childId">Id of child</param>
        /// <returns>The popup title and message</returns>
        public static PopupMessage GetPopupWindowMessage(IAccessible paccParent, int childId)
        {
            PopupMessage windowDescription = new PopupMessage();

            windowDescription.TitleBar = GetUIElementName(paccParent, childId);
            GetPopupWindowMessageHelper(paccParent, ref windowDescription);
            return(windowDescription);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Utility function to get the popup message
        /// </summary>
        /// <param name="paccParent">Parent window as IAccessible</param>
        /// <param name="windowDescription">reference to popup message record</param>
        public static void GetPopupWindowMessageHelper(IAccessible paccParent, ref PopupMessage windowDescription)
        {
            int numChildren = paccParent.accChildCount;

            object[] children = new object[numChildren];
            NativeMethods.AccessibleChildren(paccParent, 0, numChildren, children, out numChildren);
            uint roleIdRef = 0;

            foreach (object child in children)
            {
                if (child is IAccessible)
                {
                    IAccessible accessibleChild = (IAccessible)child;
                    if (GetUIElementRole(accessibleChild, NativeMethods.CHILDID_SELF, ref roleIdRef) == "text")
                    {
                        windowDescription.MessageText += GetUIElementName(accessibleChild, NativeMethods.CHILDID_SELF);
                    }

                    GetPopupWindowMessageHelper(accessibleChild, ref windowDescription);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Compares current window to configured windows
        /// </summary>
        /// <param name="hwndPtr">Handle to window</param>
        /// <param name="pacc">Accessible representation of window</param>
        /// <param name="windowDescription">title and message of window</param>
        /// <param name="windowClass">window class</param>
        private void CompareToConfiguredWindows(IntPtr hwndPtr, IAccessible pacc, PopupMessage windowDescription, string windowClass)
        {
            IEnumerator children;

            PopupBasherConfiguration.PopupConfigChild currentChildWindow;
            IAccessible accControl = null;
            int         childId;

            // Normal popup bashing behavior
            if (PopupBasherConfiguration.Instance.Windows != null && PopupBasherConfiguration.Instance.Windows.Windows != null)
            {
                // For each configured windows, search the couple windows name / class
                foreach (PopupBasherConfiguration.PopupConfigWindow currentWindow in PopupBasherConfiguration.Instance.Windows.Windows)
                {
                    if (windowDescription.TitleBar == currentWindow.Title && windowClass == currentWindow.ClassName)
                    {
                        // The parent window has been found, so act on children
                        Tracing.WriteDebugTextInfo(Tracing.ComponentId.ExcelDriver, Resources.PopupBasher_FoundParent, currentWindow.Title, currentWindow.ClassName);
                        NativeMethods.ShowWindow(hwndPtr, ShowWindowMode.SW_NORMAL);
                        NativeMethods.SetFocus(hwndPtr);

                        // Iterate thru children (form elements)
                        children = currentWindow.Children.GetEnumerator();
                        while (children.MoveNext())
                        {
                            currentChildWindow = (PopupBasherConfiguration.PopupConfigChild)children.Current;
                            Tracing.WriteDebugTextVerbose(
                                Tracing.ComponentId.ExcelDriver,
                                Resources.PopupBasher_SearchingForChild,
                                currentChildWindow.Title,
                                currentChildWindow.ClassName,
                                currentChildWindow.Role);

                            if (AccessibleHelper.FindChild(pacc, NativeMethods.CHILDID_SELF, currentChildWindow, out accControl, out childId))
                            {
                                // Add popup to list of bashed popups
                                this.bashedPopups.Add(windowDescription);

                                Tracing.WriteDebugTextVerbose(
                                    Tracing.ComponentId.ExcelDriver,
                                    Resources.PopupBasher_FoundChild,
                                    currentChildWindow.Title,
                                    currentChildWindow.ClassName,
                                    currentChildWindow.Role,
                                    windowDescription.MessageText);

                                if (currentChildWindow.Action == PopupBasherConfiguration.ActionType.DoDefault)
                                {
                                    // Perform the default action
                                    LogDefaultAction(
                                        currentWindow.Title,
                                        currentWindow.ClassName,
                                        currentChildWindow.Title,
                                        currentChildWindow.ClassName,
                                        currentChildWindow.Role);
                                    accControl.accDoDefaultAction(childId);
                                    break;
                                }
                            }
                        } // while (children.MoveNext())
                    }     // if
                }         // foreach popup window
            }             // if windows != null
        }