String in Zwischenspeicher für Copy/Paste



  • Hiho,

    ich möchte einen string in ein Eingabefeld eintragen.
    Als Beispiel: ein Eingabefeld auf einer Homepage.
    Nun könnte ich den string Buchstabe für Buchstabe durchgehen und mit keybd_event das eintragen "simulieren". Das wird aber spätestens dann kompliziert, wenn der Buchstabe zB "æ" ist (da müsste man ja mit ALT+zahl arbeiten).
    Gibt es eine Möglichkeit einen std::string in die Zwischenablage zu kopieren, sodass man ihn mit STRG+V einfügen kann?



  • stringy schrieb:

    Gibt es eine Möglichkeit einen std::string in die Zwischenablage zu kopieren, sodass man ihn mit STRG+V einfügen kann?

    das steht in der api-dokumentation deines betriebssystems.



  • Vielen Dank schonmal!

    Ich habe jetzt folgende Funktion gefunden:

    #include <windows.h>
    
    char * getStringFromClipboard()
    {
        int ok = OpenClipboard(NULL);
        char * cBuffer = NULL;
    
        if (!ok) return NULL;
    
        HANDLE hClipData = GetClipboardData( CF_TEXT );
        cBuffer = (char*)GlobalLock( hClipData );
        GlobalUnlock( hClipData );
        CloseClipboard();
    
        return cBuffer;
    }
    

    Damit kann ich schonmal auf die Zwischenablage zugreifen.

    Ich habe in der msdn auch den Befehl SetClipboardData, also

    HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
    

    gefunden.
    Allerdings kenne ich mich nicht gut mit der WinAPI aus und weis nicht, wie ich den String an die funktion übergeben kann.
    Wie kann ich jetzt die Funktion von oben so umschreiben, dass mein String mit SetClipboardData in die Zwischenablage kopiert wird?
    Mein Ansatz wäre, parallel zu der Funktion oben:

    void setStringInClipboard(const std::string& name)
    {
        int ok = OpenClipboard(NULL);
        char * cBuffer = NULL;
    
        if (!ok) return;
    
        //Umwandlung von std::string in HANDLE Objekt (?)
    
        CloseClipboard();
    }
    

  • Administrator

    1. Falsches Forum, wir haben ein WinAPI Unterforum.
    2. http://msdn.microsoft.com/en-us/library/ms649051(VS.85).aspx
    Runterscrollen führt zu
    3. http://msdn.microsoft.com/en-us/library/ms649016(VS.85).aspx
    Einem Beispiel um mit dem Clipboard umzugehen.
    4. Vielleicht noch zwei kleine C++ Hinweise:
    http://www.cplusplus.com/reference/string/string/c_str.html
    http://www.cplusplus.com/reference/string/string/data.html

    Grüssli



  • Danke für die Tipps!

    ich habs jetzt so gelöst:

    void SetClipboardText(const string& name)
    {
        int ok = OpenClipboard(NULL);
        if (!ok) return;
    
        const char* strData = name.c_str();
        EmptyClipboard();
        HGLOBAL hClipboardData;
        hClipboardData = GlobalAlloc(GMEM_DDESHARE, strlen(strData)+1);
        char * pchData;
        pchData = (char*)GlobalLock(hClipboardData);
        strcpy(pchData, LPCSTR(strData));
        GlobalUnlock(hClipboardData);
        SetClipboardData(CF_TEXT,hClipboardData);
        CloseClipboard();
    }
    

Anmelden zum Antworten