Portable Clipboard-Library in C/C++



  • Kennt jemand eine Bibliothek für C oder C++, die Zugriff auf die Zwischenablage ermöglicht? Meine Anforderungen diesbezüglich wären:

    • Es reicht für mich, wenn man unformatierten Text in die Zwischenablage kopieren und von dort aus wieder einfügen kann. Bilder, Dateien, etc. sind mir momentan nicht wichtig.
    • Die Bibliothek sollte portabel sein (es wäre gut, wenn der Code mindestens auf Windows und Linux laufen würde).
    • Ich möchte dafür kein riesiges Framework wie Qt nutzen. Ideal wäre etwas direkt für diesen Zweck, aber etwas Zusatzfunktionalität schadet auch nicht, sofern sich die Abhängigkeiten in Grenzen halten.
    • Eine möglichst freie Lizenz. Ich habe vor, die Funktionalität in einer eigenen OpenSource-Bibliothek zu benutzen. Der Code der Clipboard-Bibliothek selbst darf aber auch ClosedSource sein.

    Ich kenne mich mit den plattformabhängigen APIs leider zu wenig aus. Ich würde die Funktionalität wahrscheinlich schon irgendwie zustandebringen, aber ich fände es natürlich schön, wenn es sowas schon fertig geben sollte.



  • Wenn es nur einfache Sachen sind, dann geht das afaik wirklich recht einfach direkt mit der WinAPI. Unter Linux wird das wahrscheinlich auch nicht all zu schwer sein, daher ist es wahrscheinlich recht einfach da einen eigenen Wrapper zu schreiben, falls es wirklich noch keine gescheite Library dazu gibt (weils halt wahrscheinlich wirklich so schnell gemacht ist).



  • mit winapi:

    const char* GetStringFromClipboard()  //inhalt der Zwischenablage in string kopieren
    {
        if (!OpenClipboard(NULL)) return NULL;
    
        HANDLE hClipData ( GetClipboardData( CF_TEXT ) );
        char * cBuffer ( (char*)GlobalLock( hClipData ) );
        GlobalUnlock( hClipData );
        CloseClipboard();
        return cBuffer;
    }
    bool SetClipboardText(const std::string& name) //string in zwischenablage kopieren (um mit strg+v darauf zuzugreifen)
    {
        if (!OpenClipboard(NULL)) return false;
    
        const char* strData ( name.c_str() );
        EmptyClipboard();
        HGLOBAL hClipboardData ( GlobalAlloc(GMEM_DDESHARE, strlen(strData)+1) );
        char * pchData ( (char*)GlobalLock(hClipboardData) );
        strcpy(pchData, LPCSTR(strData));
        GlobalUnlock(hClipboardData);
        SetClipboardData(CF_TEXT,hClipboardData);
        CloseClipboard();
        return true;
    }
    


  • @Nexus:

    Schau dir wxWidgets an.

    wx/clipbrd.h
    wx/msw/clipbrd.h
    wx/cocoa/clipbrd.h
    wx/x11/clipbrd.h
    usw.
    

    Gruß derDenker



  • Vielen Dank für die Antworten. Wahrscheinlich habt ihr Recht und es lohnt sich mehr, sowas selbst zu implementieren. Ich befürchte nur, ich könnte ziemlich schlechten Code schreiben, da meine Kenntnisse der Betriebssystem-APIs wie gesagt begrenzt sind.

    Danke auch für den Beispielcode und den Hinweis auf wxWidgets. Ich möchte wxWidgets zwar nicht benutzen (aus dem selben Grund wie Qt), aber ich habe habe dessen Implementierung bereits ein wenig angeschaut und kann mich unter anderem daran orientieren.

    Ich habe nun mit der Implementierung mit WinAPI begonnen, nun muss ich noch schauen, wie ich mit Unicode-Texten fertig werde. Falls jemand doch noch fertige Bibliotheken kennt oder sonstige Hinweise hat, nur her damit!


Log in to reply