Esempio n. 1
0
        public SystemAccessible[] GetChildren()
        {
            List <SystemAccessible> result = new List <SystemAccessible>();

            try {
                SystemAccessible child = this.FirstChild;
                if (child == null)
                {
                    for (int i = 1, n = this.GetChildCount(); i <= n; i++)
                    {
                        child = (SystemAccessible)this.GetChild(i);
                        if (child != null)
                        {
                            result.Add(child);
                        }
                    }
                }
                else
                {
                    SystemAccessible last = this.LastChild;
                    while (child != null)
                    {
                        result.Add(child);
                        if (child == last)
                        {
                            break;
                        }
                        child = (SystemAccessible)child.Navigate(AccessibleNavigation.Next);
                    }
                }
            } catch {
            }
            return(result.ToArray());
        }
Esempio n. 2
0
        public Window(Process p)
        {
            this.p = p;
            IntPtr h = p.Handle;

            while (h == IntPtr.Zero || !p.Responding)
            {
                Sleep(1000);
                p.WaitForInputIdle();
                h = p.Handle;
                if (p.HasExited)
                {
                    throw new InvalidOperationException(string.Format("Process '{0}' has exited!", p.StartInfo.FileName));
                }
            }
            p.Exited += new EventHandler(OnExited);
            int id = p.Id;

            if (handle == IntPtr.Zero)
            {
                // p.MainWindowHandle always returns 0 for some unknown reason...
                int retries = 20;
                while (retries-- > 0 && handle == IntPtr.Zero)
                {
                    handle = FindWindowForProcessId(id);
                    Sleep(1000);
                }
                if (handle == IntPtr.Zero)
                {
                    throw new Exception("Process as no window handle");
                }
            }
            this.acc = SystemAccessible.AccessibleObjectForWindow(handle);
        }
Esempio n. 3
0
 void LoadSimpleChildren(SystemAccessible item)
 {
     for (int i = 1, n = item.GetChildCount(); i <= n; i++)
     {
         SystemAccessible child = (SystemAccessible)item.GetChild(i);
         AddChild(child);
     }
 }
Esempio n. 4
0
        public static SystemAccessible AccessibleWindowObjectAt(Point pt)
        {
            POINT p = new POINT();

            p.x = pt.X;
            p.y = pt.Y;
            IntPtr hwnd = WindowFromPoint(p);

            if (hwnd != IntPtr.Zero)
            {
                return(SystemAccessible.AccessibleObjectForWindow(hwnd));
            }
            return(null);
        }
Esempio n. 5
0
 void ReloadMap(string name)
 {
     if (map == null)
     {
         map = new Dictionary <string, SystemAccessible>();
     }
     if (map == null || !map.ContainsKey(name))
     {
         SystemAccessible client = GetClient();
         if (client != null)
         {
             LoadChildren(client);
         }
     }
 }
Esempio n. 6
0
        static SystemAccessible Wrap(AccessibleObject parent, IAccessible acc, int id)
        {
            if (acc == null)
            {
                return(null);
            }
            if (s_Wrappers.ContainsKey(acc))
            {
                return(s_Wrappers[acc]);
            }
            SystemAccessible wrapper = new SystemAccessible(parent, acc, id);

            s_Wrappers[acc] = wrapper;
            return(wrapper);
        }
Esempio n. 7
0
        void LoadComplexChildren(SystemAccessible item)
        {
            SystemAccessible first = item.FirstChild;

            if (first != null)
            {
                SystemAccessible last  = item.LastChild;
                SystemAccessible child = first;
                while (child != null)
                {
                    AddChild(child);
                    if (child == last)
                    {
                        break;
                    }
                    child = child.NextSibling;
                }
            }
        }
Esempio n. 8
0
        void AddChild(SystemAccessible child)
        {
            string name = child.Name;

            if (!string.IsNullOrEmpty(name) && child.Role != AccessibleRole.Window)
            {
                Trace.WriteLine("Found: " + name);
                if (!map.ContainsKey(name) || child.Role == AccessibleRole.Client)
                {
                    map[name] = child;
                }
                else
                {
                    Trace.WriteLine(string.Format("Ambiguous item name: '{0}'", name));
                }
            }
            if (child.GetChildCount() > 0)
            {
                LoadChildren(child);
            }
        }
Esempio n. 9
0
        private static IntPtr FindWindowForProcessId(int id)
        {
            // Hmmm, try and find window for this process then.
            IntPtr hwnd = GetWindow(GetDesktopWindow(), GetWindowOptions.Child);

            while (hwnd != IntPtr.Zero)
            {
                int procid;
                int thread = GetWindowThreadProcessId(hwnd, out procid);
                if (procid == id && IsWindowVisible(hwnd))
                {
                    SystemAccessible acc = SystemAccessible.AccessibleObjectForWindow(hwnd);
                    if (acc.Role == AccessibleRole.Client &&
                        (acc.State & AccessibleStates.Invisible) == 0 &&
                        !string.IsNullOrEmpty(acc.Name))
                    {
                        // found it!
                        return(hwnd);
                    }
                }
                hwnd = GetWindow(hwnd, GetWindowOptions.Next);
            }
            return(IntPtr.Zero);
        }
Esempio n. 10
0
        void LoadChildren(SystemAccessible item)
        {
            switch (item.Role)
            {
            case AccessibleRole.Alert:
                break;

            case AccessibleRole.Animation:
                break;

            case AccessibleRole.Application:
                break;

            case AccessibleRole.Border:
                break;

            case AccessibleRole.ButtonDropDown:
                break;

            case AccessibleRole.ButtonDropDownGrid:
                break;

            case AccessibleRole.ButtonMenu:
                break;

            case AccessibleRole.Caret:
                break;

            case AccessibleRole.Cell:
                break;

            case AccessibleRole.Character:
                break;

            case AccessibleRole.Chart:
                break;

            case AccessibleRole.CheckButton:
                break;

            case AccessibleRole.Client:
            case AccessibleRole.Window:
                this.LoadComplexChildren(item);
                break;

            case AccessibleRole.Clock:
                break;

            case AccessibleRole.Column:
                break;

            case AccessibleRole.ColumnHeader:
                break;

            case AccessibleRole.ComboBox:
                break;

            case AccessibleRole.Cursor:
                break;

            case AccessibleRole.Default:
                break;

            case AccessibleRole.Diagram:
                break;

            case AccessibleRole.Dial:
                break;

            case AccessibleRole.Dialog:
                break;

            case AccessibleRole.Document:
                break;

            case AccessibleRole.DropList:
                break;

            case AccessibleRole.Equation:
                break;

            case AccessibleRole.Graphic:
                break;

            case AccessibleRole.Grip:
                break;

            case AccessibleRole.Grouping:
                break;

            case AccessibleRole.HelpBalloon:
                break;

            case AccessibleRole.HotkeyField:
                break;

            case AccessibleRole.Indicator:
                break;

            case AccessibleRole.IpAddress:
                break;

            case AccessibleRole.Link:
                break;

            case AccessibleRole.List:
                break;

            case AccessibleRole.ListItem:
                break;

            case AccessibleRole.MenuBar:
            case AccessibleRole.MenuItem:
            case AccessibleRole.MenuPopup:
            case AccessibleRole.ToolBar:
                this.LoadSimpleChildren(item);
                break;

            case AccessibleRole.None:
                break;

            case AccessibleRole.Outline:
                break;

            case AccessibleRole.OutlineButton:
                break;

            case AccessibleRole.OutlineItem:
                break;

            case AccessibleRole.PageTab:
                break;

            case AccessibleRole.PageTabList:
                break;

            case AccessibleRole.Pane:
                break;

            case AccessibleRole.ProgressBar:
                break;

            case AccessibleRole.PropertyPage:
                break;

            case AccessibleRole.PushButton:
                break;

            case AccessibleRole.RadioButton:
                break;

            case AccessibleRole.Row:
                break;

            case AccessibleRole.RowHeader:
                break;

            case AccessibleRole.ScrollBar:
                break;

            case AccessibleRole.Separator:
                break;

            case AccessibleRole.Slider:
                break;

            case AccessibleRole.Sound:
                break;

            case AccessibleRole.SpinButton:
                break;

            case AccessibleRole.SplitButton:
                break;

            case AccessibleRole.StaticText:
                break;

            case AccessibleRole.StatusBar:
                break;

            case AccessibleRole.Table:
                break;

            case AccessibleRole.Text:
                break;

            case AccessibleRole.TitleBar:
                break;

            case AccessibleRole.ToolTip:
                break;

            case AccessibleRole.WhiteSpace:
                break;

            default:
                break;
            }
        }
Esempio n. 11
0
 public Window(Window parent, IntPtr handle)
 {
     this.parent = parent;
     this.handle = handle;
     this.acc    = SystemAccessible.AccessibleObjectForWindow(handle);
 }