2012-06-13 16 views
5

Gibt es eine Möglichkeit, das Win32clipboard-Modul zu verwenden, um einen Verweis auf eine Datei in der Windows-Zwischenablage in Python zu speichern. Mein Ziel ist es, ein Bild so einzufügen, dass es transparent ist. Wenn ich eine PNG-Datei per Drag & Drop in OneNote verschiebe oder die Datei kopiere und in OneNote einfüge, scheint dies die Transparenz zu bewahren. Soweit ich das beurteilen kann, kann die Zwischenablage keine transparenten Bilder speichern, weshalb es eine Referenz auf eine Datei sein muss.Speichern einer Datei in der Zwischenablage in Python

Meine Forschung schlägt vor, dass es das win32clipboard.CF_HDrop Attribut beinhalten kann, aber ich bin mir nicht sicher.

Also, nur um zusammenzufassen, ist mein Ziel, ein wenig Python-Code zu haben, auf den ich klicken kann und der eine bestimmte Datei auf meinem Desktop namens 'img.png' verwendet. Das Ergebnis ist, dass 'img.png' in der Zwischenablage gespeichert wird und in andere Programme eingefügt werden kann. Im Wesentlichen das gleiche Verhalten, als ob ich die Datei selbst auf dem Desktop ausgewählt, mit der rechten Maustaste geklickt und "Kopieren" ausgewählt hätte.

EDIT: Diese Seite gibt es vorzuschlagen scheint, ist eine Art und Weise win32clipboard.CF_HDrop mit irgendwie: http://timgolden.me.uk/pywin32-docs/win32clipboard__GetClipboardData_meth.html

Er sagt: "CF_HDROP" mit "ein Tupel von Unicode-Dateinamen"

+0

popen und clip.exe, aus der Spitze meines Kopfes –

+0

Es stellt sich heraus, dass Sie ein Bild in der Zwischenablage, aber nicht mit Transparenz speichern können. Ich werde Khalids Antwort akzeptieren, aber es ist nicht 100%, was ich wollte. –

Antwort

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

Nimm die windows binaries für PythonMagick

+0

Scheint nicht zu funktionieren. Wenn ich das Bild einfügen, hat es keinen transparenten Hintergrund mehr. –

+0

Sie sagen also, dass die Copy-Paste-Operation tatsächlich funktioniert, aber Ihr Image ist irgendwie beschädigt? –

+0

Ich glaube nicht, dass "korrupt" das richtige Wort ist. Wie in meiner Frage erwähnt, geht es mir darum, ein Bild mit transparentem Hintergrund einzufügen. Ich denke, das Problem ist die Zwischenablage kann sowohl Bildinformationen direkt oder eine Art von Verweis auf eine Datei speichern. Wenn die Bilddaten gespeichert sind, geht die Transparenz verloren. Wenn der Verweis auf die Datei gespeichert wird, scheint Windows zu wissen, wie die Transparenz beibehalten wird, wenn ein "PNG" in eine Datei eingefügt wird. –

1

Ich schreibe dies als eine Antwort, obwohl es nur ein Schritt ist, der Ihnen helfen könnte, weil Kommentare nicht viel Formatierung opt haben Ionen.

Ich schrieb dieses Beispielskript:

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

dann eine Bilddatei im Explorer und kopiert es die ich ausgewählt habe; dann meldet das Skript die folgenden verfügbaren Zwischenablage-Formate:

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 

Dieses „Preferred Dropeffect“ verdächtig erscheint, obwohl ich weit von einem Windows-Experte bin. Ich würde zuerst mit FileNameW versuchen, da dies die Arbeit für Sie erledigen könnte (Ich habe OneNote nicht installiert, sorry). Es scheint, dass es als Daten nur den vollständigen Pfadnamen erwartet, der als "utf-16-le" mit einem Nullzeichen codiert ist (d. H. Codiert als '\0\0') am Ende.

Verwandte Themen