Newsgroup: it.comp.lang.vo-clipper
Titolo: USB

E' possibile scrivere su un dispositivo USB?
Giovanni Pizza

E' possiblie inviare un file su una porta UBS in modo analogo ad una LPT o 
COM ?
Giovanni Pizza

 COM ?
su una stampante? Si. Sul altre periferiche? Sicuramente, ma serve del 
software particolare.
Saluti
Wolfgang

 ha scritto nel messaggio 
news:VA.0000026...@gmx.net...


 Esiste qualche esempio?
quasi tutti i driver stampanti hanno una modalità bypass, dove il 
programma può passare direttamente i comandi di stampa alla stampante. 
Ovviamente questo ha solotanto un senso se la stampante se ne intende 
di un linuguaggio stampante "classico", cioè PCL, ESC/P o PostScript.
Microsoft ha documentato questo nell'articolo seguente:
MSDN Article Q138594 - HOWTO: Send Raw Data to a Printer by Using the 
Win32 API
Il codice che uso è questo (ha già parecchi anni di vita...)
function RawDataToPrinter( cName as string, cDescription as string, 
hInput as ptr ) as logic
//p Drucken einer Datei unter Umgehung des Windows-Drucker-Treibers
//s
// MSDN Article Q138594 - HOWTO: Send Raw Data to a Printer by Using // 
the Win32 API
local cPrintName   as string
local sDocInfo     is _winDocInfo_1
local cDocInfo     as string
local lSuccess     as logic
local hPrinter     as ptr
local cBuffer      as string
local cWrite       as string
local nRead            as dword
local nWritten     as dword
local nPos         as dword
local lDocStarted  as logic
local lPageStarted as logic
begin sequence
cPrintName := DynToOldSpaceString( AllTrim( cName ) )
cDocInfo := DynToOldSpaceString( cDescription )
sDocInfo.pDocName := String2psz( cDocInfo )
sDocInfo.pOutput := null_ptr
sDocInfo.pDataType := String2psz( "RAW" )
if ! OpenPrinter( String2psz( cPrintName ), @hPrinter, null_ptr )
  ErrBox( nil, "errore nell'apertura stampante" " + cName + "!" )
  break
endif
if StartDocPrinter( hPrinter, 1, @sDocInfo ) == 0
  ErrBox( nil, "errore nella partenza della stampa" )
  break
endif
lDocStarted := true
// stampa pagina per pagina
if ! StartPagePrinter( hPrinter )
  ErrBox( nil, LoadResString( "errore nell'inizio pagina" )
  EndDocPrinter( hPrinter )
  break
endif
lPageStarted := true
cBuffer := Buffer( 512 )
while ( nRead := FRead( hInput, @cBuffer, 512 ) ) > 0
  cBuffer := Left( cBuffer, nRead )
  while ( nPos := At2( _chr( 12 ), cBuffer ) ) > 0
    cWrite := DynToOldSpaceString( Left( cBuffer, nPos ) )
    if ! WritePrinter( hPrinter, ptr( _cast, cWrite ), nPos, @nWritten 
)
      OldSpaceFree( cWrite )
      ErrBox( nil, LoadResString('errore nella scrittura' )
      break
    endif
    OldSpaceFree( cWrite )
    EndPagePrinter( hPrinter )
    cBuffer := SubStr2( cBuffer, nPos + 1 )
    if SLen( cBuffer ) > 0
      StartPagePrinter( hPrinter )
    else
      lPageStarted := false
    endif
  end
  if ( nPos := SLen( cBuffer ) ) > 0
    cWrite := DynToOldSpaceString( cBuffer )
    if ! WritePrinter( hPrinter, ptr( _cast, cWrite ), nPos, @nWritten 
)
      OldSpaceFree( cWrite )
      ErrBox( nil, 'errore nella scrittura' )
      break
    endif
    OldSpaceFree( cWrite )
  endif
  cBuffer := Buffer( 512 )
end
lSuccess               := true
end sequence
if lPageStarted
  EndPagePrinter( hPrinter )
endif
if lDocStarted
  EndDocPrinter( hPrinter )
endif
if hPrinter != null_ptr
  ClosePrinter( hPrinter )
endif
OldSpaceFree( cPrintName )
OldSpaceFree( cDocInfo )
return lSuccess
Saluti
Wolfgang

 Il codice che uso č questo (ha gią parecchi anni di vita...)
