1 #include <Windows.h> 2 3 namespace Clipboard 4 { Copy(const char * data,int len)5 void Copy( const char * data, int len ) 6 { 7 HWND hWnd = GetForegroundWindow(); 8 if ( !::OpenClipboard( hWnd ) ) 9 return; 10 11 HGLOBAL hData = GlobalAlloc( GMEM_MOVEABLE, ( len + 1 ) * sizeof( char ) ); 12 if ( !hData ) { 13 CloseClipboard(); 14 return; 15 } 16 17 WCHAR * pMem = (WCHAR*) GlobalLock( hData ); 18 if ( !pMem ) { 19 GlobalFree( hData ); 20 CloseClipboard(); 21 return; 22 } 23 24 ZeroMemory( pMem, ( len + 1 ) * sizeof( char ) ); 25 CopyMemory( pMem, data, ( len + 1 ) * sizeof( char ) ); 26 27 GlobalUnlock( hData ); 28 29 EmptyClipboard(); 30 31 SetClipboardData( CF_TEXT, hData ); 32 33 CloseClipboard(); 34 } 35 GetContentsLength()36 int GetContentsLength() 37 { 38 HWND hWnd = GetForegroundWindow(); 39 if ( !::OpenClipboard( hWnd ) ) 40 return 0; 41 42 HANDLE hData = GetClipboardData( CF_TEXT ); 43 if ( !hData ) { 44 CloseClipboard(); 45 return 0; 46 } 47 48 const char * buffer = (const char*) GlobalLock( hData ); 49 if ( !buffer ) { 50 CloseClipboard(); 51 return 0; 52 } 53 54 int n = strlen( buffer ); 55 56 GlobalUnlock( hData ); 57 58 CloseClipboard(); 59 60 return n; 61 } 62 GetContents(char * data,int len)63 void GetContents( char * data, int len ) 64 { 65 HWND hWnd = GetForegroundWindow(); 66 if ( !::OpenClipboard( hWnd ) ) 67 return; 68 69 HANDLE hData = GetClipboardData( CF_TEXT ); 70 if ( !hData ) { 71 CloseClipboard(); 72 return; 73 } 74 75 const char * buffer = (const char*) GlobalLock( hData ); 76 if ( !buffer ) { 77 CloseClipboard(); 78 return; 79 } 80 81 strncpy( data, buffer, len ); 82 83 GlobalUnlock( hData ); 84 85 CloseClipboard(); 86 } 87 88 } 89