2012-06-13 54 views
5

Có cách nào để sử dụng mô-đun win32clipboard để lưu trữ tham chiếu đến tệp trong khay nhớ tạm của cửa sổ trong python hay không. Mục tiêu của tôi là dán hình ảnh theo cách cho phép minh bạch. Nếu tôi kéo và thả một tệp 'png' vào OneNote hoặc tôi sao chép tệp và sau đó dán nó vào OneNote, điều này có vẻ như giữ được độ trong suốt. Theo như tôi có thể nói, clipboard không thể lưu trữ hình ảnh trong suốt đó là lý do tại sao nó phải là một tham chiếu đến một tập tin.Lưu trữ một tệp trong khay nhớ tạm trong python

Nghiên cứu của tôi cho thấy rằng nó có thể liên quan đến thuộc tính win32clipboard.CF_HDrop nhưng tôi không chắc chắn.

Vì vậy, để tóm tắt, mục tiêu của tôi là có một chút mã python mà tôi có thể nhấp và sử dụng tệp cụ thể trên Máy tính để bàn của tôi có tên 'img.png' chẳng hạn. Kết quả là 'img.png' được lưu trữ trong clipboard và có thể được dán vào các chương trình khác. Về cơ bản, hành vi tương tự như thể tôi đã chọn tệp trên Máy tính để bàn, nhấp chuột phải và chọn 'Sao chép'.

EDIT: Trang này dường như cho thấy có một cách sử dụng win32clipboard.CF_HDrop bằng cách nào đó: http://timgolden.me.uk/pywin32-docs/win32clipboard__GetClipboardData_meth.html

Nó nói "CF_HDROP" được gắn liền với "một tuple của tên tập tin Unicode"

+0

popen và clip.exe, tắt đầu của tôi –

+0

Bật ra rằng bạn có thể lưu trữ hình ảnh trong khay nhớ tạm, nhưng không phải với độ trong suốt. Tôi sẽ chấp nhận câu trả lời của Khalid, nhưng nó không phải là 100% những gì tôi muốn. –

Trả lời

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

Hãy lấy số windows binaries cho PythonMagick

+0

Dường như không hoạt động. Khi tôi dán hình ảnh, nó không còn có nền trong suốt nữa. –

+0

Vì vậy, bạn đang nói rằng hoạt động sao chép dán thực sự hoạt động, nhưng hình ảnh của bạn bằng cách nào đó bị hỏng? –

+0

Tôi không nghĩ rằng 'bị hỏng' là từ đúng. Như đã đề cập trong câu hỏi của tôi, dán một hình ảnh có nền trong suốt là những gì liên quan đến tôi. Tôi nghĩ rằng vấn đề là clipboard có thể lưu trữ trực tiếp thông tin hình ảnh hoặc một số loại tham chiếu đến một tập tin. Nếu dữ liệu hình ảnh được lưu trữ thì độ trong suốt sẽ bị mất. Nếu tham chiếu đến tệp được lưu trữ, các cửa sổ dường như biết cách giữ độ trong suốt khi chèn 'png' vào một tệp. –

1

Tôi viết câu trả lời này, mặc dù đây chỉ là một bước có thể giúp bạn, vì nhận xét không có nhiều lựa chọn định dạng ion.

tôi đã viết kịch bản mẫu này:

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() 

Sau đó, tôi chọn một tập tin hình ảnh trong thám hiểm và sao chép nó; sau đó, tập lệnh báo cáo các định dạng clipboard có sẵn sau đây:

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 

"Hiệu ứng DropE ưu tiên" này dường như đáng ngờ, mặc dù tôi nằm xa chuyên gia Windows. Tôi sẽ thử đầu tiên với FileNameW, mặc dù, vì điều này có thể làm công việc cho bạn (tôi không có OneNote cài đặt, xin lỗi). Dường như nó trông đợi như dữ liệu chỉ có tên đường dẫn đầy đủ được mã hóa là 'utf-16-le' với một ký tự rỗng (được mã hóa là '\0\0') ở cuối.

Các vấn đề liên quan