Sagen Sie mir bitte, warum ich diese Fragen bekommen:GetClipboardData (CF_UNICODETEXT);
wenn Zwischenablage Unicode-Zeichen (e.q. Russisch) enthält bekomme ich nur das erste Wort ausgewählt. Erstes Wort vor "Leerzeichen".
Wenn die Zwischenablage keine Unicode-Zeichen enthält (nur Englisch), erhalte ich das erste Zeichen des ausgewählten Textes.
Get Text ausgewählt:
CStringA getClipboard()
{
CStringA strData;
if (OpenClipboard(NULL)){
HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT);
char *pchData = (char*)GlobalLock(hClipboardData);
strData = pchData;
GlobalUnlock(hClipboardData);
CloseClipboard();
}
return strData;
}
Set 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 und legen Sie den Inhalt der Zwischenablage erhalten.
CStringA str = getClipboard();
setClipboard(str);
CStringA ist eine ANSI-Zeichenfolge - für UNICODE benötigen Sie CStringW. –
Funktioniert nicht. Ich erhalte Symbole B5: AB und seltsame "Ecken" – user1537809
Ist nicht 'CF_UNICODETEXT' UTF-16, d. H. Die Standardzeichenfolge' W', was bedeutet, dass für Standard-ASCII nur ein Zeichen erhalten wird. – Petesh