Bilddaten als "Rohdaten" kopieren (ähnlich Öffnen->Strg+a->Strg+c)

  • Hallo Zusammen,

    ich Programmiere gerade ein kleines Script, das mir das Screenshot erstellen erleichtern soll. Die Funktionen zum erstellen und löschen der Screenshots funktionieren bereits problemlos.

    Die Bilder werden vorübergehend als *.jpg gespeichert. Im Anschluss möchte ich die Bilder in Excel einfügen.
    Nun zum Problem:

    Bild kopieren und einfügen mit _ClipPutFile() / ClipGet() funktioniert in Excel nicht. Die Bilder werden von der Zwischenablage nicht erkannt. Über die Excel eigene Funktion "Bild Einfügen..." funktioniert aber ist nicht sehr zuverlässig und schnell. Was hingegen funktioniert ist das Bild erst zu öffnen (Paint), alles markieren, kopieren und einfügen.

    Das ist aber auch ein sehr umständlicher Weg und ich hoffe Ihr habt eine Idee, wie man das einfacher und schneller lösen kann.

    Die Excelfunktionen habe ich auch getestet aber hier ist das Problem, das eine Datei angegeben muss aber diese in meinem Fall immer unterschiedlich ist.

    Ich freue mich auf eure Antworten

    Gruß
    MiracelVip

  • Du musst das Bild, das du per Screenshot erstellt hast, in ein Clipboard Format umwandeln.

    Die Umwandlung mit einem GDI Bild, nicht GDI+, geht über die Funktion _WinAPI_CopyImage(), das du mit _ClipBoard_SetDataEx() in den Zwischenspeicher kopieren kannst.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Danke für den Ansatz.

    Leider verstehe ich die Funktion _ClipBoard_SetDataEx() nicht wirklich. Bei mir kommen einfach keine Daten an :/


    [autoit]

    Func insert_screenshot () _ArrayDisplay($bilder) $pfad = @ScriptDir & "\Temp" & $bilder[1] $pfad2 = _WinAPI_CopyImage($pfad)
    _ClipBoard_SetDataEx ($pfad2, $CF_TEXT)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_BITMAP)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_METAFILEPICT)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_SYLK )sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DIF)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_TIFF)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_OEMTEXT)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DIB)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_PALETTE)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_PENDATA)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_UNICODETEXT)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_ENHMETAFILE)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_HDROP)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_LOCALE)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DIBV5)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_OWNERDISPLAY)sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DSPTEXT )sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DSPBITMAP )sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DSPMETAFILEPICT )sleep(500)_ClipBoard_SetDataEx ($pfad2, $CF_DSPENHMETAFILE )

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite (_ClipBoard_SetDataEx ($pfad2, $CF_BITMAP))

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]


    Irgentwie löscht es mir hier die Zeilenumbrüche

  • Probiere es mal damit:

    [autoit]


    #include <Clipboard.au3>
    #include <Screencapture.au3>

    [/autoit][autoit][/autoit][autoit]

    $hHBmp = _ScreenCapture_Capture("", 0, 0, 100, 100)
    $hClipboard_Bitmap = _WinAPI_CopyImage($hHBmp, 0, 0, 0, BitOR($LR_COPYDELETEORG, $LR_COPYRETURNORG))

    [/autoit][autoit][/autoit][autoit]

    _ClipBoard_Open(0)
    _ClipBoard_Empty()
    _ClipBoard_SetDataEx($hClipboard_Bitmap, $CF_BITMAP)
    _ClipBoard_Close()
    _WinAPI_DeleteObject($hClipboard_Bitmap)
    _WinAPI_DeleteObject($hHBmp)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯