def show_menu(self): menu = win32gui.CreatePopupMenu() self.create_menu(menu, self.menu_options) #win32gui.SetMenuDefaultItem(menu, 1000, 0) pos = win32gui.GetCursorPos() # See # http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp win32gui.SetForegroundWindow(self.hwnd) win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) win32gui.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0)
def create_menu(self, menu, menu_options): 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 show_menu(self): menu = win32gui.CreatePopupMenu() self.create_menu(menu, self.menu_options) #win32gui.SetMenuDefaultItem(menu, 1000, 0) try: pos = win32gui.GetCursorPos() # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp win32gui.SetForegroundWindow(self.hwnd) win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) win32gui.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0) except pywintypes.error: # Weird PyWin/win32gui bug, just ignore it for now pass
def create_menu(self, menu, menu_options): for menu_option in menu_options[::-1]: if isinstance(menu_option.icon, str): menu_option.icon = self.prep_menu_icon(menu_option.icon) if isinstance(menu_option, TraySubmenu): submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, menu_option.items) item, extras = win32gui_struct.PackMENUITEMINFO( text=menu_option.text, hbmpItem=menu_option.icon, hSubMenu=submenu, fState=menu_option.style) win32gui.InsertMenuItem(menu, 0, 1, item) elif isinstance(menu_option, TrayItem): item, extras = win32gui_struct.PackMENUITEMINFO( text=menu_option.text, hbmpItem=menu_option.icon, wID=menu_option._next_action_id, fState=menu_option.style, fType=menu_option.type) win32gui.InsertMenuItem(menu, 0, 1, item)
def create_menu(self, menu, menu_options): for option_text, option_icon, option_action, option_id in menu_options[::-1]: if option_icon: # has icon if not callable(option_icon): option_icon = self.prep_menu_icon(option_icon) if option_text == "-": # separator win32gui.InsertMenu(menu, 0, win32con.MF_BYPOSITION, win32con.MF_SEPARATOR, None) elif option_id in self.menu_actions_by_id: # normal item checked = False if callable(option_icon): # checkbox item checked = option_icon() option_icon = None # no icon if checked: item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text, fState=win32con.MFS_CHECKED, wID=option_id) else: item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text, hbmpItem=option_icon, wID=option_id) win32gui.InsertMenuItem(menu, 0, 1, item) else: # submenu 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 show_menu(self): menu = win32gui.CreatePopupMenu() count = 0 for count, (option_text, option_id) in enumerate(self.menu_entries): win32gui.AppendMenu( menu, win32con.MF_STRING | win32con.MF_GRAYED | win32con.MF_DISABLED, option_id, option_text) win32gui.InsertMenu(menu, count + 1, win32con.MF_BYPOSITION, win32con.MF_SEPARATOR, None) win32gui.InsertMenuItem( menu, count + 2, 1, win32gui_struct.PackMENUITEMINFO( text="Quit", wID=0, hbmpItem=win32con.HBMMENU_MBAR_CLOSE)[0]) pos = win32gui.GetCursorPos() # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp win32gui.SetForegroundWindow(self.hwnd) win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) win32gui.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0)
def show_menu(self): menu_options = self.menu_cb() menu_options = menu_options + [('Quit', None, self.QUIT),] self._next_action_id = self.FIRST_ID self.menu_actions_by_id = set() menu_options = self._add_ids_to_menu_options(menu_options) self.menu_actions_by_id = dict(self.menu_actions_by_id) del self._next_action_id menu = win32gui.CreatePopupMenu() self.create_menu(menu, menu_options) #win32gui.SetMenuDefaultItem(menu, 1000, 0) pos = win32gui.GetCursorPos() # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp win32gui.SetForegroundWindow(self.hwnd) win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) win32gui.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0)