def get_installaton_path_on_windows(fc_name):
    # tested for FreeCAD 0.18
    import itertools
    from winreg import (
        ConnectRegistry,
        HKEY_LOCAL_MACHINE,
        OpenKeyEx,
        QueryValueEx,
        CloseKey,
        KEY_READ,
        EnumKey,
        WindowsError,
    )

    try:
        root = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
        reg_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
        akey = OpenKeyEx(root, reg_path, 0, KEY_READ)
        for i in itertools.count():
            try:
                subname = EnumKey(akey, i)
            except WindowsError:
                break
            if subname.lower().find(fc_name.lower()) > 0:
                subkey = OpenKeyEx(akey, subname, 0, KEY_READ)
                pathname, regtype = QueryValueEx(subkey, "InstallLocation")
                CloseKey(subkey)
                return os.path.expandvars(pathname)
        # close key and root
        CloseKey(akey)
        CloseKey(root)
        return None
    except OSError:
        return None
Пример #2
0
def __win32_finddll():
    from winreg import OpenKey, CloseKey, EnumKey, QueryValueEx, \
        QueryInfoKey, HKEY_LOCAL_MACHINE
    from distutils.version import LooseVersion
    import os

    dlls = []
    # Look up different variants of Ghostscript and take the highest
    # version for which the DLL is to be found in the filesystem.
    for key_name in ('AFPL Ghostscript', 'Aladdin Ghostscript',
                     'GPL Ghostscript', 'GNU Ghostscript'):
        try:
            k1 = OpenKey(HKEY_LOCAL_MACHINE, "Software\\%s" % key_name)
            for num in range(0, QueryInfoKey(k1)[0]):
                version = EnumKey(k1, num)
                try:
                    k2 = OpenKey(k1, version)
                    dll_path = QueryValueEx(k2, 'GS_DLL')[0]
                    CloseKey(k2)
                    if os.path.exists(dll_path):
                        dlls.append((LooseVersion(version), dll_path))
                except WindowsError:
                    pass
            CloseKey(k1)    
        except WindowsError:
            pass
    if dlls:
        dlls.sort()
        return dlls[-1][-1]
    else:
        return None
Пример #3
0
def openurl(url):
    if platform == 'win32':
        # On Windows webbrowser.open calls os.startfile which calls ShellExecute which can't handle long arguments,
        # so discover and launch the browser directly.
        # https://blogs.msdn.microsoft.com/oldnewthing/20031210-00/?p=41553

        try:
            hkey = OpenKeyEx(HKEY_CURRENT_USER, r'Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice')
            (value, typ) = QueryValueEx(hkey, 'ProgId')
            CloseKey(hkey)
            if value in ['IE.HTTP', 'AppXq0fevzme2pys62n3e0fbqa7peapykr8v']:
                # IE and Edge can't handle long arguments so just use webbrowser.open and hope
                # https://blogs.msdn.microsoft.com/ieinternals/2014/08/13/url-length-limits/
                cls = None
            else:
                cls = value
        except:
            cls  = 'https'

        if cls:
            try:
                hkey = OpenKeyEx(HKEY_CLASSES_ROOT, r'%s\shell\open\command' % cls)
                (value, typ) = QueryValueEx(hkey, None)
                CloseKey(hkey)
                if 'iexplore' not in value.lower():
                    if '%1' in value:
                        subprocess.Popen(buf.value.replace('%1', url))
                    else:
                        subprocess.Popen('%s "%s"' % (buf.value, url))
                    return
            except:
                pass

    webbrowser.open(url)
Пример #4
0
    def find_bluestacks4_hyperv(serial):
        """
        Find dynamic serial of Bluestacks4 Hyper-v Beta.
        Args:
            serial (str): 'bluestacks4-hyperv', 'bluestacks4-hyperv-2' for multi instance, and so on.
        Returns:
            str: 127.0.0.1:{port}
        """
        from winreg import ConnectRegistry, OpenKey, QueryInfoKey, EnumValue, CloseKey, HKEY_LOCAL_MACHINE

        logger.info("Use Bluestacks4 Hyper-v Beta")
        if serial == "bluestacks4-hyperv":
            folder_name = "Android"
        else:
            folder_name = f"Android_{serial[19:]}"

        logger.info("Reading Realtime adb port")
        reg_root = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
        sub_dir = f"SOFTWARE\\BlueStacks_bgp64_hyperv\\Guests\\{folder_name}\\Config"
        bs_keys = OpenKey(reg_root, sub_dir)
        bs_keys_count = QueryInfoKey(bs_keys)[1]
        for i in range(bs_keys_count):
            key_name, key_value, key_type = EnumValue(bs_keys, i)
            if key_name == "BstAdbPort":
                logger.info(f"New adb port: {key_value}")
                serial = f"127.0.0.1:{key_value}"
                break

        CloseKey(bs_keys)
        CloseKey(reg_root)
        return serial
Пример #5
0
    def set_keys(self):

        baseOfficeKeyPath = r"Software\Microsoft\Office"
        installedVersions = list()
        try:
            officeKey = OpenKey(HKEY_CURRENT_USER, baseOfficeKeyPath, 0,
                                KEY_READ)
            for currentKey in range(0, QueryInfoKey(officeKey)[0]):
                isVersion = True
                officeVersion = EnumKey(officeKey, currentKey)
                if "." in officeVersion:
                    for intCheck in officeVersion.split("."):
                        if not intCheck.isdigit():
                            isVersion = False
                            break

                    if isVersion:
                        installedVersions.append(officeVersion)
            CloseKey(officeKey)
        except WindowsError:
            # Office isn't installed at all
            return

        for oVersion in installedVersions:
            key = CreateKeyEx(
                HKEY_CURRENT_USER,
                r"{0}\{1}\Publisher\Security".format(baseOfficeKeyPath,
                                                     oVersion), 0,
                KEY_SET_VALUE)

            SetValueEx(key, "VBAWarnings", 0, REG_DWORD, 1)
            SetValueEx(key, "AccessVBOM", 0, REG_DWORD, 1)
            SetValueEx(key, "ExtensionHardening", 0, REG_DWORD, 0)
            CloseKey(key)
Пример #6
0
    def addFileAssociation(self):
        """ Associate *.fmu with the FMPy GUI """

        try:
            from winreg import HKEY_CURRENT_USER, KEY_WRITE, REG_SZ, OpenKey, CreateKey, SetValueEx, CloseKey

            python = sys.executable

            root, ext = os.path.splitext(python)

            pythonw = root + 'w' + ext

            if os.path.isfile(pythonw):
                target = pythonw
            else:
                target = python

            key_path = r'Software\Classes\fmpy.gui\shell\open\command'

            CreateKey(HKEY_CURRENT_USER, key_path)
            key = OpenKey(HKEY_CURRENT_USER, key_path, 0, KEY_WRITE)
            SetValueEx(key, '', 0, REG_SZ, '"%s" -m fmpy.gui "%%1"' % target)
            CloseKey(key)

            key_path = r'SOFTWARE\Classes\.fmu'

            CreateKey(HKEY_CURRENT_USER, key_path)
            key = OpenKey(HKEY_CURRENT_USER, key_path, 0, KEY_WRITE)
            SetValueEx(key, '', 0, REG_SZ, 'fmpy.gui')
            CloseKey(key)

            QMessageBox.information(self, "File association added", "The file association for *.fmu has been added")
        except Exception as e:
            QMessageBox.critical(self, "File association failed", "The file association for *.fmu could not be added. %s" % e)
Пример #7
0
 def get_info(self, reg):
     key = OpenKey(HKEY_CURRENT_USER, reg)
     conns = []
     try:
         i = 0
         while 1:
             name = EnumKey(key, i)
             conns.append(name)
             i += 1
     except:
         pass
     hosts = []
     usernames = []
     passwords = []
     for i in conns:
         key = OpenKey(HKEY_CURRENT_USER, reg + '\\' + i)
         try:
             j = 0
             while 1:
                 name, value, type = EnumValue(key, j)
                 if name == 'Host':
                     hosts.append(value)
                 if name == 'UserName':
                     usernames.append(value)
                 if name == 'Pwd':
                     passwords.append(value)
                 j += 1
         except:
             pass
     CloseKey(key)
     for i in range(len(hosts)):
         if len(hosts[i]) is not 0:
             print 'host_name:' + hosts[i] + '  ' + 'username:'******'  ' + 'password:' + passwords[i]
    def get_registry_key_value(root_folder: str, key_path: str, sub_key: str):

        if "hkey_local_machine" in root_folder.lower():
            root_folder = ConnectRegistry(None, HKEY_LOCAL_MACHINE)

        elif "hkey_classes_root" in root_folder.lower():
            root_folder = ConnectRegistry(None, HKEY_CLASSES_ROOT)

        elif "hkey_current_config" in root_folder.lower():
            root_folder = ConnectRegistry(None, HKEY_CURRENT_CONFIG)

        elif "hkey_current_user" in root_folder.lower():
            root_folder = ConnectRegistry(None, HKEY_CURRENT_USER)

        elif "hkey_users" in root_folder.lower():
            root_folder = ConnectRegistry(None, HKEY_USERS)

        try:
            registry_key = OpenKey(root_folder, key_path)

            system_value, reg_word = QueryValueEx(registry_key, sub_key)

            CloseKey(registry_key)

        except:
            # key not found
            system_value = None

        return system_value
Пример #9
0
 def get_user_path() -> str:
     key = OpenKeyEx(HKEY_CURRENT_USER, 'Environment')
     try:
         path, _ = QueryValueEx(key, 'Path')
     finally:
         CloseKey(key)
     return path
Пример #10
0
 def get_system_path() -> str:
     key = OpenKeyEx(HKEY_LOCAL_MACHINE, r'System\CurrentControlSet\Control\Session Manager\Environment')
     try:
         path, _ = QueryValueEx(key, 'Path')
     finally:
         CloseKey(key)
     return path
Пример #11
0
def pathExists(hkey, regPath):
    try:
        reg = OpenKey(hkey, regPath)
    except WindowsError:
        return False
    CloseKey(reg)
    return True
Пример #12
0
def win32_ver(release='', version='', csd='', ptype=''):
    try:
        from sys import getwindowsversion
    except ImportError:
        return release, version, csd, ptype
    try:
        from winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE
    except ImportError:
        from _winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE
    winver = getwindowsversion()
    maj, min, build = winver.platform_version or winver[:3]
    version = '{0}.{1}.{2}'.format(maj, min, build)
    release = _WIN32_CLIENT_RELEASES.get(
        (maj, min)) or _WIN32_CLIENT_RELEASES.get((maj, None)) or release
    if winver[:2] == (maj, min):
        try:
            csd = 'SP{}'.format(winver.service_pack_major)
        except AttributeError:
            if csd[:13] == 'Service Pack ':
                csd = 'SP' + csd[13:]
    if getattr(winver, 'product_type', None) == 3:
        release = _WIN32_SERVER_RELEASES.get(
            (maj, min)) or _WIN32_SERVER_RELEASES.get((maj, None)) or release
    key = None
    try:
        key = OpenKeyEx(HKEY_LOCAL_MACHINE,
                        'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion')
        ptype = QueryValueEx(key, 'CurrentType')[0]
    except:
        pass
    finally:
        if key:
            CloseKey(key)
    return release, version, csd, ptype
Пример #13
0
def handle_windows_reg_key():
    """
    Attempts to add this app to the list of apps that launch at startup

    checks for value in registry, creates one if it doesn't exist
    will update key with new location of .exe if it was moved
    """

    from winreg import OpenKey, CloseKey, QueryValueEx, SetValueEx, ConnectRegistry, \
        HKEY_CURRENT_USER, REG_SZ, KEY_ALL_ACCESS

    name = 'wallspotify'
    path = sys.executable
    registry = ConnectRegistry(None, HKEY_CURRENT_USER)
    key = OpenKey(registry, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 0, KEY_ALL_ACCESS)

    def add():
        SetValueEx(key, name, 0, REG_SZ, path)

    try:
        data = QueryValueEx(key, name)
        if data[0] != path:
            add()
    except WindowsError:
        add()

    CloseKey(key)
Пример #14
0
    def find_archive():
        reg_keys = [
            # Have confirmed sigthings of these keys:
            (HKEY_LOCAL_MACHINE, "Software\\Valve\\Steam", "InstallPath"),
            (HKEY_LOCAL_MACHINE, "Software\\Wow6432node\\Valve\\Steam",
             "InstallPath"),
            (HKEY_CURRENT_USER, "Software\\Valve\\Steam", "SteamPath"),

            # All the other possible combination, just to try everything:
            (HKEY_CURRENT_USER, "Software\\Wow6432node\\Valve\\Steam",
             "SteamPath"),
            (HKEY_LOCAL_MACHINE, "Software\\Valve\\Steam", "SteamPath"),
            (HKEY_LOCAL_MACHINE, "Software\\Wow6432node\\Valve\\Steam",
             "SteamPath"),
            (HKEY_CURRENT_USER, "Software\\Valve\\Steam", "InstallPath"),
            (HKEY_CURRENT_USER, "Software\\Wow6432node\\Valve\\Steam",
             "InstallPath"),
        ]

        for key, subkey, valkey in reg_keys:
            try:
                hkey = OpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE)
                try:
                    value, valtype = QueryValueEx(hkey, valkey)
                    if valtype == REG_SZ:
                        return pjoin(
                            value,
                            "steamapps\\common\\CookServeDelicious3\\data.win")
                finally:
                    CloseKey(hkey)
            except FileNotFoundError:
                pass

        raise FileNotFoundError('game archive not found')
Пример #15
0
    def addFileAssociation(self):
        """ Associate *.fmu with the FMPy GUI """

        try:
            from winreg import HKEY_CURRENT_USER, KEY_WRITE, REG_SZ, OpenKey, CreateKey, SetValueEx, CloseKey

            env = os.environ.get('CONDA_DEFAULT_ENV_')

            if env is None:
                python = sys.executable
                root, ext = os.path.splitext(python)
                pythonw = root + 'w' + ext

                if os.path.isfile(pythonw):
                    python = pythonw

                target = '"%s" -m fmpy.gui "%%1"' % python
            else:
                # activate the conda environment
                for path in os.environ["PATH"].split(os.pathsep):
                    activate = os.path.join(path, 'activate.bat')
                    if os.path.isfile(activate):
                        break

                windir = os.environ['WINDIR']
                cmd = os.path.join(windir, 'System32', 'cmd.exe')

                target = r'%s /C ""%s" %s && python -m fmpy.gui %%1"' % (cmd, activate, env)

            key_path = r'Software\Classes\fmpy.gui\shell\open\command'

            CreateKey(HKEY_CURRENT_USER, key_path)
            key = OpenKey(HKEY_CURRENT_USER, key_path, 0, KEY_WRITE)
            SetValueEx(key, '', 0, REG_SZ, target)
            CloseKey(key)

            key_path = r'SOFTWARE\Classes\.fmu'

            CreateKey(HKEY_CURRENT_USER, key_path)
            key = OpenKey(HKEY_CURRENT_USER, key_path, 0, KEY_WRITE)
            SetValueEx(key, '', 0, REG_SZ, 'fmpy.gui')
            CloseKey(key)

            QMessageBox.information(self, "File association added", "The file association for *.fmu has been added")
        except Exception as e:
            QMessageBox.critical(self, "File association failed", "The file association for *.fmu could not be added. %s" % e)
Пример #16
0
    def get(self, default=None):
        key = self.open_key(KEY_READ)
        try:
            value, regtype = QueryValueEx(key, self.key)
        except FileNotFoundError:
            value = default

        CloseKey(key)
        return value
Пример #17
0
def set_reg(name, value):
    """Set DPI via registry key"""
    try:
        CreateKey(HKEY_CURRENT_USER, REG_PATH)
        registry_key = OpenKey(HKEY_CURRENT_USER, REG_PATH, 0, KEY_WRITE)
        SetValueEx(registry_key, name, 0, REG_SZ, value)
        CloseKey(registry_key)
        return True
    except:
        logger.exception("Exception occurred - Cannot Change DPI (set_reg)")
Пример #18
0
def readValues(hkey, regPath):
    if not pathExists(hkey, regPath):
        return -1
    reg = OpenKey(hkey, regPath)
    values = {}
    noOfValues = QueryInfoKey(reg)[1]
    for i in range(0, noOfValues):
        values[EnumValue(reg, i)[0]] = EnumValue(reg, i)[1]
    CloseKey(reg)
    return values
Пример #19
0
def readSubKeys(hkey, regPath):
    if not pathExists(hkey, regPath):
        return -1
    reg = OpenKey(hkey, regPath)
    subKeys = []
    noOfSubkeys = QueryInfoKey(reg)[0]
    for i in range(0, noOfSubkeys):
        subKeys.append(EnumKey(reg, i))
    CloseKey(reg)
    return subKeys
Пример #20
0
    def find_bluestacks5_hyperv(serial):
        """
        Find dynamic serial of Bluestacks5 Hyper-v.
        Args:
            serial (str): 'bluestacks5-hyperv', 'bluestacks5-hyperv-1' for multi instance, and so on.
        Returns:
            str: 127.0.0.1:{port}
        """
        from winreg import ConnectRegistry, OpenKey, QueryInfoKey, EnumValue, CloseKey, HKEY_LOCAL_MACHINE

        logger.info("Use Bluestacks5 Hyper-v")
        logger.info("Reading Realtime adb port")

        if serial == "bluestacks5-hyperv":
            parameter_name = "bst.instance.Nougat64.status.adb_port"
        else:
            parameter_name = f"bst.instance.Nougat64_{serial[19:]}.status.adb_port"

        reg_root = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
        sub_dir = f"SOFTWARE\\BlueStacks_nxt"
        bs_keys = OpenKey(reg_root, sub_dir)
        bs_keys_count = QueryInfoKey(bs_keys)[1]
        for i in range(bs_keys_count):
            key_name, key_value, key_type = EnumValue(bs_keys, i)
            if key_name == "UserDefinedDir":
                logger.info(f"Configuration file directory: {key_value}")
                with open(f"{key_value}\\bluestacks.conf",
                          'r',
                          encoding='utf-8') as f:
                    content = f.read()
                    port = re.findall(rf'{parameter_name}="(.*?)"\n', content,
                                      re.S)
                    if len(port) > 0:
                        logger.info(f"Match to dynamic port: {port[0]}")
                        serial = f"127.0.0.1:{port[0]}"
                    else:
                        logger.warning(f"Did not match the result: {serial}.")
                break

        CloseKey(bs_keys)
        CloseKey(reg_root)
        return serial
Пример #21
0
def getSynthRiderInstallFolder():
    try:
        registry_key = OpenKey(
            HKEY_LOCAL_MACHINE,
            r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 885000',
            0, KEY_READ)
        value, _ = QueryValueEx(registry_key, r'InstallLocation')
        CloseKey(registry_key)
        return value
    except WindowsError:
        return None
Пример #22
0
def write_destination_folder_to_reg(
        destination_folder: Path,
        reg_path: str = R'SOFTWARE\lyckantropen\moonlight_hdr_launcher'
) -> None:
    _logger.debug(
        f'Writing destination_folder="{destination_folder}" to registry at "{reg_path}"'
    )
    CreateKey(HKEY_CURRENT_USER, reg_path)
    registry_key = OpenKey(HKEY_CURRENT_USER, reg_path, 0, KEY_WRITE)
    SetValueEx(registry_key, 'destination_folder', 0, REG_SZ,
               str(destination_folder))
    CloseKey(registry_key)
Пример #23
0
 def __exit__(self, type, value, traceback):
     #print('__exit__')
     try:
         if "Windows-7" in platform() and self.state:
             key = OpenKey(HKEY_LOCAL_MACHINE, self.keyVal, 0,
                           KEY_ALL_ACCESS)
             SetValueEx(key, self.name, 0, REG_DWORD, self.value)
             CloseKey(key)
     except WindowsError:
         logger.warning(
             "It seems that we have no rights to change register (__exit__)"
         )
Пример #24
0
    def test_close(self):
        from winreg import OpenKey, CloseKey, FlushKey, QueryInfoKey
        key = OpenKey(self.root_key, self.test_key_name)
        sub_key = OpenKey(key, "sub_key")

        int_sub_key = int(sub_key)
        FlushKey(sub_key)
        CloseKey(sub_key)
        raises(EnvironmentError, QueryInfoKey, int_sub_key)

        int_key = int(key)
        key.Close()
        raises(EnvironmentError, QueryInfoKey, int_key)

        key = OpenKey(self.root_key, self.test_key_name)
        int_key = key.Detach()
        QueryInfoKey(int_key)  # works
        key.Close()
        QueryInfoKey(int_key)  # still works
        CloseKey(int_key)
        raises(EnvironmentError, QueryInfoKey, int_key)  # now closed
Пример #25
0
def delete_registry_tree(root, subkey):
    try:
        hkey = OpenKey(root, subkey, access=KEY_ALL_ACCESS)
    except OSError:
        return
    while True:
        try:
            subsubkey = EnumKey(hkey, 0)
        except OSError:
            break
        delete_registry_tree(hkey, subsubkey)
    CloseKey(hkey)
    DeleteKey(root, subkey)
Пример #26
0
def toggle_color_mode():
    """Toggles system color scheme preference."""
    from winreg import ConnectRegistry, HKEY_CURRENT_USER, REG_SZ, KEY_ALL_ACCESS, OpenKeyEx, QueryValueEx, SetValueEx, CloseKey
    root = ConnectRegistry(None, HKEY_CURRENT_USER)
    policy_key = OpenKeyEx(
        root,
        r"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize",
        access=KEY_ALL_ACCESS)
    light, _ = QueryValueEx(policy_key, "AppsUseLightTheme")
    SetValueEx(policy_key, "AppsUseLightTheme", 0, REG_SZ, str(1 - int(light)))
    SetValueEx(policy_key, "SystemUsesLightTheme", 0, REG_SZ,
               str(1 - int(light)))
    CloseKey(policy_key)
Пример #27
0
def persist(file_path):
    """
    Persist binary passed to the function.
    So, this function adds a new value to a specific registry key.
    All binaries specified in this registry key runs on each computer startup.
    :param file_path: path to the binary we want to persist
    :return:
    """
    run_sub_key = r"Software\Microsoft\Windows\CurrentVersion\Run"
    value_name = "MSDefender"  # this value doesn't look suspicious
    run_key = OpenKey(HKEY_LOCAL_MACHINE, run_sub_key, 0, KEY_ALL_ACCESS)
    SetValueEx(run_key, value_name, 0, REG_SZ, file_path)
    CloseKey(run_key)
def openParlatype(ctx):
    if sys.platform == 'win32':
        registry = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
        try:
            key = OpenKey(registry,
                          r'SOFTWARE\Microsoft\Windows' +
                          r'\CurrentVersion\Uninstall\Parlatype',
                          0, KEY_READ)
        except FileNotFoundError:
            CloseKey(registry)
            # TODO add a clickable download link
            showMessage(ctx, _("Parlatype is not installed."))
            return
        [path, regtype] = (QueryValueEx(key, "InstallLocation"))
        CloseKey(key)
        CloseKey(registry)
        cmd = os.path.join(path, 'bin', 'parlatype.exe')
        cmdline = [cmd]
    else:
        cmdline = ["parlatype"]

    smgr = ctx.getServiceManager()
    desktop = smgr.createInstanceWithContext(
            "com.sun.star.frame.Desktop", ctx)
    doc = desktop.getCurrentComponent()
    url = get_link_url(doc)
    if url is not None:
        cmdline.append(url)

    try:
        subprocess.Popen(cmdline)
    except FileNotFoundError:
        # Try Flatpak in a different thread, because we're waiting for its
        # return code/stderr and that would keep the button pressed.
        t = threading.Thread(target=launchFlatpak, args=(self.ctx, url,))
        t.daemon = True
        t.start()
Пример #29
0
 def __enter__(self):
     #print('__enter__')
     try:
         if "Windows-7" in platform():
             self.value = 0  #QueryValue(keyVal, name)
             key = OpenKey(HKEY_LOCAL_MACHINE, self.keyVal, 0,
                           KEY_ALL_ACCESS)
             SetValueEx(key, self.name, 0, REG_DWORD, 1)
             CloseKey(key)
             self.state = True
     except:  # WindowsError:
         logger.warning(
             "It seems that we have no rights to change register (__enter__)"
         )
     return self
Пример #30
0
def win32_ver(release='', version='', csd='', ptype=''):
    try:
        from sys import getwindowsversion
    except ImportError:
        return release, version, csd, ptype
    try:
        from winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE
    except ImportError:
        from _winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE

    winver = getwindowsversion()
    maj, min, build = winver.platform_version or winver[:3]
    version = '{0}.{1}.{2}'.format(maj, min, build)

    release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or
               _WIN32_CLIENT_RELEASES.get((maj, None)) or
               release)

    # getwindowsversion() reflect the compatibility mode Python is
    # running under, and so the service pack value is only going to be
    # valid if the versions match.
    if winver[:2] == (maj, min):
        try:
            csd = 'SP{}'.format(winver.service_pack_major)
        except AttributeError:
            if csd[:13] == 'Service Pack ':
                csd = 'SP' + csd[13:]

    # VER_NT_SERVER = 3
    if getattr(winver, 'product_type', None) == 3:
        release = (_WIN32_SERVER_RELEASES.get((maj, min)) or
                   _WIN32_SERVER_RELEASES.get((maj, None)) or
                   release)

    key = None
    try:
        key = OpenKeyEx(HKEY_LOCAL_MACHINE,
                        r'SOFTWARE\Microsoft\Windows NT\CurrentVersion')
        ptype = QueryValueEx(key, 'CurrentType')[0]
    except:
        pass
    finally:
        if key:
            CloseKey(key)

    return release, version, csd, ptype