Datei in Clipboard einfügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
darksharky
User
Beiträge: 6
Registriert: Sonntag 19. April 2015, 17:31

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
darksharky
User
Beiträge: 6
Registriert: Sonntag 19. April 2015, 17:31

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.
Antworten