环境

Windows 10

Python 3

背景

由于我经常写脚本,有一个需求是,在当前目录下新建txt,然后更改文件后缀,比如.py或者.js之类的。在windows中,一般来说有两种方法:

  1. 右键 > 新建 > 选择文本文档

  2. 打开记事本(cmd或者快捷键) > 设置保存位置

我比较倾向于第一种方法,因为可以绕过手动选择保存路径。但是,我的右键菜单是长这样的:

Snipaste_2020-05-27_10-20-35.png

非常长,点击的话还要找半天,还可能会点错,非常烦。

解决方法

于是我想找一个能使用快捷键的方法。我首先想到的是AHK,流程大概如下:

设置快捷键 > AHK模拟右键 > w > 从下往上数数 > 回车选定

这样做坏处是,一旦文本文档的位置发生了变化,那么我们要重新编辑脚本,所以这种方法也不好。后来我在知乎看到了这样的回答:

按下win+r组合键呼出运行,输入regedit点击运行打开注册表,定位到

HKEY_CLASSES_ROOT\Local Settings\MuiCache\407\AAF68885
@%SystemRoot%\system32\notepad.exe,-469

双击此键值,在 文本文档 后加上“ (&T)” ,以后你右键+w+t就新建文档了。
PS:别忘了括号前面的那个空格(-:

效果如下图所示:

这就是我想要的答案!通过鼠标和键盘的快捷配合简直Perfect!

但是!之后我又遇到了一个新的问题,就是一段时间或者重启之后,修改注册表的快捷键会消失,后来,我才发现,失效的原因在于:

HKEY_CLASSES_ROOT\Local Settings\MuiCache\218\AAF68885

中间的 218路径会发生变化,可能重启之后就换成了另一个路径,而我修改的注册表也被默认值覆盖。我不知道原因是什么,但是我找到了解决的方法,用python 调用 cmd 然后执行reg的命令,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os

def bat(command):
res = os.popen(command).read()
return res


if __name__ == "__main__":
input_path = "HKEY_CLASSES_ROOT\Local\" \"Settings\MuiCache"
parent_path = bat("reg query " + input_path).replace("\n","")
lst = parent_path.split("\MuiCache")
work_path = input_path + lst[-1] + "\AAF68885 "
cmd_reg = "reg add " + work_path + "/v \"@C:\Windows\system32\\notepad.exe,-469\" /t REG_SZ /d \"文本文档 (&w)\" /f"
# print(cmd_reg)
res = bat(cmd_reg)
print(res)

开机执行就好了。方法如下:

  1. 新建一个bat,里面内容如下(注意替换成你自己的路径):
1
python C:\Users\Desktop\reg.py
  1. 将bat移动到启动目录下,路径如下:

C:\Users\MonkeyQuake\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

看起来像这样:

Snipaste_2020-05-27_17-45-14.png

完成,开心!

参考资料

win7新建文本文档快捷键? - 夕海的回答 - 知乎