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



当您对文件执行Copy(CTRL +C(时,在某些程序中(例如:它在Windows资源管理器地址栏中工作,也与所有索引软件一起使用(,当执行粘贴(CTRL+V(时,文件名或目录名称像文本一样粘贴,如下所示:"d:testhello.txt"

我试过这个:

  • 在 Windows 资源管理器中对文件或文件夹进行Ctrl+C
  • 跑:

    import win32clipboard
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData()
    win32clipboard.CloseClipboard()
    print data
    

但是我收到此错误:

类型错误: 指定的剪贴板格式不可用

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

剪贴板可能包含多种格式。例如,从 MS Word 复制格式化文本时,格式化文本和纯文本都将位于剪贴板中,因此,根据要粘贴到的应用程序,目标应用程序可能会采用一种或另一种格式,具体取决于它支持的内容。

从 MSDN:

一个窗口可以在剪贴板上放置多个剪贴板对象, 每个都表示不同剪贴板中的相同信息 格式。在剪贴板上放置信息时,窗口应 以尽可能多的格式提供数据。了解有多少 剪贴板上当前使用的格式,调用 计数剪贴板格式功能。

正因为如此,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 文档以了解标准剪贴板格式

这对我有用:

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)

尝试将此参数用于>>>像这个win32 剪贴板这样的CF_UNICODETEXT。GetClipboardData(win32clipboard.CF_UNICODETEXT(这对我来说是工作。参考: https://learn.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats

最新更新