예제 #1
0
    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.
예제 #2
0
 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.
예제 #3
0
    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
예제 #4
0
    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.
예제 #5
0
    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.
예제 #6
0
 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)
예제 #7
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)
예제 #8
0
파일: context.py 프로젝트: anandu467/Sorty
    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.
예제 #9
0
    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.
예제 #10
0
    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.