def getMenuInfo(hMenu, uIDItem):
'''Get various info about a menu item.
Arguments:
hMenu The menu in which the item is to be found.
uIDItem The item's index
Returns: Menu item information object. This object is basically
a 'bunch'
(see http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52308).
It will have useful attributes: name, itemCount,
submenu, isChecked, isDisabled, isGreyed, and
isSeperator
Raises:
WinGuiAutoError When the requested menu option isn't found.
Usage example: submenuInfo = getMenuInfo(hMenu, submenu)
hMenu, hMenuItemCount = submenuInfo.submenu, submenuInfo.itemCount'''
# An object to hold the menu info
class MenuInfo(Bunch):
pass
menuInfo = MenuInfo()
# Menu state
menuState = ctypes.windll.user32.GetMenuState(hMenu,
uIDItem,
win32con.MF_BYPOSITION)
if menuState == -1:
raise WinGuiAutoError("No such menu item, hMenu=" +
str(hMenu) +
" uIDItem=" +
str(uIDItem))
menuInfo.isChecked = bool(menuState & win32con.MF_CHECKED)
menuInfo.isDisabled = bool(menuState & win32con.MF_DISABLED)
menuInfo.isGreyed = bool(menuState & win32con.MF_GRAYED)
menuInfo.isSeperator = bool(menuState & win32con.MF_SEPARATOR)
# ... there are more, but these are the ones I'm interested in
# Menu name
menuName = ctypes.c_buffer("\000" * 32)
ctypes.windll.user32.GetMenuStringA(ctypes.c_int(hMenu),
ctypes.c_int(uIDItem),
menuName, ctypes.c_int(len(menuName)),
win32con.MF_BYPOSITION)
menuInfo.name = menuName.value
# Sub menu info
menuInfo.itemCount = menuState >> 8
if bool(menuState & win32con.MF_POPUP):
menuInfo.submenu = ctypes.windll.user32.GetSubMenu(hMenu, uIDItem)
else:
menuInfo.submenu = None
return menuInfo
winGuiAuto_bak.py 文件源码
python
阅读 21
收藏 0
点赞 0
评论 0
评论列表
文章目录