//chapter 12 public static void FindMenuTextAndID(int menuHnd, string prntTxt, ref int absPosID, ref SortedList menuList) { MENUITEMINFO menuinfo = new MENUITEMINFO(); menuinfo.cbSize = 44; StringBuilder menuString2 = new StringBuilder(128); int menuLen = GetMenuItemCount(menuHnd); for (int thisMenu = 0; thisMenu < menuLen; thisMenu++) { menuinfo.fMask = MIIM_DATA | MIIM_ID | MIIM_STATE | MIIM_SUBMENU | MIIM_TYPE | MIIM_CHECKMARKS; int di = GetMenuItemInfo(menuHnd, thisMenu, 1, ref menuinfo); int db = GetMenuString(menuHnd, thisMenu, menuString2, 127, MF_BYPOSITION); GUITestUtility.GUIInfo mItem = new GUITestUtility.GUIInfo(); mItem.GUIText = menuString2.ToString(); mItem.GUIParentText = prntTxt; mItem.GUIHandle = menuinfo.wID; mItem.GUIClassName = absPosID.ToString(); absPosID++; try { menuList.Add(menuinfo.wID, mItem); } catch {} int menuID = thisMenu; FindMenuTextAndID(GetSubMenu(menuHnd, menuID), prntTxt, ref absPosID, ref menuList); } //for return; }
public static void HandleMenuItems(int mWnd, string winText, string clsName, ref string pText, string textEntry) { int hMenu = GetMenu(mWnd); StringBuilder prntText = new StringBuilder(255); GetWindowText(mWnd, prntText, 255); SortedList IDLst = new SortedList(); int absPosID = 0; FindMenuTextAndID(hMenu, prntText.ToString(), ref absPosID, ref IDLst); GUITestUtility.GUIInfo menuItem = (GUITestUtility.GUIInfo)IDLst.GetByIndex(int.Parse(clsName)); int menuID = menuItem.GUIHandle; ArrayList menuPath = FindMenuClickPathByID(mWnd, menuID); if ((menuPath.Count - 1) == 0) { ClickMenuItem(mWnd, hMenu, (int)menuPath[0]); System.Threading.Thread.Sleep(500); } for (int subItem = 1; subItem < menuPath.Count; subItem++) { int intA = (int)menuPath[subItem - 1]; int subMenu = GetSubMenu(hMenu, intA); intA = (int)menuPath[subItem]; int subMenuWin = 0; FindMenuWindow(ref subMenuWin, ref winText, ref pText); if (subItem == (menuPath.Count - 1)) { ClickMenuItem(subMenuWin, subMenu, intA); System.Threading.Thread.Sleep(500); } } }