def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, Win32MaayTaskbar.SEARCH_MENU_ID, "Search") win32gui.AppendMenu(menu, win32con.MF_STRING, Win32MaayTaskbar.INDEXATION_MENU_ID, "Manage Folders") win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, 1002, "") win32gui.AppendMenu(menu, win32con.MF_STRING, Win32MaayTaskbar.HOMEPAGE_MENU_ID, "Maay Homepage") win32gui.SetMenuDefaultItem(menu, Win32MaayTaskbar.SEARCH_MENU_ID, 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) elif lparam == win32con.WM_LBUTTONDBLCLK: webbrowser.open("http://127.0.0.1:%s/" % self.node.NODE_CONFIG.webserver_port, autoraise=1) return 1
def notify_callback(hwnd): menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING, 1024, "Generate balloon") win32gui.AppendMenu( menu, win32con.MF_STRING, 1025, "Exit") pos = win32api.GetCursorPos() win32gui.SetForegroundWindow(hwnd) win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, hwnd, None) win32api.PostMessage(hwnd, win32con.WM_NULL, 0, 0)
def RightMB(self): menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, 1023, "Settings") win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, "Exit program") 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 icon_wndproc(hwnd, msg, wp, lp): """Window proc for the tray icons""" if lp == win32con.WM_LBUTTONDOWN: ## popup menu won't disappear if you don't do this win32gui.SetForegroundWindow(hwnd) curr_desktop = win32service.OpenInputDesktop(0, True, win32con.MAXIMUM_ALLOWED) curr_desktop_name = win32service.GetUserObjectInformation( curr_desktop, win32con.UOI_NAME ) winsta = win32service.GetProcessWindowStation() desktops = winsta.EnumDesktops() m = win32gui.CreatePopupMenu() desktop_cnt = len(desktops) ## *don't* create an item 0 for d in range(1, desktop_cnt + 1): mf_flags = win32con.MF_STRING ## if you switch to winlogon yourself, there's nothing there and you're stuck if desktops[d - 1].lower() in ("winlogon", "disconnect"): mf_flags = mf_flags | win32con.MF_GRAYED | win32con.MF_DISABLED if desktops[d - 1] == curr_desktop_name: mf_flags = mf_flags | win32con.MF_CHECKED win32gui.AppendMenu(m, mf_flags, d, desktops[d - 1]) win32gui.AppendMenu(m, win32con.MF_STRING, desktop_cnt + 1, "Create new ...") win32gui.AppendMenu(m, win32con.MF_STRING, desktop_cnt + 2, "Exit") x, y = win32gui.GetCursorPos() d = win32gui.TrackPopupMenu( m, win32con.TPM_LEFTBUTTON | win32con.TPM_RETURNCMD | win32con.TPM_NONOTIFY, x, y, 0, hwnd, None, ) win32gui.PumpWaitingMessages() win32gui.DestroyMenu(m) if d == desktop_cnt + 1: ## Create new get_new_desktop_name(hwnd) elif d == desktop_cnt + 2: ## Exit win32gui.PostQuitMessage(0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, window_info[hwnd]) del window_info[hwnd] origin_desktop.SwitchDesktop() elif d > 0: hdesk = win32service.OpenDesktop( desktops[d - 1], 0, 0, win32con.MAXIMUM_ALLOWED ) hdesk.SwitchDesktop() return 0 else: return win32gui.DefWindowProc(hwnd, msg, wp, lp)
def OnTaskbarNotify( self, hwnd, msg, wparam, lparam, ): if lparam == win32con.WM_LBUTTONUP: pass elif lparam == win32con.WM_LBUTTONDBLCLK: pass elif lparam == win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, 1023, 'Toggle Display') win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, 0, '') if self.serverState == self.EnumServerState.STOPPED: win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, 'Start Server') win32gui.AppendMenu(menu, win32con.MF_STRING | win32con.MF_GRAYED, 1025, 'Restart Server') win32gui.AppendMenu(menu, win32con.MF_STRING | win32con.MF_GRAYED, 1026, 'Stop Server') else: win32gui.AppendMenu(menu, win32con.MF_STRING | win32con.MF_GRAYED, 1024, 'Start Server') win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, 'Restart Server') win32gui.AppendMenu(menu, win32con.MF_STRING, 1026, 'Stop Server') win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, 0, '') win32gui.AppendMenu(menu, win32con.MF_STRING, 1027, 'Quit (pid:%i)' % os.getpid()) 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, ) win32api.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0) return 1
def onRightClick(self): menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, WM_TASKBARNOTIFY_MENUITEM_SHOW, u'显示') win32gui.AppendMenu(menu, win32con.MF_STRING, WM_TASKBARNOTIFY_MENUITEM_HIDE, u'隐藏') win32gui.AppendMenu(menu, win32con.MF_STRING, WM_TASKBARNOTIFY_MENUITEM_EXIT, u'退出') pos = win32gui.GetCursorPos() 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 on_taskbar_notify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, self.menu_mindustry_flags[self.game_state], 1024, "Show Mindustry Game") win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, "Exit Notifier") pos = win32gui.GetCursorPos() 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) return 1
def _on_taskbar_notify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_LBUTTONUP or lparam == win32con.WM_RBUTTONUP: log.error("You right clicked me.") menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, 1023, "Display Dialog") win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, "Exit program") 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) return 1
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, SEARCH_MENU_ID, "Search") win32gui.AppendMenu(menu, win32con.MF_STRING, PREFERENCES_MENU_ID, "Preferences") win32gui.AppendMenu(menu, win32con.MF_STRING, HELP_MENU_ID, "Help") win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, 1002, "") if maay.globalvars.indexer.isPaused(): win32gui.AppendMenu(menu, win32con.MF_STRING, PAUSE_INDEXING_MENU_ID, "Pause indexing for 15 minutes more") win32gui.AppendMenu(menu, win32con.MF_STRING, RESUME_INDEXING_MENU_ID, "Resume indexing") else: win32gui.AppendMenu(menu, win32con.MF_STRING, PAUSE_INDEXING_MENU_ID, "Pause indexing") win32gui.AppendMenu(menu, win32con.MF_STRING, EXIT_MENU_ID, "Exit") win32gui.SetMenuDefaultItem(menu, SEARCH_MENU_ID, 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) elif lparam == win32con.WM_LBUTTONDBLCLK: webbrowser.open("http://127.0.0.1:%d/maay/resultspool" % maay.constants.MAAY_PORT, autoraise=1) return 1
def __init__(self): msg_TaskbarRestart = win32gui.RegisterWindowMessage("TaskbarCreated") #定义一个新的窗口消息 message_map = { #建立函数命令字典,用于窗口回调函数的四个参数 msg_TaskbarRestart: self.OnRestart, win32con.WM_DESTROY: self.OnDestroy, win32con.WM_COMMAND: self.OnCommand, win32con.WM_USER+20 : self.OnTaskbarNotify, } self.menu = win32gui.CreatePopupMenu() #产生一个菜单句柄menu win32gui.AppendMenu(self.menu, win32con.MF_STRING, 1023, "显示/隐藏窗口") #给菜单添加子项,1027可以一直下去 win32gui.AppendMenu(self.menu, win32con.MF_STRING, 1024, "设置") win32gui.AppendMenu(self.menu, win32con.MF_STRING, 1025, "退出程序") #win32gui.EnableMenuItem(menu,1023,win32con.MF_GRAYED)#是用菜单句柄,对菜单进行操作 # Register the Window class. self.wc = win32gui.WNDCLASS() #局部变量wc改成窗口类的实例 hinst = self.wc.hInstance = win32api.GetModuleHandle(None) #获得程序模块句柄 self.wc.lpszClassName = ("PythonTaskbarDemo") #窗口类的类名 self.wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW #窗口类的style特征,水平重画和竖直重画 self.wc.hCursor = win32api.LoadCursor(0, win32con.IDC_ARROW) self.wc.hbrBackground = win32con.COLOR_WINDOW self.wc.lpfnWndProc = message_map # could also specify a wndproc,给窗口回调函数赋值 '''这里传进去的其实是函数指针,它里面保存的是我们定义的windowproc的入口地址''' # Don't blow up if class already registered to make testing easier try: classAtom = win32gui.RegisterClass(self.wc) #用wc将classatom注册为一个窗口类 except win32gui.error and err_info: if err_info.winerror != winerror.ERROR_CLASS_ALREADY_EXISTS: raise # Create the Window. style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU self.hwnd = win32gui.CreateWindow( self.wc.lpszClassName, "Taskbar Demo", style, #创建一个窗口 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 0, 0, hinst, None) win32gui.UpdateWindow(self.hwnd) #更新窗口 self._DoCreateIcons() win32gui.PumpMessages()
def on_taskbar_notify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_LBUTTONDBLCLK: win32gui.DestroyWindow(self.hwnd) elif lparam == win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, "Show timer") win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, "Settings") win32gui.AppendMenu(menu, win32con.MF_STRING, 1026, "Exit") pos = win32gui.GetCursorPos() 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) return 1
def on_rightclick(self, systray): #self.change_tooltip("You right clicked me.") menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING, 1023, "About") if len(self.custom_menu_items) > 0: for menu_item in self.custom_menu_items.itervalues(): if callable(menu_item['func']): try: is_checked = menu_item['func'](self, get_state = True) except Exception, e: print e else: is_checked = False flags = win32con.MF_STRING | (win32con.MF_CHECKED if is_checked else 0) win32gui.AppendMenu( menu, flags, menu_item['id'], menu_item['text'])
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, "Show Log") win32gui.AppendMenu(menu, win32con.MF_STRING, 1026, "About Us") win32gui.AppendMenu(menu, win32con.MF_STRING, 1027, "Option") win32gui.AppendMenu(menu, win32con.MF_STRING, 1028, "Upload Offline") win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, "Exit program") 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) return 1
def append(self, name, content): option = win32con.MF_STRING option |= self._get_option() win32gui.AppendMenu(self._curtarget, \ option,\ self._id, \ name) self._add_content(content)
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam==win32con.WM_LBUTTONUP: print "You clicked me." elif lparam==win32con.WM_LBUTTONDBLCLK: print "You double-clicked me - goodbye" win32gui.DestroyWindow(self.hwnd) elif lparam==win32con.WM_RBUTTONUP: print "You right clicked me." menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING, 1023, "Display Dialog") win32gui.AppendMenu( menu, win32con.MF_STRING, 1024, "Say Hello") win32gui.AppendMenu( menu, win32con.MF_STRING, 1025, "Exit program" ) 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) return 1
def onRightClick(self): """Override in subclasses""" if(self.owner.watchState == True): statestr = u"停止" else: statestr = u"开始" menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING, 1023, u"显示界面") win32gui.AppendMenu( menu, win32con.MF_STRING, 1024, statestr + u"监控") win32gui.AppendMenu( menu, win32con.MF_STRING, 1025, u"退出程序" ) 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) pass
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_LBUTTONUP: print "You clicked me." elif lparam == win32con.WM_LBUTTONDBLCLK: print "You double-clicked me - goodbye" win32gui.DestroyWindow(self.hwnd) elif lparam == win32con.WM_RBUTTONUP: print "You right clicked me." menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, 1023, gbk("切换帐号")) win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, gbk("切换帐号")) win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, gbk("断开连接")) win32gui.AppendMenu(menu, win32con.MF_STRING, 1026, gbk("退出服务")) pos = win32gui.GetCursorPos() 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) return 1
def createMenu(self, items): self.menu = win32gui.CreatePopupMenu() self.menuitems = [] for index, (key, value) in enumerate(items): # for index, key in enumerate(items): # for index, item in items : # key = items[index][0], value = items[index][1] self.menuitems.append(key) win32gui.AppendMenu(self.menu, win32con.MF_STRING, (1023 + index), value)
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam==win32con.WM_LBUTTONUP: print u"Tık" elif lparam==win32con.WM_LBUTTONDBLCLK: global kaynak print u"Çift Tık" self.balonGoster(u"Güncelleniyor...",u"Döviz Kurları (" + kaynak + ")") self.kurlariAl() #win32gui.DestroyWindow(self.hwnd) elif lparam==win32con.WM_RBUTTONUP: print u"Sağ Tık" menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING|win32con.MF_DISABLED, 0, u"Kaynak Seçimi") win32gui.AppendMenu( menu, win32con.MF_STRING, 1021, u"T.C.M.B.") win32gui.AppendMenu( menu, win32con.MF_STRING, 1022, u"Enpara") win32gui.AppendMenu( menu, win32con.MF_STRING, 1023, u"Investing") win32gui.AppendMenu( menu, win32con.MF_SEPARATOR, 0, '') win32gui.AppendMenu( menu, win32con.MF_STRING, 1099, u"Çıkış" ) pos = win32gui.GetCursorPos() 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) return 1
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam==win32con.WM_LBUTTONUP: print u"Tık" elif lparam==win32con.WM_LBUTTONDBLCLK: print u"Çift Tık" nid = (self.hwnd, 0) hicon = win32gui.LoadImage(win32api.GetModuleHandle(None), os.path.realpath("icon.ico"), win32con.IMAGE_ICON, 0, 0, win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE) win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY, \ (self.hwnd, 0, win32gui.NIF_INFO, win32con.WM_USER+20,\ hicon, "Balloon tooltip",u"Bu ikona sağ tıklayın.",200,u"Kullanım")) elif lparam==win32con.WM_RBUTTONUP: print u"Sağ Tık" menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING, 1023, u"Hiçbir zaman") win32gui.AppendMenu( menu, win32con.MF_STRING, 1024, u"20 dakika") win32gui.AppendMenu (menu, win32con.MF_SEPARATOR, 0, '') win32gui.AppendMenu( menu, win32con.MF_STRING, 1025, u"Çıkış" ) pos = win32gui.GetCursorPos() 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) return 1
def on_rightclick(self, systray): #self.change_tooltip("You right clicked me.") menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_STRING, 1023, "About") if len(self.custom_menu_items) > 0: for menu_item in self.custom_menu_items.values(): if callable(menu_item['func']): try: is_checked = menu_item['func'](self, get_state = True) except Exception as e: print(e) else: is_checked = False flags = win32con.MF_STRING | (win32con.MF_CHECKED if is_checked else 0) win32gui.AppendMenu( menu, flags, menu_item['id'], menu_item['text']) win32gui.AppendMenu( menu, win32con.MF_SEPARATOR, -1, "") win32gui.AppendMenu( menu, win32con.MF_STRING, 1024, "E&xit") win32gui.SetMenuDefaultItem(menu, 0, True) 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 on_tray_notify(self, hwnd, msg, wp, lp): if lp == win32con.WM_LBUTTONUP: # print "left click" # win32gui.SetForegroundWindow(self.hwnd) pass elif lp == win32con.WM_RBUTTONUP: # print "right click" menu = win32gui.CreatePopupMenu() for cid in sorted(self.commands.keys(), reverse=True): name, _ = self.commands[cid] win32gui.AppendMenu(menu, win32con.MF_STRING, cid, name) pos = win32gui.GetCursorPos() 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) return True
def submenu_end(self): # 親ユニットのハンドルを取ってくる target = None try: target = self._targetstack.pop() except IndexError: return # 現ユニット → 親ユニット に連結 option = win32con.MF_POPUP option |= self._get_option() win32gui.AppendMenu(target.get_target(), \ option,\ self._curtarget, \ target.get_name()) # 親ユニットをターゲットにする self._curtarget = target.get_target()
def create_menu(menu, item, text): # Normal menu if isinstance(item, int): flag = win32con.MF_STRING # Sub menu elif isinstance(item, list): flag = win32con.MF_POPUP sub_menu = win32gui.CreatePopupMenu() for s, v in item: sub_menu = TrayIcon.create_menu(sub_menu, v, s) item = sub_menu # Separotor elif item is None: flag = win32con.MF_SEPARATOR item = 0 text = '' else: raise TrayIconPopupMenuError() win32gui.AppendMenu(menu, flag, item, text) return menu
def InitMenu(hwnd): try: #初始化菜单 f = open(GetParentPath("\\menu\\menus_map.json"), "r") s = f.read() j = json.loads(s) if (getAppCfg("is_show_menu") == "0"): return global menuData menuData = j["menus"] menus = win32gui.CreateMenu() for d in menuData: #print d["id"] #print d["title"] win32gui.AppendMenu(menus, win32con.MF_STRING | win32con.MF_ENABLED, int(d["id"]), d["title"]) win32gui.SetMenu(hwnd, menus) except: win32gui.MessageBox(None, u"初始化菜单失败", u"错误", 0)
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam==win32con.WM_LBUTTONUP: pass elif lparam==win32con.WM_LBUTTONDBLCLK: win32gui.DestroyWindow(self.hwnd) elif lparam==win32con.WM_RBUTTONUP: menu = win32gui.CreatePopupMenu() win32gui.AppendMenu( menu, win32con.MF_GRAYED | win32con.MF_STRING, TrayThermostat.Connected, "Connected" if self.__connected else "Disconnected") win32gui.AppendMenu( menu, self.__flag_set(TrayThermostat.Automatic), TrayThermostat.Automatic, "Automatic") win32gui.AppendMenu( menu, self.__flag_set(TrayThermostat.V12), TrayThermostat.V12, "12V") win32gui.AppendMenu( menu, self.__flag_set(TrayThermostat.V5), TrayThermostat.V5, "5V" ) win32gui.AppendMenu( menu, self.__flag_set(TrayThermostat.V0), TrayThermostat.V0, "Off" ) win32gui.AppendMenu( menu, win32con.MF_STRING, TrayThermostat.Exit, "Exit" ) 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) return 1
def append_separator(self): win32gui.AppendMenu(self._curtarget, \ win32con.MF_SEPARATOR | self._get_option(),\ 0, \ "")
def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_LBUTTONUP: pass elif lparam == win32con.WM_LBUTTONDBLCLK: self.OnCommand(hwnd, win32con.WM_COMMAND, self.MENU_OPEN_CLAM, 0) elif lparam == win32con.WM_RBUTTONUP: if self._nomenu: hwnd = win32gui.FindWindow('#32770', 'Blindata Update') if hwnd: try: win32gui.ShowWindow(hwnd, win32con.SW_SHOW) win32gui.SetForegroundWindow(hwnd) win32gui.SetFocus(hwnd) except Exception, e: print 'ShowWindow Error: %s' % str(e) return 1 # create scheduler menu scheduler_popup = win32gui.CreatePopupMenu() win32gui.AppendMenu(scheduler_popup, win32con.MF_STRING, self.MENU_CONFIGURESCHEDULER, "&Configure Scheduler") if not self._processes: flags = win32con.MF_GRAYED else: flags = 0 # create scheduled tasks menu tasks_popup = win32gui.CreatePopupMenu() i = 0 for scan in self._scheduledScans: win32gui.AppendMenu(tasks_popup, win32con.MF_STRING, self.MENU_RUNSCHEDULE + i, scan.Description) i += 1 if not i: flags2 = win32con.MF_GRAYED else: flags2 = 0 win32gui.InsertMenu( scheduler_popup, self.MENU_CONFIGURESCHEDULER, win32con.MF_BYCOMMAND | win32con.MF_POPUP | flags2, tasks_popup, "&Run Scheduled Scan") win32gui.InsertMenu( scheduler_popup, flags, win32con.MF_BYCOMMAND | win32con.MF_STRING | flags, self.MENU_TERMINATESCHEDULE, "&Stop All Running Tasks Now") # create reports menu reports_popup = win32gui.CreatePopupMenu() if not len(self._config.Get('ClamAV', 'LogFile')): flags = win32con.MF_GRAYED else: flags = 0 win32gui.InsertMenu( reports_popup, 0, win32con.MF_BYCOMMAND | win32con.MF_STRING | flags, self.MENU_SHOWSCANLOG, "&Virus Scan Report") if not len(self._config.Get('Updates', 'DBUpdateLogFile')): flags = win32con.MF_GRAYED else: flags = 0 win32gui.InsertMenu( reports_popup, self.MENU_SHOWSCANLOG, win32con.MF_BYCOMMAND | win32con.MF_STRING | flags, self.MENU_SHOWUPDATELOG, "&Virus Database Update Report") # create main menu menu = win32gui.CreatePopupMenu() win32gui.AppendMenu(menu, win32con.MF_STRING, self.MENU_OPEN_CLAM, "&Open Blindata") win32gui.AppendMenu(menu, win32con.MF_STRING, self.MENU_UPDATE_DB, "&Download Virus Database Update") win32gui.AppendMenu(menu, win32con.MF_STRING, self.MENU_CONFIGURE, "&Configure Blindata") win32gui.AppendMenu(menu, win32con.MF_POPUP, scheduler_popup, "&Scheduler") win32gui.AppendMenu(menu, win32con.MF_POPUP, reports_popup, "Display &Reports") win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, 0, "") win32gui.AppendMenu(menu, win32con.MF_STRING, self.MENU_CHECK_UPDATE, "Check &Latest Version") win32gui.AppendMenu(menu, win32con.MF_STRING, self.MENU_CLAMWIN_WEB, "&Visit Blindata Website") win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, 0, "") win32gui.AppendMenu(menu, win32con.MF_STRING, self.MENU_EXIT, "&Exit") pos = win32gui.GetCursorPos() # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp try: win32gui.SetForegroundWindow(self.hwnd) except: pass try: win32gui.SetMenuDefaultItem(menu, 0, 1) except NameError: pass win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) win32gui.SendMessage(self.hwnd, win32con.WM_NULL, 0, 0)
win32gui.AppendMenu(menu, win32con.MF_STRING, 1023, "About") if len(self.custom_menu_items) > 0: for menu_item in self.custom_menu_items.itervalues(): if callable(menu_item['func']): try: is_checked = menu_item['func'](self, get_state=True) except Exception, e: print e else: is_checked = False flags = win32con.MF_STRING | (win32con.MF_CHECKED if is_checked else 0) win32gui.AppendMenu(menu, flags, menu_item['id'], menu_item['text']) win32gui.AppendMenu(menu, win32con.MF_SEPARATOR, -1, "") win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, "E&xit") win32gui.SetMenuDefaultItem(menu, 0, True) pos = get_cursor_pos() # From MSDN: # To display a context menu for a notification icon, the current window must be the foreground window # before the application calls TrackPopupMenu or TrackPopupMenuEx. Otherwise, the menu will not disappear # when the user clicks outside of the menu or the window that created the menu (if it is visible). # However, when the current window is the foreground window, the second time this menu is displayed, # it displays and then immediately disappears. To correct this, you must force a task switch # to the application that called TrackPopupMenu. This is done by posting a benign message to the window # or thread. 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)