GetClipboardData (CF_UNICODETEXT);

Sagen Sie mir bitte, warum bekomme ich diese Probleme:

  • wenn die Zwischenablage enthält unicode-Zeichen (e.q. Russisch) bekomme ich nur das erste markierte Wort. Erstes Wort, bevor Sie die "space" - Charakter.
  • wenn Zwischenablage nicht mit unicode-chars (nur auf Englisch) bekomme ich erste Zeichen des ausgewählten Textes.

Get selected text:

CStringA getClipboard()
{
     CStringA strData;

     if (OpenClipboard(NULL)){

         HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT);
         char *pchData = (char*)GlobalLock(hClipboardData);
         strData = pchData;
         GlobalUnlock(hClipboardData);
         CloseClipboard();

    }
    return strData;
}

Text:

bool setClipboard(CStringA textToclipboard)
{
    bool success = true;

    if (OpenClipboard(NULL)){

        EmptyClipboard();
        HGLOBAL hClipboardData;
        size_t size = (textToclipboard.GetLength()+1) * sizeof(TCHAR);
        hClipboardData = GlobalAlloc(NULL, size);
        TCHAR* pchData = (TCHAR*)GlobalLock(hClipboardData);
        memcpy(pchData, LPCTSTR(textToclipboard.GetString()), size);
        SetClipboardData(CF_UNICODETEXT, hClipboardData);
        GlobalUnlock(hClipboardData);
        CloseClipboard();
    }

    return success;

}

Einfach get-und set-Inhalt der Zwischenablage.

CStringA str = getClipboard();
setClipboard(str);
CStringA ist eine ANSI-Zeichenfolge für UNICODE-Sie müssen CStringW.
Funktioniert nicht. Ich bekomme Symbole B5:AB und zu seltsame "Ecken"
Nicht CF_UNICODETEXT UTF-16, also die standard - W format-string, was bedeutet, für standard-ascii, du bekommst nur einen Charakter.

InformationsquelleAutor user1537809 | 2013-03-12

Schreibe einen Kommentar