Seite 1 von 1

Datei in Clipboard einfügen

Verfasst: Sonntag 17. Mai 2015, 14:07
von darksharky
Hallo

Also ich habe folgendes Problem mein Programm soll in einem fremden Programm Dateien einfügen das funktioniert dort leider
nur per Rechtklick dann 2 mal "E" und Enter da es keine Schnittstellen hat(wird vom Clipboard eingefügt).

Das simulieren des rechtklicks und der tasten ist kein problem ich habe den Dateipfad der einzufügenden Datei z.b C:\temp1.txt
weiss aber leider nicht wie ich einen Verweis auf eine Datei ins Clipboard einfügen kann wie es die STRG+C Tastenkombionation in
Windows tut.

Für Text verwende ich diesen Code :

Code: Alles auswählen

import ctypes
wcscpy = ctypes.cdll.msvcrt.wcscpy

OpenClipboard = ctypes.windll.user32.OpenClipboard
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
GetClipboardData = ctypes.windll.user32.GetClipboardData
SetClipboardData = ctypes.windll.user32.SetClipboardData
CloseClipboard = ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT = 13

GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc
GlobalLock = ctypes.windll.kernel32.GlobalLock
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000

def get():
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    data = ctypes.c_wchar_p(handle).value
    pcontents = GlobalLock(handle)
    data = ctypes.c_wchar_p(pcontents).value if pcontents else u''
    GlobalUnlock(handle)
    CloseClipboard()
    return data

def put(data):
    if not isinstance(data, str):
        data = data.decode('mbcs')
    OpenClipboard(None)
    EmptyClipboard()
    hCd = GlobalAlloc(GMEM_DDESHARE, 2 * (len(data) + 1))
    pchData = GlobalLock(hCd)
    wcscpy(ctypes.c_wchar_p(pchData), data)
    GlobalUnlock(hCd)
    SetClipboardData(CF_UNICODETEXT, hCd)
    CloseClipboard()
Gibt es eine möglichkeit mit ctypes auch Dateien in das Clipboard zu kopieren ?
Bzw gibt eine eine andere möglichkeit dies zu realisieren ich stecke nach längerer Suche leider bei diesem Problem fest?

Danke

Re: Datei in Clipboard einfügen

Verfasst: Montag 25. Mai 2015, 21:52
von mutetella
Mir ist jetzt nicht ganz klar, ob sich Deine Frage auf Windows (so wie in Deinem Codebeispiel) oder auf Linux bezieht. Innerhalb Windows könnten Dir die beiden Links weiterhelfen:

Storing a file in the clipboard in python
How do I script an OLE component using Python?

Letztlich ist ein Verweis auf eine Datei doch der string einer Pfad- und Dateiangabe. Unter Linux könntest Du das über ein ``subprocess.call`` auf das xsel command lösen.
Daneben gibt es auch noch das clipboard modul.

mutetella

Re: Datei in Clipboard einfügen

Verfasst: Mittwoch 27. Mai 2015, 11:07
von darksharky
danke für deine antwort

Meine frage bezieht sich auf Windows.
Das Clipboard modul hatte ich schon getestet das funktioniert mit Dateien allerdings nicht nur mit text

Deine links helfen mir leider nicht weiter da ich das ganze gerne mit ctypes lösen würde ohne das pywin32 modul.