使用Windows资源管理器对文件进行CTRL + C之后获取文件名

时间:2018-09-03 21:45:15

标签: python windows clipboard pywin32

对文件执行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)文件的文件名?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

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

来自https://download.docker.com/linux/ubuntu/

  

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

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

在不带参数的情况下调用它时,由于剪贴板中没有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)

另请参阅win32clipboard.GetClipboardData