HB_BOOL hb_gt_winapi_setClipboard( HB_UINT uFormat, PHB_ITEM pItem ) { HB_BOOL fResult = HB_FALSE; if( OpenClipboard( NULL ) ) { HB_SIZE nSize; EmptyClipboard(); if( uFormat == CF_UNICODETEXT ) nSize = hb_itemCopyStrU16( pItem, HB_CDP_ENDIAN_NATIVE, NULL, 0 ); else nSize = hb_itemCopyStr( pItem, hb_setGetOSCP(), NULL, 0 ); if( nSize ) { /* Allocate a global memory object for the text. */ HGLOBAL hglb = GlobalAlloc( GMEM_MOVEABLE, ( nSize + 1 ) * ( uFormat == CF_UNICODETEXT ? sizeof( wchar_t ) : sizeof( char ) ) ); if( hglb ) { /* Lock the handle and copy the text to the buffer. */ LPVOID lpMem = GlobalLock( hglb ); if( lpMem ) { if( uFormat == CF_UNICODETEXT ) hb_itemCopyStrU16( pItem, HB_CDP_ENDIAN_NATIVE, ( wchar_t * ) lpMem, nSize + 1 ); else hb_itemCopyStr( pItem, hb_setGetOSCP(), ( char * ) lpMem, nSize + 1 ); ( void ) GlobalUnlock( hglb ); /* Place the handle on the clipboard. */ fResult = SetClipboardData( ( UINT ) uFormat, hglb ) != 0; } if( ! fResult ) GlobalFree( hglb ); } } else fResult = HB_TRUE; CloseClipboard(); } return fResult; }
static void hb_gt_cgi_termOut( PHB_GTCGI pGTCGI, const char * szStr, HB_SIZE nLen ) { #ifdef HB_GT_CGI_WIN #define HB_WIN_IOWRITE_LIMIT 10000 /* https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1232#no1 */ if( pGTCGI->fIsConsole ) { HANDLE hFile = DosToWinHandle( pGTCGI->hStdout ); HB_SIZE nWritten = 0; HB_SIZE nCount; LPTSTR lpString; #if defined( UNICODE ) lpString = hb_cdpnStrDupU16( HB_GTSELF_TERMCP( pGTCGI->pGT ), HB_CDP_ENDIAN_NATIVE, szStr, nLen, &nCount ); #else nCount = nLen; lpString = hb_cdpnDup( szStr, &nCount, HB_GTSELF_TERMCP( pGTCGI->pGT ), hb_setGetOSCP() ); #endif while( nCount ) { DWORD dwToWrite; DWORD dwWritten; /* Determine how much to write this time */ if( nCount > ( HB_SIZE ) HB_WIN_IOWRITE_LIMIT ) { dwToWrite = HB_WIN_IOWRITE_LIMIT; nCount -= ( HB_SIZE ) dwToWrite; } else { dwToWrite = ( DWORD ) nCount; nCount = 0; } if( ! WriteConsole( hFile, lpString + nWritten, dwToWrite, &dwWritten, NULL ) ) break; nWritten += ( HB_SIZE ) dwWritten; if( dwWritten != dwToWrite ) break; } hb_xfree( lpString ); } else hb_fsWriteLarge( pGTCGI->hStdout, szStr, nLen ); #else hb_fsWriteLarge( pGTCGI->hStdout, szStr, nLen ); #endif }
HB_BOOL hb_gt_winapi_getClipboard( HB_UINT uFormat, PHB_ITEM pItem ) { HB_SIZE nSize = 0; if( IsClipboardFormatAvailable( uFormat ) && OpenClipboard( NULL ) ) { HGLOBAL hglb = GetClipboardData( ( UINT ) uFormat ); if( hglb ) { LPVOID lpMem = GlobalLock( hglb ); if( lpMem ) { nSize = ( HB_SIZE ) GlobalSize( hglb ); switch( uFormat ) { case CF_UNICODETEXT: nSize = hb_wstrnlen( ( const wchar_t * ) lpMem, nSize >> 1 ); if( nSize ) hb_itemPutStrLenU16( pItem, HB_CDP_ENDIAN_NATIVE, ( const wchar_t * ) lpMem, nSize ); break; case CF_OEMTEXT: case CF_TEXT: nSize = hb_strnlen( ( const char * ) lpMem, nSize ); default: if( nSize ) hb_itemPutStrLen( pItem, uFormat == CF_TEXT ? hb_setGetOSCP() : NULL, ( const char * ) lpMem, nSize ); break; } ( void ) GlobalUnlock( hglb ); } } CloseClipboard(); }