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

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

 

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

 

好消息是,这个库有对应的python3版本——pylnk3(而且是仅限python3使用),在使用方法上也比pylnk更现代一些。可以参考一下这篇文章:
(直接看方案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对快捷方式的操作种类也挺丰富的,等将来有心情再玩玩看。 
 
posted @ 2024-05-13 15:13  _小苹果  阅读(55)  评论(0编辑  收藏  举报