将当前日期时间复制到剪切板,并添加到右键菜单

在中实现了用 Python 将当前时间复制到剪切板中。这篇文章将进一步实现在 Windows 桌面右键菜单中加入这个功能。

首先是 Python 实现:

1
2
3
4
5
6
7
8
import time, pyperclip

def get_time():
time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
pyperclip.copy(time_str)

if __name__ == '__main__':
get_time()

保存以上代码为 get_time.pyw.

修改注册表加入到右键菜单

WIN + R 输入 ‘regedit’ 打开注册表编辑器, 定位到 ‘计算机\HKEY_CLASSES_ROOT\Directory\Background\shell’ 可以看到类似如下结构:

1
2
3
4
5
----Background\
|----shell\
|----AnyCode
|----cmd
|----Powershell

右击 ‘shell’, 新建 - 项 并命名该项为 “获取当前时间”或其他名称,在双击右侧窗口中名称为 ‘默认’ 的项目,在弹出窗口的 ‘数值数据(V):’ 输入框中输入 “获取当前日期时间” 或其他字符串。输入的字符串即为在右键菜单显示的项目名称。
回到前面新建的 “获取日期时间” 项,右击该项并新建一个名为 “command” 的项,在右侧窗口中双击打开默认项, 并在数值数据中输入如下命令:

1
{python_path}\pythonw.exe {pyw_file}\get_time.pyw

{python_path} 为 Python 的安装路径,可以用 where python 命令找到 ; {pyw_file} 是 get_time.pyw 文件所在的路径。点击确定。

如果想在右键菜单删除该项目只需要打开注册表编辑器定位到 ‘计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\获取当前时间’ 并删除 “获取当前时间” 项即可。

用 winreg 自动添加到注册表

添加到注册表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import winreg as reg
from pathlib import Path
import sys

def add_key(menu_name):
key = reg.OpenKey(reg.HKEY_CLASSES_ROOT,"Directory\\Background\\shell")
reg.SetValue(key, menu_name, reg.REG_SZ, menu_name_value)
sub_key = reg.OpenKey(key, menu_name)

python_path = Path(sys.executable).parent / "pythonw.exe"
add_reg_path = Path.cwd() / Path('get_time.pyw')

menu_command = str(python_path) +" "+ str(add_reg_path)
reg.SetValue(sub_key, 'command', reg.REG_SZ, menu_command)

if __name__ == '__main__':
menu_name = "获取当前时间"
menu_name_value = "获取当前时间"
add_key()

从注册表中删除:

1
2
3
4
5
6
7
8
9
10
11
import winreg as reg

def delete_key(menu_name):
key = reg.OpenKey(reg.HKEY_CLASSES_ROOT,"Directory\\Background\\shell")
sub_key = reg.OpenKey(key, menu_name)
reg.DeleteKey(sub_key,'command')
reg.DeleteKey(key,menu_name)

if __name__ == '__main__':
menu_name = "获取当前时间"
delete_key(menu_name)

上面两段 code 都需要用管理员权限来执行。