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 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 getFilesSelected(self): 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) files = [] for i in xrange(num_files): fpath = shell.DragQueryFile(sm.data_handle, i) files.append(fpath) return files
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 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.