Exemple #1
0
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;
}
Exemple #2
0
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
}
Exemple #3
0
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();
   }