使用Windows资源管理器在文件上使用CTRL + C后获取文件名

问题描述 投票:4回答:2

当您对文件执行Copy(CTRL + C)时,在某些程序中(例如:它在Windows资源管理器地址栏中工作,也可以使用Everything索引软件),在执行粘贴(CTRL + V)时,文件名或目录名称粘贴像文本,像这样:"d:\test\hello.txt"

我试过这个:

  • Windows资源管理器中的文件或文件夹上的CTRL + C.
  • 跑: import win32clipboard win32clipboard.OpenClipboard() data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() print data

但我得到这个错误:

TypeError:指定的剪贴板格式不可用

问题:如何在Windows资源管理器中检索已“复制”(CTRL + C)的文件的文件名?

python windows clipboard pywin32
2个回答
3
投票

剪贴板可能包含多种格式。例如,当从MS word复制格式化文本时,格式化文本和纯文本都将在剪贴板中,因此根据您粘贴的应用程序,目标应用程序可能采用一种或另一种格式,具体取决于它支持的是什么。

来自MSDN

窗口可以在剪贴板上放置多个剪贴板对象,每个剪贴板对象以不同的剪贴板格式表示相同的信息。在剪贴板上放置信息时,窗口应提供尽可能多的格式的数据。要了解剪贴板上当前使用的格式数,请调用CountClipboardFormats函数。

因此,win32clipboard.GetClipboardData采用一个论点:format,默认为win32clipboard.CF_TEXT

当你不带参数调用它时,它会引发错误,说TypeError: Specified clipboard format is not available,因为TEXT格式不在剪贴板中。

相反,您可以要求win32clipboard.CF_HDROP格式,即“Unicode文件名的元组”:

import win32clipboard
win32clipboard.OpenClipboard()
filenames = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)
win32clipboard.CloseClipboard()
for filename in filenames:
    print(filename)

另见MSDN doc for standard clipboard formats


3
投票

这对我有用:

import win32clipboard
win32clipboard.OpenClipboard()
filename_format = win32clipboard.RegisterClipboardFormat('FileName')
if win32clipboard.IsClipboardFormatAvailable(filename_format):
    input_filename = win32clipboard.GetClipboardData(filename_format).decode("utf-8")
    print(input_filename)
win32clipboard.CloseClipboard()

如果您只想使用文件名,则打印整个文件路径:

os.path.basename(input_filename)
© www.soinside.com 2019 - 2024. All rights reserved.