python 获取chrome浏览器的安装目录,即chrome的绝对路径

实现目标需要使用到(引包|倒包) 2 个 python 模块,

import win32api

import win32con

引言(扉页):
也适用于查找安装在Windows中的应用程序的绝对路径,
譬如:微信(WeChat)

正文(言归正传):
上述这两个模块是用来操作 Windows 注册表滴。
妇孺皆知,童叟无欺:
应用程序在安装到 Windows 中的时候,一定会将自己的信息写入注册表,
所以,在注册表中就可以找到应用程序的绝对路径。

首先,介绍第一个模块 win32api
我们要使用到它的 3 个函数:

win32api.RegOpenKeyEx()

win32api.RegQueryValueEx()

win32api.RegCloseKey()

RegOpenKeyEx 方法

是用来打开注册表,打开我们指定的那个注册表路径(需要我们手工写明),这里面会有很多个结果,
RegOpenKeyEx 方法,就像定位到文件夹,
这里需要注意分清楚 注册表路径 和 应用程序路径。

注册表路径:

是仅在注册表里起作用的路径(并不是应用程序在计算机文件系统中的路径),比如,我们要找的 chrome 浏览器会将自己的信息写进 注册表的某个地方,给计算机操作系统使用,这个地方就对应着一个 注册表路径,而这个注册表路径 里的某个变量(在注册表里叫 key )里就有我们想要找的应用程序的路径。

应用程序路径:

是应用程序在计算机文件系统中的路径,即 chrome 浏览器(应用程序)的安装路径,给我们用户使用。

严格意义上讲,RegOpenKeyExopen 的含义是 打开一个句柄(handle),这个句柄就能定位到我们手工指定的注册表路径
当然 chrome的安装路径就在里面存着。
RegOpenKeyEx 方法会返回一个 python 关于Windows 注册表的对象

<PyHKEY:xxx>
ps (postscript):

>xxx IS 3 digital number

RegQueryValueEx 方法

是用来在众多结果里,挑出来我们想要的某一条数据,
就像在文件夹里取出我们想要的文件,
把上面通过RegOpenKeyEx 方法 拿到的对象

<PyHKEY:xxx>

传给 RegQueryValueEx方法,会得到一个元组,就是我们想要的 chrome 安装路径了。

RegCloseKey方法

微软说了,不应将 RegOpenKeyEx 保持打开状态, 所以养成好习惯,用完就给它关上。

实际案例:

python 通过 外置(需要 import 进程序的)模块 os 中的 system 方法 可以让电脑自动打开 chrome 浏览器,并进入指定的页面,

但需要将 chrome 浏览器的安装路径作为参数传给 os.system

os.system('C:\\Users\\admin\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe  http://www.bing.com')

就是通过 os.system 操作计算机自动 打开 chrome 浏览器并进入 Bing 网站。

但 chrome 浏览器的安装路径找起来就比较麻烦,因为用户很可能在安装 chrome 浏览器的时候没有使用默认安装,而是指定了其他的安装路径,
当然也可以通过右键 chrome 浏览器的快捷方式去找 ,但我们毕竟是要用自动化的方式更准确,而且用python 通过注册表 还可以批量 查询 多个不同应用程序的安装路径,

代码解析:

语法:
RegOpenKey(key, subKey , reserved , sam)
 第一个参数
 key: 

有 6 个 可选值,

HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HEKY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG

就是 6 个 大的分类,
HEKY_LOCAL_MACHINE
安装应用程序时,操作系统自带的或者选择了默认安装或者选择了为本计算机上所有用户安装,这样的应用程序到这个大主键里去找,
HKEY_CURRENT_USER
上面找不到的,到这里找
来看一下这 6 个 大主键长什么样子
在这里插入图片描述
所以,第一个参数 要写 key,
我选的 大主键 是 HKEY_CURRENT_USER
因为之前在 HEKY_LOCAL_MACHINE 大主键里没找到 chrome.exe,
所以就选到了 HKEY_CURRENT_USER 这个大主键。

第二个参数
 subkey: 

要打开的子项(也叫子键),也就是在 6 大主键下面的注册表路径
我们要找的是 chrome.exe,所以子键是:
SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe

第一个参数 key 和第二个参数 subkey,组合起来就是完整的 注册表路径,
如下图
在这里插入图片描述

第三个参数
 reserved: 

必须为0
硬性规定

第四个参数
sam: 

对打开注册表的子项,要进行的操作,
包括

win32con.KEY_ALL_ACCESS
win32con.KEY_READ
win32con.KEY_WRITE

我们这次选用的 是 win32con.KEY_READ ,读操作

完整代码如下:

第一步

key = win32con.HKEY_CURRENT_USER
subkey = SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe'
reserved = 0
sam = win32con.KEY_READ

Result=win32api.RegOpenKeyEx(`key`,`subkey`,`reserved`, `sam`)

打开的注册表并定位到的 Result 是个 注册表对象 <PyHKEY:521>

第二步

将 注册表对象 <PyHKEY:521> 传递给 RegQueryValueEx函数
得到 一个 tuple
如下:

('C:\\Users\\admin\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe', 1)

取元组 的第一个值,

filePath=win32api.RegQueryValueEx(Result,'')[0]

得到最终的结果,即 chrome 浏览器的安装路径。
C:\\Users\\admin\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe
送给

os.system
计算机自动 打开 chrome 浏览器并进入 Bing 网站

PS:
filePath=win32api.RegQueryValueEx(Result,'')
这里,用''的原因是
在这里插入图片描述
我要取的是 chrome.exe 的完整路径,而不是它的父级目录,
所以,应该送给 win32api.RegQueryValueEx的参数是 默认
而 默认 就是用'',即空字串来表示的,
如果,我要取的是 chrome.exe 父级目录,那送给 win32api.RegQueryValueEx 的参数,按图上所标 就应该是 2 号的
path ,即
win32api.RegQueryValueEx(Result,'path')
这时候得到的结果就是 chrome.exe 的父级目录了,即

`C:\\Users\\admin\\AppData\\Local\\Google\\Chrome\\Application\\`

我这里参考了 博主 capsclock 的文章,有兴趣可以去看看,写的很全面,

Python获取PC版微信安装路径
capsclock 于 2022-12-19 16:38:14 发布
————————————————
版权声明:本文为CSDN博主「capsclock」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/capsclock/article/details/128374249

February the 17th 2023 Friday

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值