コード例 #1
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);
 }
コード例 #2
0
 void LoadSimpleChildren(SystemAccessible item)
 {
     for (int i = 1, n = item.GetChildCount(); i <= n; i++) {
         SystemAccessible child = (SystemAccessible)item.GetChild(i);
         AddChild(child);
     }
 }
コード例 #3
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;
         }
     }
 }
コード例 #4
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;
     }
 }
コード例 #5
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);
     }
 }
コード例 #6
0
 public Window(Window parent, IntPtr handle)
 {
     this.parent = parent;
     this.handle = handle;
     this.acc = SystemAccessible.AccessibleObjectForWindow(handle);
 }