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
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
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)
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
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)
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)
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
def get_user_path() -> str: key = OpenKeyEx(HKEY_CURRENT_USER, 'Environment') try: path, _ = QueryValueEx(key, 'Path') finally: CloseKey(key) return path
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
def pathExists(hkey, regPath): try: reg = OpenKey(hkey, regPath) except WindowsError: return False CloseKey(reg) return True
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
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)
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')
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)
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
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)")
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
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
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
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
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)
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__)" )
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
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)
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)
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()
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
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