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()); }
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); }
void LoadSimpleChildren(SystemAccessible item) { for (int i = 1, n = item.GetChildCount(); i <= n; i++) { SystemAccessible child = (SystemAccessible)item.GetChild(i); AddChild(child); } }
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); }
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); } } }
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); }
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; } } }
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); } }
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); }
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; } }
public Window(Window parent, IntPtr handle) { this.parent = parent; this.handle = handle; this.acc = SystemAccessible.AccessibleObjectForWindow(handle); }