使用python在windows系统操作快捷方式

news/2024/9/23 18:17:56
其实问题是由上一篇文章(https://www.cnblogs.com/anpengapple/p/18179353)的结尾引出来的。不需要了解背景的话,我现在需要做的是,右键打开桌面上的chrome快捷方式的属性,在目标的后面增加一个参数。我不想傻傻地手动添加,想交给程序来处理。
 
首先需要简单来说一下,windows的快捷方式是就是.lnk文件,这是一种二进制文件格式,内容很简单,大概就是从文件头中,偏移多少个字节,可以取到一段内容,表示这个快捷方式的某一种属性(目标或者参数等等),我们要创建快捷方式或者编辑快捷方式,就是在操作这段偏移量的内容。
 
从微软的官网我们可以学习一下LNK格式文件的一些知识:
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/16cb4ca1-9339-4d0c-a68d-bf1d6cc0f943?redirectedfrom=MSDN
或者也可以看看这篇文章有个直观的印象LNK文件的结构:
https://blog.csdn.net/pope12389/article/details/84124052
 
说到这里要跑题一句,以后要小心哦!别人分享给你的lnk文件,是可以伪装的,在这个文件头中可以插入恶意代码,还可以更改图标。比如你闺蜜告诉你说,“听说了没,某某最近那个惊天大瓜!”然后顺手给你发个pdf,看起来是个正经(嗯?)的pdf,但有可能是个lnk文件,里面塞了个木马,种在你的电脑里了,顺手再从远程下载一个真正的pdf。防不胜防啊!
 
好,扯回正题。我肯定是不会去直接操作二进制文件的,太困难。
 
那么第三方库选择什么呢?按照查到的顺序,我先尝试了pylnk。在网上查到几篇,但是一尝试就发现,文章都是假的,因为pylnk这个库只能用于python2,在python3环境下甚至无法安装。
 

 

看这发布日期,真的假的?2024年还在用python2?呵呵,要说这不是爬虫爬来的文章,我可不太信。
 

 

好消息是,这个库有对应的python3版本——pylnk3(而且是仅限python3使用),在使用方法上也比pylnk更现代一些。可以参考一下这篇文章:
https://blog.csdn.net/B11050729/article/details/131538291
(直接看方案5即可)
但我当时没有看这篇文章,就自己看了一下pylnk3库的源码,就开始自己瞎捣鼓了一下。其实也很简单,大概就几步:
 
from pylnk3 import Lnk
lnk_path = os.path.join(os.path.abspath(os.path.expanduser("~")), "Desktop\\chrome.lnk")
with open(lnk_path, "rb") as fdata:lnk = Lnk(fdata)lnk.arguments = "--remote-debugging-port=9527"lnk.save()

 

我太想当然了,我验证了一下代码结果,快捷方式根本打不开了。
 

 

查了一下,大概意思是我还要设置别的东西,target, window_mode, working_dir什么的。可是其他内容我并不想改啊,为什么还要重新设置一遍?干脆不用了。如果考虑读快捷方式的某些属性,这个库应该还蛮简便的吧。但是要写,还是有点风险的。
类似的库有个LnkParse3,但我没有尝试,直接考虑调用windows shell。
 
在网上看到一个winshell模块,pip安装失败,报错“No module named win32con”,然而搜索win32con这个模块就一无所获(真的不是winshell的作者把模块名字写错了吗?)。算了,不如直接一点,用win32com。安装轻松,代码简单,方便快捷,是居家旅行必备佳品分分钟搞定。
 
from win32com.client import Dispatch
# 调用shell
shell = Dispatch("WScript.Shell")
# lnk文件位置
lnkpath = os.path.abspath(os.path.join(os.path.expanduser("~"), "Desktop\\Google Chrome.lnk"))
# 如果lnk不存在,会创建新的
t = shell.CreateShortCut(lnkpath)
# 设置lnk的目标地址,可以不写。但如果创建新的快捷方式就必须写了
# t.TargetPath = os.path.abspath(os.path.join(os.path.expanduser("~"), "AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"))
# 设置lnk的参数
t.Arguments = "--remote-debugging-port=9527"
# 保存
t.Save()

 

废话半天,其实就只有最后这几行有用。其实也是我的需求比较少,shell对快捷方式的操作种类也挺丰富的,等将来有心情再玩玩看。 
 

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

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

相关文章

spring之AOP(面向切面编程)

什么是AOP? AOP(Aspect Oriented Programming)意为:面向切面编程,体现了横切的思想,意思是在添加某项功能的时候,是以切面插入的方式实现的,对原有的代码不会产生改变。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP在spring中的作用:在不改变…

识别与防御CSRF漏洞

识别与防御CSRF漏洞 CSRF(Cross-Site Request Forgery,跨站请求伪造),通常也被称为“一键攻击”或“会话劫持”,其缩写为CSRF或XSRF,是一种针对网站的恶意利用技术。尽管名字听起来与跨站脚本(XSS)相似,但两者在本质上是截然不同的。XSS主要依赖于用户对站点的信任,而…

Linux查看一个目录下占用磁盘最多的文件或目录

想要找到占用磁盘最多的文件或目录,可以使用du和sort命令: du -h /path/to/directory | sort -rh | head -n 10其中:du -h /path/to/directory 用于计算指定目录下的所有文件和子目录的大小,并以人类可读的格式显示。 sort -rh 用于按磁盘使用情况的大小(逆序)对输出进行…

mybatisPlus多数据源的使用使用 lambdaQuery 导致多数据源失效

依赖<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version></dependency>配置文件:spring:datasource:type: com.alibaba.druid.pool.Drui…

什么? 20分钟,构建你自己的LLaMA3应用程序! | 京东云技术团队

4月19日,Meta发布了最新的大语言模型LLaMA3,具体包括一个 8B 模型和一个 70 B 模型,上下文长度支持8K, 被誉为史上最强开源大语言模型,开源社区的“重磅炸弹”,效果直指GTP4。在诸多评测任务上,LLaMA3都有非常炸裂的效果。 8B模型在多项指标中超越了Gemma 7B和Mistral 7…

第三代长安75p安装三方软件

前言 长安的车机系统是 长安与腾讯联合且基于安卓自研的 梧桐车联系统。此系统极为封闭,默认情况下,不允许安装除了车机本身应用商店之外的三方软件。 除此之外,车机内置的软件版本都特别低(比如高德),且不支持升级,只能等待整个车机系统连带升级,遗憾的是他们通常好几…

启停openGauss

启停openGauss 启动openGauss以操作系统用户omm登录数据库主节点。使用以下命令启动openGauss。 gs_ctl start -D /opt/data说明: 如果提示找不到gs_ctl,请检查是否source过环境变量文件(默认是~/.bashrc),若不想source环境变量文件也可以手动切换到安装路径下执行该命令。…

c++-----declval

std::declval 基本概念和常规实例std::decval–C++新标准中出现的函数模板,没有函数体(只有声明、没有实现),无法调用,一般用于与decltype,sizeof等关键字配合来进行类型推导、占用内存空间计算等 查看源码: add_rvalue_reference:是C++标准库中的类模板,他的能力是给进一…