python --winreg(通过windows注册表打开应用程序)
import winreg as reg
reg_path = r'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe'
chrome_path = None
last_exception = None
for install_type in reg.HKEY_CURRENT_USER, reg.HKEY_LOCAL_MACHINE:
print(install_type)
try:
reg_key = reg.OpenKey(install_type, reg_path, 0, reg.KEY_READ)
print(reg_key)
chrome_path = reg.QueryValue(reg_key, None)
reg_key.Close()
except WindowsError as e:
last_exception = e
else:
if chrome_path and len(chrome_path) > 0:
break
print(chrome_path)
附录
打开指定的键,返回一个处理对象
winreg.OpenKey(key, sub_key, reserved=0, access=winreg.KEY_READ)
winreg.OpenKeyEx(key, sub_key, reserved=0, access=winreg.KEY_READ)
winreg.QueryValue(key,sub_key) #用一个字符串来检索一个键的值
1).定位360安全卫士的注册表项:
1)).打开系统注册表编辑器,然后进行搜索关键字:
2)).定位到注册表路径
2).打开注册表键
通过我们找到的子键然后对其进行查找操作,得到处理对象的句柄“reg”
reg=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\360安全卫士")
3).找到应用的绝对路径并打印
通过数值名称找到数值数据,
path=winreg.QueryValueEx(reg,'DisplayIcon')
这样就找到了这个应用的绝对路径了,返回值是一个元祖,我们使用索引访问:
path[0]
打开路径
os.popen(path[0])
最后别忘了关闭对象处理句柄哦。
#两种方法都可以关闭
winreg.CloseKey(reg)
reg.Close()
方法一
import winreg
import subprocess
def get_wechat_installation_path():
key_path = r"Software\Tencent\WeChat"
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_READ)
value, _ = winreg.QueryValueEx(key, "InstallPath")
return value[0].upper() + value[1:] + '\WeChat.exe'
except FileNotFoundError:
print("找不到微信程序")
return None
a = get_wechat_installation_path()
print(a)
subprocess.Popen(a)
方法二
import win32api
import win32con
# 读取注册表找到微信的安装路径
def getWxInstallPath():
try:
# 注册表打开
# RegOpenKey(key, subKey , reserved , sam)
# key: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HEKY_LOCAL_MACHINE HKEY_USERS HKEY_CURRENT_CONFIG
# subkey: 要打开的子项
# reserved: 必须为0
# sam: 对打开的子项进行的操作,包括win32con.KEY_ALL_ACCESS、win32con.KEY_READ、win32con.KEY_WRITE等
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, "SOFTWARE\Tencent\WeChat", 0, win32con.KEY_ALL_ACCESS)
# 这里的key表示键值,后面是具体的键名,读取出来是个tuple
value = win32api.RegQueryValueEx(key, "InstallPath")[0]
# 用完之后记得关闭
win32api.RegCloseKey(key)
# 微信的路径
value += "\\" + "WeChat.exe"
return value
except Exception as ex: ...