fix: UpdateClientClipboard may lost the last letter
This commit is contained in:
@@ -319,13 +319,18 @@ VOID CScreenManager::UpdateClientClipboard(char *szBuffer, ULONG ulLength)
|
|||||||
if (!::OpenClipboard(NULL))
|
if (!::OpenClipboard(NULL))
|
||||||
return;
|
return;
|
||||||
::EmptyClipboard();
|
::EmptyClipboard();
|
||||||
HGLOBAL hGlobal = GlobalAlloc(GMEM_DDESHARE, ulLength);
|
HGLOBAL hGlobal = GlobalAlloc(GMEM_DDESHARE, ulLength+1);
|
||||||
if (hGlobal != NULL) {
|
if (hGlobal != NULL) {
|
||||||
|
|
||||||
LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal);
|
LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal);
|
||||||
if (szClipboardVirtualAddress == NULL)
|
if (szClipboardVirtualAddress == NULL)
|
||||||
return;
|
{
|
||||||
|
GlobalFree(hGlobal);
|
||||||
|
CloseClipboard();
|
||||||
|
return;
|
||||||
|
}
|
||||||
memcpy(szClipboardVirtualAddress, szBuffer, ulLength);
|
memcpy(szClipboardVirtualAddress, szBuffer, ulLength);
|
||||||
|
szClipboardVirtualAddress[ulLength] = '\0';
|
||||||
GlobalUnlock(hGlobal);
|
GlobalUnlock(hGlobal);
|
||||||
if(NULL==SetClipboardData(CF_TEXT, hGlobal))
|
if(NULL==SetClipboardData(CF_TEXT, hGlobal))
|
||||||
GlobalFree(hGlobal);
|
GlobalFree(hGlobal);
|
||||||
|
|||||||
Reference in New Issue
Block a user