This test works for me in a C++/Win32 app :
TCHAR wsText[255] = TEXT("This is a test");
int nTextLength = (lstrlen(wsText) + 1) * sizeof(TCHAR);
HANDLE hClipboardData;
LPTSTR pClipboardData;
if (OpenClipboard(hWnd))
{
hClipboardData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, nTextLength);
if (hClipboardData)
{
pClipboardData = (LPTSTR)GlobalLock(hClipboardData);
CopyMemory(pClipboardData, wsText, nTextLength);
GlobalUnlock(hClipboardData);
EmptyClipboard();
SetClipboardData(CF_UNICODETEXT, hClipboardData);
}
CloseClipboard();
}
if (OpenClipboard(hWnd))
{
HANDLE hGlobal = GetClipboardData(CF_UNICODETEXT);
LPTSTR pszData;
TCHAR wsBuffer[255];
if (hGlobal != NULL)
{
pszData = (LPTSTR)GlobalLock(hGlobal);
if (NULL != pszData)
{
lstrcpy(wsBuffer, pszData);
GlobalUnlock(hGlobal);
// ...
}
}
CloseClipboard();
}