Получить имя файла после комбинации клавиш CTRL + C в проводнике Windows - PullRequest
0 голосов
/ 04 сентября 2018

Когда вы делаете Copy ( CTRL + C ) для файла, то в некоторых программах (например: он работает в адресной строке Windows Explorer, также с индексированием «Все»). программное обеспечение), когда выполняется вставка ( CTRL + V ), имя файла или каталога вставляется как текст, например: "d:\test\hello.txt".

Я пробовал это:

  • CTRL + C для файла или папки в проводнике Windows
  • Пробег:

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

Но я получаю эту ошибку:

TypeError: Указанный формат буфера обмена недоступен

Вопрос: как получить имя файла, который был «скопирован» (CTRL + C) в проводнике Windows?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Буфер обмена может содержать более одного формата. Например, когда форматированный текст копируется из MS word, как форматированный текст, так и простой текст будут в буфере обмена, так что в зависимости от приложения, в которое вы вставляете, целевое приложение может принимать тот или иной формат, в зависимости от на что он поддерживает.

С MSDN :

Окно может разместить более одного объекта буфера обмена в буфер обмена, каждый из которых представляет одну и ту же информацию в другом буфере обмена формат. При помещении информации в буфер обмена, окно должно предоставлять данные в максимально возможном количестве форматов. Чтобы узнать, сколько форматы в настоящее время используются в буфере обмена, вызовите Функция CountClipboardFormats.

Из-за этого win32clipboard.GetClipboardData принимает один аргумент: format, что по умолчанию win32clipboard.CF_TEXT.

Когда вы вызываете его без аргументов, возникает ошибка: 1018 *, потому что формат TEXT отсутствует в буфере обмена.

Вместо этого вы можете запросить win32clipboard.CF_HDROP формат, который "Кортеж файлов Unicode" :

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

См. Также Документ MSDN для стандартных форматов буфера обмена

0 голосов
/ 04 сентября 2018

Это сработало для меня:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...