zoukankan      html  css  js  c++  java
  • windows下python管理右键菜单

    实现很简单,不记得什么时候写的了,贴出来希望能有所价值

    """
    Windows中创建右键菜单
    """
    import os
    import sys
    import winreg
    import ctypes
    
    
    def is_user_admin():
        """ 检查admin """
        return ctypes.windll.shell32.IsUserAnAdmin()
    
    
    def run_as_admin():
        """ 管理员运行 """
        script = os.path.abspath(sys.argv[0])
        args = ' '.join(sys.argv[1:]) if len(sys.argv) > 1 else ''
        from win32com.shell.shell import ShellExecuteEx
        ShellExecuteEx(lpFile=sys.executable, lpParameters=f"{script} {args}",
                       nShow=1, lpVerb='runas')
        return
    
    
    def create_right_menu(name, icon, command):
        """ 创建右键菜单 """
        key_root = winreg.HKEY_CLASSES_ROOT
        key_path = fr"Directory\Background\shell\{name}"
        with winreg.CreateKey(key_root, key_path) as key:
            winreg.SetValueEx(key, "Icon", 0, winreg.REG_SZ, icon or '')
            with winreg.CreateKey(key, "command") as key2:
                winreg.SetValueEx(key2, "", 0, winreg.REG_SZ, command or '')
    
    
    def remove_right_menu(name):
        """删除右键菜单"""
        """
        // from winreg.h
        #define HKEY_CLASSES_ROOT                   (( HKEY ) (ULONG_PTR)((LONG)0x80000000) )
        #define HKEY_CURRENT_USER                   (( HKEY ) (ULONG_PTR)((LONG)0x80000001) )
        #define HKEY_LOCAL_MACHINE                  (( HKEY ) (ULONG_PTR)((LONG)0x80000002) )
        #define HKEY_USERS                          (( HKEY ) (ULONG_PTR)((LONG)0x80000003) )
        #define HKEY_PERFORMANCE_DATA               (( HKEY ) (ULONG_PTR)((LONG)0x80000004) )
        #define HKEY_PERFORMANCE_TEXT               (( HKEY ) (ULONG_PTR)((LONG)0x80000050) )
        #define HKEY_PERFORMANCE_NLSTEXT            (( HKEY ) (ULONG_PTR)((LONG)0x80000060) )
        #if (WINVER >= 0x0400)
        #define HKEY_CURRENT_CONFIG                 (( HKEY ) (ULONG_PTR)((LONG)0x80000005) )
        #define HKEY_DYN_DATA                       (( HKEY ) (ULONG_PTR)((LONG)0x80000006) )
        #define HKEY_CURRENT_USER_LOCAL_SETTINGS    (( HKEY ) (ULONG_PTR)((LONG)0x80000007) )
        """
        key_root = 0x80000000  # winreg.HKEY_CLASSES_ROOT
        key_path = fr"Directory\Background\shell\{name}"
        ctypes.windll.Advapi32.RegDeleteTreeW(key_root, key_path)
    
    
    def main():
        import argparse
        parser = argparse.ArgumentParser()
        parser.add_argument("name", type=str, help="Name.")
        parser.add_argument("-i", "--icon", help="Icon.")
        parser.add_argument("-c", "--command", help="Command.")
        parser.add_argument("-r", "--remove", action="store_true",
                            help="Remove with name.")
        args = parser.parse_args()
    
        if not is_user_admin():
            run_as_admin()
            return
    
        try:
            if args.remove:
                remove_right_menu(args.name)
                return
    
            create_right_menu(args.name, args.icon, args.command)
        except Exception as ex:
            print(ex)
            os.system('pause')
    
    
    if __name__ == '__main__':
        main()
    
    
  • 相关阅读:
    CentOS7 彻底关闭 IPV6
    查看 nodejs 安装包的相关指令
    npm 查看全局安装过的包
    更换 nodejs npm 镜像为 淘宝 镜像
    更改 Centos 6 的 yum 源
    Nodejs 实现 WebSocket 太容易了吧!!
    解决国内 NPM 安装依赖速度慢问题
    详解 HTML5 中的 WebSocket 及实例代码-做弹幕
    JSmpeg-用JavaScript编写的视频播放器
    适用于Centos6.x系统的15项优化脚本
  • 原文地址:https://www.cnblogs.com/wuyaSama/p/10768026.html
Copyright © 2011-2022 走看看