最近在开发一个共享剪切板的功能。在使用程序把文件接入Windows剪切板的过程中,遇到了问题,被困扰很久。
GPTo3,DeepSeek,Gemini Think都问了,给了密密麻麻一堆代码都不行。
只是把一个文件名字放到剪切板里,没想到这么难啊。
最终还是通过谷歌搜索解决了。
解决方案是使用Powershell的一个命令。
Get-Item a.jpg | Set-Clipboard
通过这条命令,可以完美的将文件写入到剪切板。
如果是多个文件,可以使用命令:
Get-Item a.txt,b.jpg | Set-Clipboard
知道这个原理之后,可以用Python调用这个命令:
import subprocess
args = ['powershell', 'Get-Item 文件路径,文件路径,... | Set-Clipboard']
subprocess.Popen(args=args)
完善一下,就可以写成一个单独的方法:
def write_files(self, file_list):
#把file_list通逗号拼接成字符串
file_list_str = ','.join(file_list)
# 定义 PowerShell 命令
ps_command = f"Get-Item {file_list_str} | Set-Clipboard"
# 创建 STARTUPINFO 对象
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
# 调用 subprocess.run 并隐藏命令行窗口
result = subprocess.run(["powershell", "-Command", ps_command], startupinfo=startupinfo)
这个方法,只要给定文件路径,不管一个或者多个,都可以一次性写入剪切板。