def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): if (uFlags & 0x000F) != shellcon.CMF_NORMAL: return 0 format_etc = win32con.CF_HDROP, None, 1, -1, pythoncom.TYMED_HGLOBAL sm = self.dataobj.GetData(format_etc) num_files = shell.DragQueryFile(sm.data_handle, -1) if num_files != 1: return 0 folder_name = shell.DragQueryFile(sm.data_handle, 0) if not os.path.isdir(folder_name): return 0 self.folder = folder_name idCmd = idCmdFirst win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, u'统计代码行数') indexMenu += 1 idCmd += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd - idCmdFirst # Must return number of menu items we added.
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): print 'QueryContextMenu' # Query the items clicked on format_etc = win32con.CF_HDROP, None, 1, -1, pythoncom.TYMED_HGLOBAL try: sm = self.dataobj.GetData(format_etc) except pythoncom.com_error: return 0 num_files = shell.DragQueryFile(sm.data_handle, -1) msg = "Scan For Viruses With ClamWin" if num_files>1: # we aren't handling multiple files return 0 else: self._fname = shell.DragQueryFile(sm.data_handle, 0) idCmd = idCmdFirst items = [] if (uFlags & 0x000F) == shellcon.CMF_NORMAL or uFlags & shellcon.CMF_EXPLORE: items.append(msg) win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR|win32con.MF_BYPOSITION, 0, None) indexMenu += 1 for item in items: win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_STRING|win32con.MF_BYPOSITION, idCmd, item) indexMenu += 1 idCmd += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR|win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd-idCmdFirst # Must return number of menu items we added.
def AddSystemReloadMenu(wnd): hSysMenu = win32gui.GetSystemMenu(wnd.GetHandle(), False) if not hSysMenu: return False win32gui.InsertMenu(hSysMenu, 0, win32con.MF_BYPOSITION | win32con.MF_SEPARATOR, 0, ''); win32gui.InsertMenu(hSysMenu, 0, win32con.MF_BYPOSITION, SYS_MENU_RELOAD_MODULES, 'Reload Modules') def HandleSystemMenu(wnd, msg, wparam, lparam): wnd.__class__._reload_modules() return False AddCallback(HandleSystemMenu, wnd, win32con.WM_SYSCOMMAND, SYS_MENU_RELOAD_MODULES, None) return True
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): print("QCM", hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags) # Query the items clicked on format_etc = win32con.CF_HDROP, None, 1, -1, pythoncom.TYMED_HGLOBAL sm = self.dataobj.GetData(format_etc) num_files = shell.DragQueryFile(sm.data_handle, -1) if num_files > 1: msg = "&Hello from Python (with %d files selected)" % num_files else: fname = shell.DragQueryFile(sm.data_handle, 0) msg = "&Hello from Python (with '%s' selected)" % fname idCmd = idCmdFirst items = ["First Python content menu item"] if (uFlags & 0x000F ) == shellcon.CMF_NORMAL: # Check == here, since CMF_NORMAL=0 print("CMF_NORMAL...") items.append(msg) elif uFlags & shellcon.CMF_VERBSONLY: print("CMF_VERBSONLY...") items.append(msg + " - shortcut") elif uFlags & shellcon.CMF_EXPLORE: print("CMF_EXPLORE...") items.append(msg + " - normal file, right-click in Explorer") elif uFlags & CMF_DEFAULTONLY: print("CMF_DEFAULTONLY...\r\n") else: print("** unknown flags", uFlags) win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 for item in items: win32gui.InsertMenu( hMenu, indexMenu, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, item, ) indexMenu += 1 idCmd += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd - idCmdFirst # Must return number of menu items we added.
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): if (uFlags & 0x000F) != shellcon.CMF_NORMAL: return format_etc = win32con.CF_HDROP, None, 1, -1, pythoncom.TYMED_HGLOBAL sm = self.dataobj.GetData(format_etc) num_files = shell.DragQueryFile(sm.data_handle, -1) if num_files != 1: return items = [] file_name = shell.DragQueryFile(sm.data_handle, 0) if not os.path.isdir(file_name): folder_name = os.path.dirname(file_name) else: folder_name = file_name msg = "Cmd Window at %s" % folder_name items.append(msg) self.folder = folder_name idCmd = idCmdFirst win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 for item in items: win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, item) indexMenu += 1 idCmd += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd - idCmdFirst # Must return number of menu items we added.
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)
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)
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): print "QCM", hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags # Query the items clicked on files = self.getFilesSelected() fname = files[0] idCmd = idCmdFirst isdir = os.path.isdir(fname) in_folder = all([f_path.startswith(self.folder) for f_path in files]) win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 menu = win32gui.CreatePopupMenu() win32gui.InsertMenu( hMenu, indexMenu, win32con.MF_STRING | win32con.MF_BYPOSITION | win32con.MF_POPUP, menu, self.brand) win32gui.SetMenuItemBitmaps(hMenu, menu, 0, self.hicon, self.hicon) # idCmd+=1 indexMenu += 1 if in_folder: if len(files) == 1: if isdir: win32gui.InsertMenu(menu, 0, win32con.MF_STRING, idCmd, "Item 1") idCmd += 1 else: win32gui.InsertMenu(menu, 0, win32con.MF_STRING, idCmd, "Item 2") win32gui.SetMenuItemBitmaps(menu, idCmd, 0, self.hicon, self.hicon) idCmd += 1 else: win32gui.InsertMenu(menu, 0, win32con.MF_STRING, idCmd, "Item 3") win32gui.SetMenuItemBitmaps(menu, idCmd, 0, self.hicon, self.hicon) idCmd += 1 if idCmd > idCmdFirst: win32gui.InsertMenu(menu, 1, win32con.MF_SEPARATOR, 0, None) win32gui.InsertMenu(menu, 2, win32con.MF_STRING, idCmd, "Item 4") win32gui.SetMenuItemBitmaps(menu, idCmd, 0, self.hicon, self.hicon) idCmd += 1 win32gui.InsertMenu(menu, 3, win32con.MF_STRING, idCmd, "Item 5") win32gui.SetMenuItemBitmaps(menu, idCmd, 0, self.hicon, self.hicon) idCmd += 1 win32gui.InsertMenu(menu, 4, win32con.MF_SEPARATOR, 0, None) win32gui.InsertMenu(menu, 5, win32con.MF_STRING | win32con.MF_DISABLED, idCmd, "Item 6") win32gui.SetMenuItemBitmaps(menu, idCmd, 0, self.hicon, self.hicon) idCmd += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd - idCmdFirst # Must return number of menu items we added.
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): print("QCM", hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags) # Query the items clicked on format_etc = win32con.CF_HDROP, None, 1, -1, pythoncom.TYMED_HGLOBAL sm = self.dataobj.GetData(format_etc) num_files = shell.DragQueryFile(sm.data_handle, -1) firstFile = shell.DragQueryFile(sm.data_handle, 0) folder = path.dirname(firstFile) self.folderObject = TaggerFolder(folder) self.cmdUnitMap = [] # fnames = [shell.DragQueryFile(sm.data_handle, i) for i in range(num_files)] # TaggerFile is not for multifiles, so just pause toggleTagunits self.fileObject = TaggerFile(self.folderObject, path.basename(firstFile)) win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 flag = win32con.MF_STRING | win32con.MF_BYPOSITION idCmd = idCmdFirst if num_files > 1: pass # if more than one file selected, then add the tag to all of them. # what if want to remove the tag from all of them? rare case, right? else: win32gui.InsertMenu( hMenu, indexMenu, flag, idCmd, self.fileObject.getTitle() or "- unspecified title -") indexMenu += 1 idCmd += 1 submenu = win32gui.CreatePopupMenu() subindex = 0 for tagClass in self.fileObject.getTag(): win32gui.InsertMenu(submenu, subindex, flag | win32con.MF_DISABLED, 0, "- %s -" % tagClass["name"]) subindex += 1 for tagItem in tagClass["tags"]: self.cmdUnitMap.append(tagItem["tagunit"]) f = flag if tagItem["checked"]: f |= win32con.MF_CHECKED win32gui.InsertMenu(submenu, subindex, f, idCmd, tagItem["name"]) subindex += 1 idCmd += 1 win32gui.InsertMenu( hMenu, indexMenu, win32con.MF_POPUP | win32con.MF_STRING | win32con.MF_BYPOSITION, submenu, APP) indexMenu += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd - idCmdFirst # Must return number of menu items we added.
def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags): idCmd = idCmdFirst win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 if self.folderObject.isResultFolder: itm = "Clean Result" else: itm = "Manage Tags" win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, itm) idCmd += 1 indexMenu += 1 submenu = win32gui.CreatePopupMenu() subindex = 0 win32gui.InsertMenu(submenu, subindex, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, "Complex Filter") subindex += 1 idCmd += 1 win32gui.InsertMenu(submenu, subindex, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, "Refresh File Name") subindex += 1 idCmd += 1 win32gui.InsertMenu(submenu, subindex, win32con.MF_STRING | win32con.MF_BYPOSITION, idCmd, "Refresh UID") subindex += 1 idCmd += 1 win32gui.InsertMenu( hMenu, indexMenu, win32con.MF_POPUP | win32con.MF_STRING | win32con.MF_BYPOSITION, submenu, "Util") indexMenu += 1 self.cmdUnitMap = [] flag = win32con.MF_STRING | win32con.MF_BYPOSITION submenu = win32gui.CreatePopupMenu() subindex = 0 for tagClass in self.folderObject.getTag(): win32gui.InsertMenu(submenu, subindex, flag | win32con.MF_DISABLED, 0, "- %s -" % tagClass["name"]) subindex += 1 for tagItem in tagClass["tags"]: self.cmdUnitMap.append(tagItem["tagunit"]) f = flag if tagItem["checked"]: f |= win32con.MF_CHECKED win32gui.InsertMenu(submenu, subindex, f, idCmd, tagItem["name"]) subindex += 1 idCmd += 1 win32gui.InsertMenu( hMenu, indexMenu, win32con.MF_POPUP | win32con.MF_STRING | win32con.MF_BYPOSITION, submenu, "Quick Filter") indexMenu += 1 win32gui.InsertMenu(hMenu, indexMenu, win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0, None) indexMenu += 1 return idCmd - idCmdFirst # Must return number of menu items we added.