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

news2024/11/16 18:34:54

实现目标需要使用到(引包|倒包) 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APP自动化(1)-Appium中adb常用命令

1.建立Appium与手机模拟器的连接环境 首先确定的是Appium已经打开和手机模拟器已经打开并且appium点击了开始的按钮&#xff0c;然后用cmd进去win的dos系统&#xff0c; 输入tasklist找到这个进程号&#xff0c;每台电脑都是不一样的进程号要按照你自己的来 查询pid地址netst…

Git 构建分布式版本控制系统

版本控制概念Gitlab部署1.版本控制概念 1.1分类 &#xff08;一&#xff09;1 本地版本控制系统&#xff08;传统模式&#xff09; &#xff08;二&#xff09;2 集中化的版本控制系统 CVS、Subversion&#xff08;SVN&#xff09; &#xff08;三&#xff09;3 分布式…

linux程序分析工具

嵌入式调试工具1. nm2. addr2line3. readelf3.1 ELF 文件分类3.2 ELF文件组成3.3使用1. nm nm源于name&#xff0c;是linux下一个文本分析工具&#xff0c;可以罗列指定文件中的符号(函数名、变量&#xff0c;以及符号类型)。 nm命令参数如下&#xff1a; 用法&#xff1a;nm …

深入理解MySQLⅢ -- 锁与InnoDB引擎

文章目录锁概述全局锁表级锁表锁元数据锁意向锁行级锁行锁间隙锁&临键锁InnoDB引擎逻辑存储结构架构内存结构磁盘结构后台线程事务原理redo logundo logMVCC锁 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#x…

Fiddler安装教程、工具图解

目录 一、Fiddler是什么&#xff1f; 二、Fiddler原理 三、Fiddler安装 Fiddler界面介绍 四、常用的工具图解 4.1会话列表 4.2状态栏 4.3内容显示区 一、Fiddler是什么&#xff1f; Fiddler是客户端与服务器之间的HTTP代理&#xff0c;是当前最常用的HTTP协议抓包工具。 …

谈谈 《 JavaScript - DOM编程艺术 》这本书

前言 好吧&#xff0c;现在已经2023年了&#xff0c;对于这本书&#xff08;第二版&#xff09;来说可能有点老了&#xff0c;这本书不是很难理解&#xff0c;但也不是很适合新手读&#xff0c;当然&#xff0c;这本书并不是百宝书 &#x1f4d5; &#xff0c;它更注重于编程的…

格式化字符串你都懂了吗

文章目录前言一、什么是格式化字符串&#xff1f;二、使用 % 格式化字符串三、使用 format() 格式化字符串总结前言 今天跟大家聊聊字符串的格式化这部分内容。乍一听“格式化”这三个字&#xff0c;有的初学者可能会懵&#xff1a;难道这是要清空字符串的节奏&#xff1f; 其…

网络管理之设备上线技术的发展现状和趋势

网络和网络设备无处不在 随着社会的发展和技术的进步&#xff0c;人类文明开始向信息时代演进&#xff0c;网络逐渐变成现代社会不可或缺的一部分&#xff0c;极大程度影响了人类的认知形式、思维方式与生活模式。从家庭网&#xff0c;到企业网&#xff1b;从无线网&#xff0…

Mysql MHA搭建

. 目录 机器配置 安装Docker Docker安装和启动Mysql8.0.26 搭建Mysql一主二从 设置三台机器免密访问 安装MHA 搭建问题记录 问题1 MHA验证主从复制报错Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation 问题2 MHA验证…

doris - 数仓 拉链表 按天全量打宽表性能优化

数仓 拉链表 按天全量打宽性能优化现状描述优化现状描述 1、业务历史数据可以变更 2、拉链表按天打宽 3、拉链表模型分区字段设计不合理&#xff0c;通用的过滤字段没有作为分区分桶字段 4、拉链表表数据量略大、模型数据分区不合理和服务器资源限制&#xff0c;计算任务执行超…

安装JupyterLab失败的解决方案

由于本人电脑安装的Python版本3.6比较低&#xff0c;所以可能存在下面两种方法都安装失败&#xff0c;最后给出一个简单省事的方法。Jupyter lab比Jupyter Notebook要好用&#xff0c;试了之后感觉跟VSCode一样的存在&#xff0c;所以还是值得安装来代替Jupyter Notebook使用。…

Ae:解释素材

所谓解释素材 Interpret Footage&#xff0c;就是通过修改素材的某些属性&#xff08;像素长宽比、帧速率、颜色配置文件及 Alpha 通道类型等&#xff09;&#xff0c;让它能更好地参与到合成中去。Ae菜单&#xff1a;文件/解释素材快捷键&#xff1a;Ctrl Alt G在项目面板里…

【C语言】编程初学者入门训练(13)

文章目录121. 小乐乐算最高分122. 小乐乐计算求和123. 小乐乐计算函数124. 小乐乐查找数字125. kiki学程序设计基础126. kiki算期末成绩127. kiki说祝福语128. kiki的最高分129. 求质数的个数130. kiki去重整数并排序121. 小乐乐算最高分 问题描述&#xff1a;小乐乐的老师BoB…

4.2 双点双向路由重发布

1. 实验目的 熟悉双点双向路由重发布的应用场景掌握双点双向路由重发布的配置方法2. 实验拓扑 双点双向路由重发布如图4-6所示: 图4-6:双点双向路由重发布 3. 实验步骤 IP地址的配置R1的配置 <Huawei>system-v…

关键路径、工期、总时差和自由时差精讲

关键路径法是在进度模型中&#xff0c;估算项目最短工期&#xff0c;确定逻辑网络路径进度灵活性大小的一种方法。①计算原理a.计算ES、EF&#xff1a;从网络计划起点节点开始&#xff0c;沿箭线方向依次向前推算&#xff0c;数值取大。b.计算LS、LF&#xff1a;从网络计划终点…

SVFormer:走进半监督动作识别的视觉 Transformer

出品人&#xff1a;Towhee 技术团队 顾梦佳 半监督学习&#xff08;SSL&#xff09;的动作识别是一个关键的视频理解任务&#xff0c;然而视频标注的高成本加大了该任务的难度。目前相关的方法主要研究了卷积神经网络&#xff0c;较少对于视觉 Transformers&#xff08;ViT&…

一个视频说清整个英语语法体系(重塑你的语法认知框架)

前言 绝大多数句子&#xff1a;什么 怎么样 几乎所有的英语句子&#xff1a;主语谓语 广义 “动作”&#xff1a;语法上的“动词” 主语(人或物) 谓语(“动作”发生了什么事情) 有哪些”动作“(动词)&#xff1f; 可以独立完成的动作&#xff1a;不及物动词 [主语不及物…

GEE学习笔记 七十九:【GEE之Python版教程十一】

列表在python中就是使用中括号包围的数据&#xff0c;比如[11,23,10]等。列表&#xff08;list&#xff09;是可变的&#xff0c;同时在python中还有集合&#xff08;set&#xff09;以及元组&#xff08;tuple&#xff09;和这个类似&#xff0c;不要把这些内容搞混。 运行下…

Maven怎样构建生命周期?

项目构建生命周期Maven的本质是一个项目管理工具&#xff0c;将项目开发和管理过程抽象成一个项目对象模型(POM)。Maven构建生命周期描述的是一次构建过程经历经历了多少个事件。对项目构建的生命周期划分为3套&#xff0c;其中clean负责清理工作&#xff0c;default负责核心工…

Git小乌龟每次推送拉取都弹窗和用户名密码报错(解决办法)

目录 一、小乌龟推送代码到云端用户名和密码报错 &#xff08;一&#xff09; 遇到问题 &#xff08;二&#xff09;解决办法 二、小乌龟每次推送拉取都要输入账号和密码 &#xff08;一&#xff09;遇到问题 &#xff08;二&#xff09;解决办法 一、小乌龟推送代码到云…