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

Bas*_*asj 8 python windows clipboard pywin32

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

我试过这个:

  • CTRL+C在 Windows 资源管理器中的文件或文件夹上
  • 跑:

    import win32clipboard
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData()
    win32clipboard.CloseClipboard()
    print data
    
    Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

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

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

zvo*_*one 8

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

MSDN

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

因此,win32clipboard.GetClipboardData采用一个参数:format,默认情况下为win32clipboard.CF_TEXT

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

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

import win32clipboard
win32clipboard.OpenClipboard()
filenames = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)
win32clipboard.CloseClipboard()
for filename in filenames:
    print(filename)
Run Code Online (Sandbox Code Playgroud)

另请参阅MSDN 文档以了解标准剪贴板格式