Einfügen in Windows Zwischenablage



  • Guten morgen,

    #include <windows.h>
    
    void copyToClipboard(const char *str)
    {
        if(!OpenClipboard(NULL))
            return;
    
        EmptyClipboard();
    
        HGLOBAL hClipboardData;
        hClipboardData = GlobalAlloc(GMEM_DDESHARE, strlen(str)+1);
    
        char *pchData;
        pchData = (char*)GlobalLock(hClipboardData);
        strcpy(pchData, str);
    
        GlobalUnlock(hClipboardData);
    
        SetClipboardData(CF_TEXT, hClipboardData);
    
        CloseClipboard();
    }
    
    int main()
    {
        copyToClipboard("Copy me to clipboard");
    
        return 0;
    }
    

    Diesen Code hab ich aus der FAQ.
    Ich frage mich ob der Code wirklich korrekt ist.
    Auf http://msdn.microsoft.com/en-us/library/aa366574%28VS.85%29.aspx steht dazu:
    The following values are obsolete, but are provided for compatibility with 16-bit Windows. They are ignored.
    GMEM_DDESHARE
    GMEM_DISCARDABLE
    GMEM_LOWER
    GMEM_NOCOMPACT
    GMEM_NODISCARD
    GMEM_NOT_BANKED
    GMEM_NOTIFY
    GMEM_SHARE

    Ich störe mich daher an der Zeile:
    GlobalAlloc(GMEM_DDESHARE, strlen(str)+1);

    Was bedeutet diese genau? Insb. mit der Option GMEM_DDESHARE?!
    Und wenn GMEM_DDESHARE "veraltet/obsolete" ist und ignoriert wird.. was solllte man dann besser schreiben?

    Außerdem:
    Speicher der mit "GlobalAlloc" allokiert wird, muss laut der MSDN Seite oben mit "GlobalFree" freigegeben werden. Fehlt das nicht auch?

    Und was mir noch auffällt:
    Für was ist "pchData = (char*)GlobalLock(hClipboardData);"?
    pchData wird danach nicht mehr verwendet. Übersehe ich etwas?

    Wäre super, wenn mir hier jemand beim code review weiterhelfen könnte 😉



  • Die Antwort ist einfach: Mit Standard-C++ geht das nicht, weil Standard-C++ weder Windows noch die Zwischenablage kennt. -> falsches Forum, bitte zuerst die mit wichtig gekennzeichneten Threads lesen!



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten