Caros, teu tenho alguns problemas n muito serios mas q muitas vezes me tira d onde estou para ir configurar uma porta LPTx em rede ou mesmo dizer q devera chamar-se um tecnico para configurar a rede. Teria algum comando para testar a conectividade com as portas alem do LPT1, ou seja, portas paralelas em rede?
Marcos Roberto
Verificar portas LPT2 em diante.
Moderador: Moderadores
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Verificar portas LPT2 em diante.
Não sei se entendí direito, mas testar conectividade de impressora em rede não acho que seja possível assim como é feito na impressora LOCAL em LPT1. Se o seu problema baseia-se em que as impressoras não ficam capturadas à LPT2 por exemplo e quando é mandado a imprimir dá erro ? Isto geralmente acontece muito em WIN98. Então eu sugeriria que sempre forçasse a captura da impressora. Tem duas formas:Teria algum comando para testar a conectividade com as portas alem do LPT1
1. Fazer um arquivo BATCH no C: e capturando de acordo cada estação e logo chamar o seu programa.
2. Ou colocar no próprio código fonte para que seja capturado, como por exemplo:
Código: Selecionar todos
VTERM:=UPPER(NETNAME())
IF !(VTERM="CREDIARIO_01")
NETREDIR("LPT2","\\CREDIARIO_01\EPSON")
ENDIF
COPY FILE("FICHA.PRN") TO ("LPT2")Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Verificar portas LPT2 em diante.
Olá,
De uma olhada nessa dica do Rochinha:
viewtopic.php?f=13&t=4678
De uma olhada nessa dica do Rochinha:
viewtopic.php?f=13&t=4678
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Verificar portas LPT2 em diante.
Amiguinho
Outra dica e é a que estou usando sempre é a de colocar tais informações em arquivos externos e nunca mais dentro do codigo de forma compilada.
Crie um modulo onde vc possa armazenar as impressoras, dando-lhes nomes e direções, salve em .DBFs ou arquivos .INI, deva uma dica usando .INI.
Codigo fonte da classe .INI, pondendo ser usada qualquer outra forma de escrita em arquivos .INI:
Outra dica e é a que estou usando sempre é a de colocar tais informações em arquivos externos e nunca mais dentro do codigo de forma compilada.
Crie um modulo onde vc possa armazenar as impressoras, dando-lhes nomes e direções, salve em .DBFs ou arquivos .INI, deva uma dica usando .INI.
Código: Selecionar todos
VTERM:=UPPER(NETNAME())
//
lGrava := .F. // Qdo .F. grava se nao existir, Qdo .T. grava mesmo que exista, reescrevendo
cPath := CurDrive() + ":\" + Curdir() + "\"
cQueLPT1 := Upper(VerifyINI( VTERM, "LPT" , "LPT1" , cPath+"sistema.ini",lGrava))
cQualCaminho := Upper(VerifyINI( VTERM, "CAMINHO", "\\SERVIDOR\TERMINAL1", cPath+"sistema.ini",lGrava))
//
IF !(VTERM="CREDIARIO_01")
NETREDIR( cQueLPT1, cQualCaminho )
ENDIF
COPY FILE("FICHA.PRN") TO ("LPT2")
[code]
Outro exemplo de uso de arquivos .INI:
[code]
function LimpaSpool()
cEmiteMotor := Upper(VerifyINI("SISTEMA","Emite_Motor","WAPI",cPath+"pos"+M->CAIXA+".ini",.F.))
if valtype(PRNcFile) <> "C"
return .t.
endif
CONTADOR := ADIR( "*.ecf" )
IF CONTADOR != 0
DECLARE TXT_NOMES[ CONTADOR ]
ADIR( "*.ecf", TXT_NOMES )
FOR CONTADOR := 1 TO LEN( TXT_NOMES )
//WaitRun("write " + TXT_NOMES[CONTADOR] + "/p" )
do case
case cEmiteMotor = "COMMAND.COM"
WaitRun("command.com /c copy /b " + PRNcFile + " LPT1" , 0 )
case cEmiteMotor = "WRITE"
WaitRun("write " + PRNcFile + " /p" )
case cEmiteMotor = "WAPI"
WaitRun( [WAPI -PRINT:"]+PRNcPort+[";]+PRNcFile+[;"Impressao";RESULTA.TXT], 7 )
endcase
//WAITRUN("command.com /c copy /b " + TXT_NOMES[CONTADOR] + " lpt1" , 0 )
SysWait(2)
if file( TXT_NOMES[CONTADOR] )
FERASE( TXT_NOMES[CONTADOR] )
endif
NEXT
ENDIF
SysRefresh()
return .t.
[code]
Funcao VerifyINI simplificada:
[code]
function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
oIni := TIni():New( _inifile_ )
if _grava_ = .t.
oIni:Set( _section_, _entry_, _var_ )
endif
return oIni:Get( _section_, _entry_, _var_, _var_ )
Código: Selecionar todos
#include "FiveWin.ch"
#include "DLL.ch"
//----------------------------------------------------------------------------//
CLASS TIni
DATA cIniFile, lAutoSet
METHOD New( cIniFile ) CONSTRUCTOR
METHOD Get( cSection, cEntry, uDefault, uVar )
METHOD Set( cSection, cEntry, uValue )
METHOD Sections()
METHOD DelSection( cSection ) INLINE DelIniSection( cSection, ::cIniFile )
METHOD DelEntry( cSection, cEntry ) INLINE ;
DelIniEntry( cSection, cEntry, ::cIniFile )
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cIniFile ) CLASS TIni
DEFAULT cIniFile := ""
if ! Empty( cIniFile ) .and. At( ".", cIniFile ) == 0
cIniFile += ".ini"
endif
::cIniFile = cIniFile
::lAutoSet = .t.
return Self
//----------------------------------------------------------------------------//
METHOD Get( cSection, cEntry, uDefault, uVar ) CLASS TIni
local cType := ValType( If( uDefault != nil, uDefault, uVar ) )
if Empty( ::cIniFile )
if cType == "N"
uVar = GetProfInt( cSection, cEntry, uDefault )
else
uVar = GetProfString( cSection, cEntry, cValToChar( uDefault ) )
endif
else
if cType == "N"
uVar = GetPvProfInt( cSection, cEntry, uDefault, ::cIniFile )
else
uVar = GetPvProfString( cSection, cEntry, cValToChar( uDefault ),;
::cIniFile )
endif
endif
do case
case cType == "D"
uVar = CToD( uVar )
case cType == "L"
uVar = ( Upper( uVar ) == ".T." )
endcase
if uVar == uDefault .and. ::lAutoSet
::Set( cSection, cEntry, uDefault)
endif
return uVar
//----------------------------------------------------------------------------//
METHOD Set( cSection, cEntry, uValue ) CLASS TIni
if Empty( ::cIniFile )
WriteProfString( cSection, cEntry, cValToChar( uValue ) )
else
WritePProString( cSection, cEntry, cValToChar( uValue ), ::cIniFile )
endif
return nil
//----------------------------------------------------------------------------//
METHOD Sections() CLASS TIni
local cBuffer := Space( 4096 ), p, aSec:={}
// cBuffer := Left( cBuffer, GetPvPrfSe( @cBuffer, 4095, ::cIniFile ) )
p = GetPvPrfSe( @cBuffer, 4095, ::cIniFile )
cBuffer = Left( cBuffer, p )
while ( p := At( Chr( 0 ), cBuffer ) ) > 1
AAdd( aSec, Left( cBuffer, p - 1 ) )
cBuffer = SubStr( cBuffer, p + 1 )
enddo
return aSec
//----------------------------------------------------------------------------//
DLL32 FUNCTION GetPvPrfSe(cBuffer AS LPSTR, nSize AS DWORD, cIni AS LPSTR) AS DWORD PASCAL ;
FROM "GetPrivateProfileSectionNamesA" LIB "Kernel32.dll"
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.