Zwischenablage



  • #include <windows.h>
    
    BOOL SetClipboardText(LPCTSTR lpszInputText) {
        if(OpenClipboard(NULL) == FALSE) {
            return FALSE;
        }
    
        if(EmptyClipboard() == FALSE) {
            CloseClipboard();
            return FALSE;
        }
    
        HGLOBAL hMemory = GlobalAlloc(GMEM_MOVEABLE, (lstrlen(lpszInputText) + 1) * sizeof(TCHAR));
        if(hMemory == NULL) {
            CloseClipboard();
            return FALSE;
        }
    
        LPTSTR lpszText = (LPTSTR) GlobalLock(hMemory);
        if(lpszText == NULL) {
            GlobalFree(hMemory);
            CloseClipboard();
            return FALSE;
        }
    
        if(lstrcpy(lpszText, lpszInputText) == NULL) {
            GlobalUnlock(hMemory);
            GlobalFree(hMemory);
            CloseClipboard();
            return FALSE;
        }
    
    #ifdef UNICODE
        if(SetClipboardData(CF_UNICODETEXT, hMemory) == NULL) {
    #else
        if(SetClipboardData(CF_TEXT, hMemory) == NULL) {
    #endif
            GlobalUnlock(hMemory);
            GlobalFree(hMemory);
            CloseClipboard();
            return FALSE;
        }
    
        if(GlobalUnlock(hMemory) == FALSE) {
            if(GetLastError() != NO_ERROR) {
                GlobalFree(hMemory);
                CloseClipboard();
                return FALSE;
            }
        }
    
        if(GlobalFree(hMemory) != NULL) {
            CloseClipboard();
            return FALSE;
        }
    
        if(CloseClipboard() == FALSE) {
            return FALSE;
        }
    
        return TRUE;
    }
    

    [ Dieser Beitrag wurde am 02.08.2002 um 09:53 Uhr von Netter Troll editiert. ]



  • thx@netter troll
    hab mir das irgendwie einfacher vorgestellt 😕



  • @Kenny: Einfacher wird es nur, wenn dein Programm intern eine eigenen Zwischenablage benützt - hier benützt es die Windowszwischenablage. Eine eigene lässt sich leicht in Form eines std::string aus der Header-Datei <string> realisieren - soweit sie keine Bilder enthalten können muss.

    MfG SideWinder



  • Hallo! Wie bekomm ich es bei diesem Beispiel zusammen, dass man mitteln "cin" etwas eingibt ( z.b Hallo) und dass dann dies in die Zwischenablage kopiert wird.

    danke Shark



  • #include <iostream>
    #include <string>
    
    // ...
    
    int main()
    {
    	std::string text;
    	std::cin >> text;
    	SetClipboardText(text.c_str());
    }
    


  • danke, doch wenn ich etwas eingebe dass aus mehreren wörtern besteht (z.B. hallo ich heisse xy) dann wird nur das erste wort in die Zwischenablage kopiert! MAch ich da was falsch??

    mfg Shark



  • Nein, da macht cin etwas "falsch" - es liest nur bis zum ersten Whitespace-Zeichen.

    Schau dir die Funktion std::getline() an! (Achtung nicht: cin.getline()!).

    MfG SideWinder



  • danke, funktioniert hervorragend 😉

    mfg Shark



  • kann ich dieses beispiel auch irgendwie dazu verwenden etwas aus der ZWischenablage in die Konsole einfügen??? Wenn ja, bitte ich um eine Antwort

    mfg Shark



  • Sowas findet man um einiges schneller wenn man gleich selbst in der MSDN nachschlägt - gibts ja auch Online :).

    GetClipboardText() dürfte es sein - gleich mal ne Anmerkung: Meistens gibts in der WinAPI zu allen SetXXX() auch ein GetXXX() ;).

    MfG SideWinder



  • äm danke, doch muss ich jetzt nur statt SetClipboardText() GetClipboardText() nehmen?? blick da irgendwie nicht ganz durch...

    mfg Shark



  • Am besten suchst du jetzt mal nach GetClipboardText() in der Online MSDN. Da dürftest du die Syntax finden und dann dürfte es eigentlich kein Problem mehr sein 😉



  • hmmm... es ist kein GetClipboardText() in der MSDN bekannt?!?! 😕

    mfg Shark



  • LOL, was es doch für unterschiede bei den Codes gibt 😃 😃 - Ich probier's auch mal aus 😉



  • @shark
    Aber SetClipboardText() schon, oder? Da dürfte dann normalerweise auch das Gegenstück als Verweis da sein *hoffe*.



  • Die API Funktion heißt SetClipboardData



  • Aahhh darin liegt der Hund begraben 🤡



  • ??? wer kann mich da mal aufklären??
    Weiß jemand zumindest zu welche headerdatei GetClipboardText() gehört??
    und gibt es irgendwo auch ein deutsches MSDN??

    mfg SHark



  • windows.h

    Die Funktion heißt allerdings GetClipboardData.

    SetClipboardText ist doch eine selbstgeschriebene Funktion.



  • Wusst ichs doch das es etwas komplizierter sein muss als einfach die Daten an die WinAPI zu verschicken *g*.

    Nein es gibt keine MSDN - sie ist zwar zT eingedeutscht (kannst dir kaufen), aber immer noch nicht vollständig. Und gerade was die WinAPI betrifft hast du weiterhin viel mit der englischen Sprache zu tun.

    MfG SideWinder


Anmelden zum Antworten