2012-06-13 4 views
5

Есть ли способ использовать модуль win32clipboard для хранения ссылки на файл в буфере обмена Windows в python. Моя цель - вставить изображение таким образом, чтобы обеспечить прозрачность. Если я перетащил файл «png» в OneNote или копирую файл, а затем вставляю его в OneNote, это, похоже, сохраняет прозрачность. Насколько я могу судить, буфер обмена не может хранить прозрачные изображения, поэтому он должен быть ссылкой на файл.Сохранение файла в буфере обмена в python

Мои исследования показывают, что это может включать атрибут win32clipboard.CF_HDrop, но я не уверен.

Итак, чтобы подвести итог, моя цель состоит в том, чтобы иметь некоторый код python, который я могу щелкнуть, и который, например, использует определенный файл на моем рабочем столе с именем «img.png». В результате «img.png» сохраняется в буфере обмена и может быть вставлен в другие программы. По сути, такое же поведение, как если бы я сам выбрал файл на Рабочем столе, щелкнул правой кнопкой мыши и выбрал «Копировать».

EDIT: Эта страница, кажется, предполагает, что есть способ, используя win32clipboard.CF_HDrop как-то: http://timgolden.me.uk/pywin32-docs/win32clipboard__GetClipboardData_meth.html

Он говорит "CF_HDROP" ассоциируется с "кортежем Юникода"

+0

popen и clip.exe, с верхней части головы –

+0

Оказывается, вы можете хранить изображение в буфере обмена, но не с прозрачностью. Я соглашусь ответить Халиду, но это не на 100%, что я хотел. –

ответ

0
from PythonMagick import Image 
Image("img.png").write("clipboard:") 

Захватите windows binaries для PythonMagick

+0

Кажется, не работает. Когда я вставляю изображение, у него больше нет прозрачного фона. –

+0

Итак, вы говорите, что операция копирования вставки работает, но ваш образ каким-то образом поврежден? –

+0

Я не думаю, что «испорченный» - это правильное слово. Как уже упоминалось в моем вопросе, приклеивание изображения, которое имеет прозрачный фон, касается меня. Я думаю, что проблема заключается в том, что буфер обмена может хранить информацию об изображении напрямую или какую-то ссылку на файл. Если данные изображения сохраняются, прозрачность теряется. Если ссылка на файл сохраняется, окна, похоже, знают, как сохранить прозрачность при вставке «png» в файл. –

1

Я пишу это как ответ, хотя это всего лишь шаг, который может вам помочь, поскольку комментарии не имеют большого формата форматирования opt ионов.

Я написал этот пример сценария:

import win32clipboard as clp, win32api 

clp.OpenClipboard(None) 

rc= clp.EnumClipboardFormats(0) 
while rc: 
    try: format_name= clp.GetClipboardFormatName(rc) 
    except win32api.error: format_name= "?" 
    print "format", rc, format_name 
    rc= clp.EnumClipboardFormats(rc) 

clp.CloseClipboard() 

Затем я выбрал файл изображения в Проводнике и скопировать его; Затем, сценарий выдает следующие доступные форматы буфера обмена:

format 49161 DataObject 
format 49268 Shell IDList Array 
format 15 ? 
format 49519 DataObjectAttributes 
format 49292 Preferred DropEffect 
format 49329 Shell Object Offsets 
format 49158 FileName 
format 49159 FileNameW 
format 49171 Ole Private Data 

Это «Preferred DropEffect» кажется подозрительным, хотя я далек от эксперта Windows. Сначала я попробую сначала с FileNameW, так как это может сделать вам работу (у меня нет OneNote, извините). Кажется, он ожидает, что в качестве данных будет только полный путь, закодированный как «utf-16-le» с нулевым символом (т. Е. Закодированным как '\0\0') в конце.

Смежные вопросы