Довольно свободное обращение с буфером... В самом общем случае так делать нельзя. Например следует сначала проверить тип даных в буфере IsClipboardFormatAvailable(CF_UNICODETEXT). Недавно была темка про проблемы с буфером обмена. Буфер срабатывал каждый второй раз, или что-то в этом роде, если интересны подробности - поищи. Если хочется готового решения:
CString GetClipboardData()
{
CString stReturn = _T("");
if(::IsClipboardFormatAvailable(CF_UNICODETEXT))
{
::OpenClipboard(NULL);
HGLOBAL hGlobal;
if(hGlobal = ::GetClipboardData(CF_UNICODETEXT))
{
PTSTR pGlobal = (PTSTR)::GlobalLock(hGlobal);
PTSTR pText = (PTSTR)malloc(::GlobalSize(hGlobal));
memcpy(pText, pGlobal, ::GlobalSize(hGlobal));
stReturn = CString(pText);
::GlobalUnlock(hGlobal);
free(pText);
}
::CloseClipboard();
}
return stReturn;
}