private void RepeatGetAccessibleObjects(IAccessible suparent, Int32 LEVEL, XmlElement subparentnode, string SearchTile, XmlDocument doc, ref object FindBox, ref IAccessible FindBoxParent) { object[] CHILDS = GetAccessibleChildren(suparent); subparentnode.SetAttribute("childs", CHILDS.Length.ToString()); Int32 SubLevel = LEVEL + 1; if (LEVEL > 30) { return; } Int32 index = 1; foreach (var CHILDITEM in CHILDS) { XmlElement subwin = doc.CreateElement("win"); subparentnode.AppendChild(subwin); subwin.SetAttribute("index", index.ToString()); try { if (CHILDITEM.GetType().ToString().ToUpper().Contains("INT")) { subwin.SetAttribute("name", ((IAccessible)suparent).get_accName(CHILDITEM)); subwin.SetAttribute("value", ((IAccessible)suparent).get_accValue(CHILDITEM)); if (((IAccessible)suparent).get_accName(CHILDITEM) == SearchTile) { FindBox = (CHILDITEM); FindBoxParent = suparent; return; } } else { subwin.SetAttribute("name", ((IAccessible)CHILDITEM).get_accName(Win32.CHILDID_SELF)); if (((IAccessible)CHILDITEM).get_accName(Win32.CHILDID_SELF) == SearchTile) { FindBox = ((IAccessible)CHILDITEM); FindBoxParent = suparent; return; } subwin.SetAttribute("value", ((IAccessible)CHILDITEM).get_accValue(Win32.CHILDID_SELF)); } } catch (Exception) { } index += 1; if (FindBox == null && CHILDITEM.GetType().ToString().ToUpper().Contains("INT") == false) { RepeatGetAccessibleObjects(((IAccessible)CHILDITEM), SubLevel, subwin, SearchTile, doc, ref FindBox, ref FindBoxParent); } } }
public void ReloadMembers(string GroupOwnerName, DataTable ToJoinIn, string WX_SourceType, Linq.dbDataContext db, IntPtr hwnd) { XmlDocument doc = new XmlDocument(); StartGetAccessibleObjects(_QqWindowHandle, out FindOwner, out FindOwnerParent, GroupOwnerName, out doc); object[] CHILDS = GetAccessibleChildren(FindOwnerParent); Linq.WX_PCSendPicSetting pcset = db.WX_PCSendPicSetting.SingleOrDefault(t => t.WX_UserTMPID == hwnd.ToString()); foreach (var CHILDITEM in CHILDS) { if (CHILDITEM.GetType().ToString().ToUpper().Contains("INT") == false) { continue; } string NewName = ((IAccessible)FindOwnerParent).get_accName(CHILDITEM); DataRow[] testexit = ToJoinIn.Select( "User_ContactID= '" + NewName.Replace("'", "''") + "' and User_SourceType = '" + WX_SourceType + "'" ); if (testexit.Length == 0) { Linq.WX_UserReply userreply = db.WX_UserReply.SingleOrDefault(t => t.aspnet_UserID == GlobalParam.UserKey && t.WX_UserName == NewName && t.WX_SourceType == WX_SourceType ); DataRow usr = ToJoinIn.AsEnumerable().SingleOrDefault (t => t.Field <object>("User_ContactID").ToString() == NewName && t.Field <object>("User_SourceType").ToString() == WX_SourceType ); if (userreply == null) { Linq.WX_UserReply newr = new Linq.WX_UserReply(); newr.aspnet_UserID = GlobalParam.UserKey; newr.WX_SourceType = WX_SourceType; newr.WX_UserName = NewName; newr.IsCaculateFuli = true; db.WX_UserReply.InsertOnSubmit(newr); db.SubmitChanges(); } if (usr == null && userreply == null) { DataRow newset = ToJoinIn.NewRow(); newset.SetField("User_ContactID", NewName); newset.SetField("User_ContactTEMPID", hwnd.ToString()); newset.SetField("User_SourceType", WX_SourceType); newset.SetField("User_Contact", NewName); newset.SetField("User_ChongqingMode", pcset.ChongqingMode); newset.SetField("User_FiveMinuteMode", pcset.FiveMinuteMode); newset.SetField("User_HkMode", pcset.HkMode); newset.SetField("User_AozcMode", pcset.AozcMode); ToJoinIn.Rows.Add(newset); usr = newset; } else if (usr == null && userreply != null) { DataRow newset = ToJoinIn.NewRow(); newset.SetField("User_ContactID", userreply.WX_UserName); newset.SetField("User_ContactTEMPID", hwnd.ToString()); newset.SetField("User_SourceType", userreply.WX_SourceType); newset.SetField("User_Contact", userreply.WX_UserName); newset.SetField("User_IsAdmin", userreply.IsAdmin); newset.SetField("User_IsCaculateFuli", userreply.IsCaculateFuli); newset.SetField("User_ChongqingMode", pcset.ChongqingMode); newset.SetField("User_FiveMinuteMode", pcset.FiveMinuteMode); newset.SetField("User_HkMode", pcset.HkMode); newset.SetField("User_AozcMode", pcset.AozcMode); ToJoinIn.Rows.Add(newset); usr = newset; } } } }
private void StartGetAccessibleObjects(System.IntPtr imWindowHwnd, out object FindBox, out IAccessible FindBoxParent, string SearchTile, out XmlDocument doc) { Guid guidCOM = new Guid(0x618736E0, 0x3C3D, 0x11CF, 0x81, 0xC, 0x0, 0xAA, 0x0, 0x38, 0x9B, 0x71); Accessibility.IAccessible IACurrent = null; doc = new XmlDocument(); FindBox = null; FindBoxParent = IACurrent; Win32.AccessibleObjectFromWindow(imWindowHwnd, (int)Win32.OBJID_CLIENT, ref guidCOM, ref IACurrent); if (IACurrent == null) { return; } IACurrent = (IAccessible)IACurrent.accParent; FindBox = null; object[] CHILDS = GetAccessibleChildren(IACurrent); doc.LoadXml("<top></top>"); Int32 index = 1; foreach (var CHILDITEM in CHILDS) { XmlElement subwin = doc.CreateElement("win"); doc.DocumentElement.AppendChild(subwin); subwin.SetAttribute("index", index.ToString()); if (CHILDITEM.GetType().ToString().ToUpper().Contains("INT")) { subwin.SetAttribute("name", ((IAccessible)IACurrent).get_accName(CHILDITEM)); subwin.SetAttribute("value", ((IAccessible)IACurrent).get_accValue(CHILDITEM), SearchTile); if (((IAccessible)IACurrent).get_accName(CHILDITEM) == SearchTile) { FindBox = (CHILDITEM); FindBoxParent = IACurrent; return; } } else { subwin.SetAttribute("name", ((IAccessible)CHILDITEM).get_accName(Win32.CHILDID_SELF)); subwin.SetAttribute("value", ((IAccessible)CHILDITEM).get_accValue(Win32.CHILDID_SELF), SearchTile); if (((IAccessible)CHILDITEM).get_accName(Win32.CHILDID_SELF) == SearchTile) { FindBox = ((IAccessible)CHILDITEM); FindBoxParent = IACurrent; return; } } index += 1; if (FindBox == null) { RepeatGetAccessibleObjects(((IAccessible)CHILDITEM), 1, subwin, SearchTile, doc, ref FindBox, ref FindBoxParent); } } //int childCount = IACurrent.accChildCount; //object[] windowChildren = new object[childCount]; //int pcObtained; //Win32.AccessibleChildren(IACurrent, 0, childCount, windowChildren, out pcObtained); //foreach (IAccessible child in windowChildren) //{ // if (child.get_accName(Win32.CHILDID_SELF) == _winTitle) // { // inputBox = GetAccessibleChild(child, new int[] { 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 3, 0 }); // break; // } //} }