Problem mit Clipboard

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von drschef.

    Problem mit Clipboard

    Aus dem Windows-Explorer wird ein Bild .jpg in die Windows-Zwischenablage kopiert (rechte Maustaste => Kopieren) und soll von dort mit folgendem Befehl verarbeitet werden:

    VB.NET-Quellcode

    1. If My.Computer.Clipboard.ContainsImage() Then
    2. ...
    3. endif


    Leider ergibt die Bedingung stets false. Im Unterschied dazu lässt sich ein mit Alt+Druck erzeugter Screenshot problemlos auslesen.
    Die obigen Quellzeilen werden im Netz an 1001 Stelle propagiert. Es fehlen Hinweise, dass da scheinbar noch etwas zu beachten ist.
    Du hast da nen Denkfehler.

    Du hast ne Datei in der Zwischenablage wenn du das im Explorer per Contextmenü machst, kein Bild.

    Machst du einen Screenshot, hast du ein Bild aber keine Datei in der Zwischenablage.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo Jou.
    @drschef Paint oder IrfanView: Markieren, kopieren oder Markierung ausschneiden. Das sind Bilder.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es gibt in folgender Klasse die GetDataObject-Methode, wo man feststwllen kann, was kopiert wurde...


    Danke für alle HInweise und den besonders.

    Damit ist mein Problem gelöst. Damit die Sache nicht so im Raum stehen bleibt, hier der Lösungsansatz:

    VB.NET-Quellcode

    1. Private Function GetClipboardImage() As Boolean 'Bild aus Windows-Zwischenspeicher einlesen
    2. GetClipboardImage = False
    3. If My.Computer.Clipboard.ContainsFileDropList Then
    4. Dim FNameColl As Collections.Specialized.StringCollection
    5. FNameColl = My.Computer.Clipboard.GetFileDropList()
    6. If FNameColl.Count = 1 Then
    7. Dim fname As String = FNameColl(0)
    8. EinlesenDatei(fname)
    9. GetClipboardImage = True
    10. End If
    11. Exit Function
    12. End If
    13. If My.Computer.Clipboard.ContainsImage() Then
    14. ...
    15. GetClipboardImage = True
    16. Exit Function
    17. End If
    18. End Function