使用 Windows Explorer 在文件上按 CTRL+C 后获取文件名
Get filename after a CTRL+C on a file with Windows Explorer
当你对文件执行 Copy
(CTRL+C) 时,然后在某些程序中(例如:它在 Windows Explorer 地址栏中工作,也与 Everything 索引软件一起使用),在执行粘贴时(CTRL+V),文件名或目录名像文本一样粘贴,像这样:"d:\test\hello.txt"
.
我试过这个:
- CTRL+C 在 Windows Explorer
中的文件或文件夹上
运行:
import win32clipboard
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print data
但是我得到这个错误:
TypeError: Specified clipboard format is not available
问题:如何在 Windows 资源管理器中检索已 "copied" (CTRL+C) 的文件的文件名?
这对我有用:
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)
剪贴板可能包含不止一种格式。例如,当从 MS word 复制格式化文本时,格式化文本和纯文本都将在剪贴板中,因此根据您粘贴到的应用程序,目标应用程序可能采用一种或另一种格式,具体取决于关于它支持的内容。
来自MSDN:
A window can place more than one clipboard object on the clipboard,
each representing the same information in a different clipboard
format. When placing information on the clipboard, the window should
provide data in as many formats as possible. To find out how many
formats are currently used on the clipboard, call the
CountClipboardFormats function.
因此,win32clipboard.GetClipboardData
采用一个参数:format
,默认情况下为 win32clipboard.CF_TEXT
。
当你不带参数调用它时,它会引发错误 TypeError: Specified clipboard format is not available
,因为 TEXT 格式不在剪贴板中。
您可以要求 win32clipboard.CF_HDROP
格式,即 "A tuple of Unicode filenames":
import win32clipboard
win32clipboard.OpenClipboard()
filenames = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)
win32clipboard.CloseClipboard()
for filename in filenames:
print(filename)
尝试使用此参数 >>> CF_UNICODETEXT 像这样 win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
这对我有用。参考:https://docs.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats
当你对文件执行 Copy
(CTRL+C) 时,然后在某些程序中(例如:它在 Windows Explorer 地址栏中工作,也与 Everything 索引软件一起使用),在执行粘贴时(CTRL+V),文件名或目录名像文本一样粘贴,像这样:"d:\test\hello.txt"
.
我试过这个:
- CTRL+C 在 Windows Explorer 中的文件或文件夹上
运行:
import win32clipboard win32clipboard.OpenClipboard() data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() print data
但是我得到这个错误:
TypeError: Specified clipboard format is not available
问题:如何在 Windows 资源管理器中检索已 "copied" (CTRL+C) 的文件的文件名?
这对我有用:
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)
剪贴板可能包含不止一种格式。例如,当从 MS word 复制格式化文本时,格式化文本和纯文本都将在剪贴板中,因此根据您粘贴到的应用程序,目标应用程序可能采用一种或另一种格式,具体取决于关于它支持的内容。
来自MSDN:
A window can place more than one clipboard object on the clipboard, each representing the same information in a different clipboard format. When placing information on the clipboard, the window should provide data in as many formats as possible. To find out how many formats are currently used on the clipboard, call the CountClipboardFormats function.
因此,win32clipboard.GetClipboardData
采用一个参数:format
,默认情况下为 win32clipboard.CF_TEXT
。
当你不带参数调用它时,它会引发错误 TypeError: Specified clipboard format is not available
,因为 TEXT 格式不在剪贴板中。
您可以要求 win32clipboard.CF_HDROP
格式,即 "A tuple of Unicode filenames":
import win32clipboard
win32clipboard.OpenClipboard()
filenames = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)
win32clipboard.CloseClipboard()
for filename in filenames:
print(filename)
尝试使用此参数 >>> CF_UNICODETEXT 像这样 win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) 这对我有用。参考:https://docs.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats