Tudo isso ai, pode ser simplificado apenas com printfileraw() caso use apenas texto puro p/ imprimir.
Não importa se é USb, COM, LPT, ou rede.
Caso queira simplificar p/ o usuário, aparecer um combobox já pré configurado p/ escolher qual impressora imprimir, gravar em algun arquivo INI, para ler onde está cada impressora.
Tipo impressora de cheques, impressora balcão, impressora padrão...
P/ usar basta apenas uma linha:
imprime("MEUARQTXT","IMPRESSORATAL","RELATORIO X ")
**********************************
Function Imprime(cArq,cPrint,cTit)
**********************************
*
*
Local oPrn, aPrn:=WIN_PRINTERLIST()
hb_default(@cPrint,win_PrinterGetDefault())
hb_default(@cTit,"PEDIDO")
If Empty(cArq)
hwg_Msginfo('Informe algo p/ imprimir.')
Return .F.
EndIf
If empty(aPrn)
hwg_Msginfo('Não há impressoras instaladas')
Return .F.
EndIf
nRet := Win_PrintFileRaw(cPrint,cArq,cTit)
if nRet < 1
cMsg := 'Erro Imprimindo: '
SWITCH nRet
CASE -1
cMsg += "Parâmetro inválido passado" ; EXIT
CASE -2
cMsg += "WinAPI OpenPrinter() Falha na chamada" ; EXIT
CASE -3
cMsg += "WinAPI StartDocPrinter() Falha na chamada" ; EXIT
CASE -4
cMsg += "WinAPI StartPagePrinter() Falha na chamada" ; EXIT
CASE -5
cMsg += "WinAPI malloc() of memory failed" ; EXIT
CASE -6
cMsg += "Arquivo " + cArq + " não Localizado" ; EXIT
//DEFAULT
// cMsg += cFile + " PRINTED OK!!!"
END
hwg_Msgstop(cMsg)
EndIf
Return .T.
Saudações,
Itamar M. Lins Jr.