#include "stdafx.h" #ifdef FOOBAR2000_DESKTOP_WINDOWS #include "clipboard.h" #ifdef UNICODE #define CF_TCHAR CF_UNICODETEXT #else #define CF_TCHAR CF_TEXT #endif namespace ClipboardHelper { void SetRaw(UINT format,const void * data, t_size size) { HANDLE buffer = GlobalAlloc(GMEM_DDESHARE,size); if (buffer == NULL) throw std::bad_alloc(); try { CGlobalLockScope lock(buffer); PFC_ASSERT(lock.GetSize() == size); memcpy(lock.GetPtr(),data,size); } catch(...) { GlobalFree(buffer); throw; } WIN32_OP(SetClipboardData(format,buffer) != NULL); } void SetString(const char * in) { pfc::stringcvt::string_os_from_utf8 temp(in); SetRaw(CF_TCHAR,temp.get_ptr(),(temp.length() + 1) * sizeof(TCHAR)); } bool GetString(pfc::string_base & out) { pfc::array_t temp; if (!GetRaw(CF_TCHAR,temp)) return false; out = pfc::stringcvt::string_utf8_from_os(reinterpret_cast(temp.get_ptr()),temp.get_size() / sizeof(TCHAR)); return true; } bool IsTextAvailable() { return IsClipboardFormatAvailable(CF_TCHAR) == TRUE; } } #endif // FOOBAR2000_DESKTOP_WINDOWS