def _create_menu(self, menu, menu_options): """Generate the popup menu just before drawing. This is needed as it recursively runs on submenus. """ for menu_option in menu_options[::-1]: if menu_option.get('hidden', False): continue text = menu_option.get('name', 'Option') icon = menu_option.get('icon', None) action = menu_option.get('action', None) id = menu_option.get('_id') #Set icon if icon: try: icon = self._set_icon_menu(icon) except pywintypes.error: icon = None #Add menu item if id in self.menu_actions_by_id or action is None: item, extras = win32gui_struct.PackMENUITEMINFO(text=text, hbmpItem=icon, wID=id) win32gui.InsertMenuItem(menu, 0, 1, item) #Add submenu else: submenu = win32gui.CreatePopupMenu() self._create_menu(submenu, action) item, extras = win32gui_struct.PackMENUITEMINFO( text=text, hbmpItem=icon, hSubMenu=submenu) win32gui.InsertMenuItem(menu, 0, 1, item)
def create_menu(self, menu, menu_options): for option_text, option_icon, option_Checked, option_action, option_id in menu_options[:: -1]: if option_icon: option_icon = self.prep_menu_icon(option_icon) item_state = None if option_Checked is True: item_state = win32con.MFS_CHECKED if option_id in self.menu_actions_by_id: item, extras = win32gui_struct.PackMENUITEMINFO( text=option_text, hbmpItem=option_icon, fState=item_state, wID=option_id) win32gui.InsertMenuItem(menu, 0, 1, item) if option_id not in self.__menu_extra: self.__menu_extra.setdefault(option_id, extras) else: self.__menu_extra[option_id] = extras else: submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, option_action) item, extras = win32gui_struct.PackMENUITEMINFO( text=option_text, hbmpItem=option_icon, fState=item_state, hSubMenu=submenu) win32gui.InsertMenuItem(menu, 0, 1, item) if option_id not in self.__menu_extra: self.__menu_extra.setdefault(option_id, extras) else: self.__menu_extra[option_id] = extras
def get_popup(self): menu = win32gui.CreatePopupMenu() (item, _) = win32gui_struct.PackMENUITEMINFO(text=u'Quit', wID=self.IDI_QUIT) win32gui.InsertMenuItem(menu, 0, 1, item) win32gui.SetMenuDefaultItem(menu, 0, self.IDI_QUIT) (item, _) = win32gui_struct.PackMENUITEMINFO(text=u'Test', wID=123) win32gui.InsertMenuItem(menu, 0, 1, item) return menu
def create_menu(self, menu, menu_options): for opt_text, opt_icon, opt_action, opt_id in menu_options[::-1]: if opt_icon: opt_icon = self.prep_menu_icon(opt_icon) if opt_id in self.menu_actions_by_id: item, extras = win32gui_struct.PackMENUITEMINFO(text=opt_text, hbmpItem=opt_icon, wID=opt_id) win32gui.InsertMenuItem(menu, 0, 1, item) else: submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, opt_action) item, extras = win32gui_struct.PackMENUITEMINFO(text=opt_text, hbmpItem=opt_icon, hSubMenu=submenu) win32gui.InsertMenuItem(menu, 0, 1, item)
def create_menu(self, parent_menu, menu_options): """ Create Menus """ for key, (name, action) in menu_options.iteritems(): # If action is dict, Create sub menu if isinstance(action, dict): submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, action) item, _ = win32gui_struct.PackMENUITEMINFO(text=name, hSubMenu=submenu) win32gui.InsertMenuItem(parent_menu, 0, 1, item) # Else, create menu entry else: item, _ = win32gui_struct.PackMENUITEMINFO(text=name, wID=key) win32gui.InsertMenuItem(parent_menu, 0, 1, item)
def create_menu(self, menu, menopts): # Inserts all items into the popup (again, recursive) for opt in menopts: if opt[1] != None: opt_icon = opt[1].get() else: opt_icon = None mi_fstate = 0 mi_ftype = 0 if opt[3]["disabled"]: mi_fstate = mi_fstate | win32con.MFS_DISABLED if opt[3]["highlight"]: mi_fstate = mi_fstate | win32con.MFS_HILITE if opt[3]["separator"]: mi_ftype = mi_ftype | win32con.MFT_SEPARATOR if type(opt[2]) == type([]): submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, opt[2]) item, extras = win32gui_struct.PackMENUITEMINFO( text=opt[0].get(), hbmpItem=opt_icon, hSubMenu=submenu, fState=mi_fstate, fType=mi_ftype, wID=opt[-1]) else: item, extras = win32gui_struct.PackMENUITEMINFO( text=opt[0].get(), hbmpItem=opt_icon, fState=mi_fstate, fType=mi_ftype, wID=opt[-1]) win32gui.InsertMenuItem(menu, 0, 1, item)
def create_menu(self): menu = win32gui.CreatePopupMenu() item, extras = win32gui_struct.PackMENUITEMINFO( text = self.app_state.gettext('Close'), hbmpItem=win32con.HBMMENU_MBAR_CLOSE, wID=EXIT_COMMAND ) win32gui.InsertMenuItem( menu, 0, 1, item ) win32gui.SetMenuDefaultItem( menu, EXIT_COMMAND, 0 ) item, extras = win32gui_struct.PackMENUITEMINFO( text = self.app_state.gettext('Open'), hbmpChecked = None, hbmpUnchecked = None, wID=OPEN_COMMAND ) win32gui.InsertMenuItem( menu, 0, 1, item ) win32gui.SetForegroundWindow(self.window_id) x, y = win32gui.GetCursorPos() win32gui.TrackPopupMenu( menu, win32con.TPM_LEFTALIGN, x, y, 0, self.window_id, None ) win32gui.PostMessage( self.window_id, win32con.WM_NULL, 0, 0 )
def create_menu(self): '''Create context menu''' if self.MENU is not None: return self.MENU = win32gui.CreatePopupMenu() # Add menu items # Insert backwards # https://msdn.microsoft.com/en-us/library/windows/desktop/ms647988(v=vs.85).aspx # Quit win32gui.InsertMenuItem( self.MENU, 0, 1, win32gui_struct.PackMENUITEMINFO(text='Quit', wID=0)[0]) # App name win32gui.InsertMenuItem( self.MENU, 0, 1, win32gui_struct.PackMENUITEMINFO(text=self.APP_NAME, wID=0, fState=win32con.MFS_DISABLED)[0])
def create_menu(self, menu, menu_options): if DEBUG: print(sys._getframe(0).f_code.co_name) for option_text, option_icon, option_action, option_id in menu_options[::-1]: if option_icon: option_icon = self.prep_menu_icon(option_icon) if option_id in self.menu_actions_by_id: item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text, hbmpItem=option_icon, wID=option_id) win32gui.InsertMenuItem(menu, 0, 1, item) else: submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, option_action) item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text, hbmpItem=option_icon, hSubMenu=submenu) win32gui.InsertMenuItem(menu, 0, 1, item)
def _notifyCallback(self, hwnd, msg, wparam, lparam): if not lparam in [ win32con.WM_LBUTTONDBLCLK, win32con.WM_RBUTTONUP, win32con.WM_LBUTTONUP ]: return hMenu = win32gui.CreatePopupMenu() self._callbacks.clear() items = self._items() if callable(self._items) else self._items wId = 1023 for txt, bmp, checked, callback in items: if checked is None: item, _ = win32gui_struct.PackMENUITEMINFO(text=str(txt), hbmpItem=bmp, wID=wId) else: item, _ = win32gui_struct.PackMENUITEMINFO( text=str(txt), hbmpItem=bmp, wID=wId, fState=win32con.MFS_CHECKED if checked else win32con.MFS_UNCHECKED) win32gui.InsertMenuItem(hMenu, 0, 1, item) self._callbacks[wId] = callback wId += 1 pos = win32gui.GetCursorPos() try: win32gui.SetForegroundWindow(hwnd) win32gui.TrackPopupMenu(hMenu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, hwnd, None) win32gui.PostMessage(hwnd, win32con.WM_NULL, 0, 0) except: pass win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def create_menu(self, menu, menu_options): if len(menu_options) > 9: if recorder.mode != "Record": menu_options[0][0] = "Start recording\t\tCTRL+ALT+R" menu_options[0][1] = icon_record else: menu_options[0][0] = "Stop recording\t\tCTRL+ALT+R" menu_options[0][1] = icon_stop if recorder.mode == "Play": menu_options[1][0] = "Wait end of replay" # disabled menu_options[1][1] = icon_stop else: menu_options[1][0] = "Start replaying clipboard" menu_options[1][1] = icon_play if not recorder.mode == "Info": menu_options[2][ 0] = "Start displaying element information\tCTRL+SHIFT+D" menu_options[2][1] = icon_search else: menu_options[2][ 0] = "Stop displaying element information\tCTRL+SHIFT+D" menu_options[2][1] = icon_stop if not recorder.smart_mode: menu_options[3][0] = "Start Smart mode\t\tCTRL+ALT+S" menu_options[3][1] = icon_light_on else: menu_options[3][0] = "Stop Smart mode\t\tCTRL+ALT+S" menu_options[3][1] = icon_stop if not recorder.relative_coordinate_mode: menu_options[6][2][0][1] = icon_cross else: menu_options[6][2][0][1] = icon_check if not recorder.process_menu_click_mode: menu_options[6][2][1][1] = icon_cross else: menu_options[6][2][1][1] = icon_check for option_text, option_icon, option_action, option_id in menu_options[:: -1]: if option_icon: option_icon = self.prep_menu_icon(option_icon) if option_id in self.menu_actions_by_id: item, _ = win32gui_struct.PackMENUITEMINFO( text=option_text, hbmpItem=option_icon, wID=option_id) if option_text == '- - - - - -': win32gui.InsertMenu( menu, 0, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) else: win32gui.InsertMenuItem(menu, 0, 1, item) else: submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, option_action) item, _ = win32gui_struct.PackMENUITEMINFO( text=option_text, hbmpItem=option_icon, hSubMenu=submenu) if option_text == '- - - - - -': win32gui.InsertMenu( menu, 0, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) else: win32gui.InsertMenuItem(menu, 0, 1, item)