Página 1 de 7

Funçao ISPRINTER()

Enviado: 11 Out 2014 12:57
por Nascimento
Amigos eu uso impressora na lpt1
e comecei a observar que a funçao isprinter() nao esta funcionando como o devido

fiz essa pequena funçao para teste

Código: Selecionar todos

 Func main()

cls

if !isprinter()

    ?'Nao tem impressora'
else

   ? ' impressora ok'
endif
inkey(0)
o que acontece é que a impressora tanto desligada quanto ligada e conectada na lpt1 da como Impressora OK

Funçao ISPRINTER()

Enviado: 11 Out 2014 14:00
por rochinha
Amiguinho,

Usei esta função por anos, mas não lembro se eu testava se a impressora estava ligada. Mas pra todos efeitos acho que IsPrinter() significa Existe Impressora?

Então estando desligada Existe SIM Impressora.

Ser for o caso verifique os antigos comandos de impressão Set Printer ON pois acho que ao setar este comando ele teste e retorne algum erro que voce possa capturar e tratar.

Funçao ISPRINTER()

Enviado: 11 Out 2014 19:51
por Nascimento
no dos quando vc usa o isprinter se ela tiver desligada nao a comunicaçao da mesma é como se nao tivesse conectada
ja isso nao acontece no harbour entendeu meu caro amigo rochinha

era pra no caso da impressora desligada da o retorno .f.

Funçao ISPRINTER()

Enviado: 11 Out 2014 20:15
por Toledo
Veja a descrição desta função no DOC do xHarbour:
Description
The IsPrinter() function is used to test if an application can pass print output to the operating system. This is usually the case when a print spooler is active. IsPrinter() cannot detect, if a physical printer is ready to print, since this is monitored by the operating system.
If a character string holding a particular printer name is passed, IsPrinter() returns .T. (true) if this printer is installed.
Note: under CA-Clipper (DOS), IsPrinter() checked the readiness of a physical printer. This is not possible with xHarbour's IsPrinter() function due to differences between DOS and modern operating systems.
Abraços,

Funçao ISPRINTER()

Enviado: 11 Out 2014 20:27
por Nascimento
Nao teria funçao Similar para harbour para winxp ou superior ?

porque quando da qq erro na impressora simplismente fica o programa travado

Funçao ISPRINTER()

Enviado: 12 Out 2014 01:22
por rochinha
Amiguinho,

Conforme o trecho apresentado pelo amigo Toledo, tudo no que tange impressão e impressora, passa pelo spool. A única forma de contornar e "talvez" obter uma informação direta com este comando seria configurar nas opções da impressora que o spool ficará desativado e a impressão é direta.

Mas faça o teste com a seguinte função:

Código: Selecionar todos

function IsPrint( QuePrinter )
   LOCAL nStatus
   DEFAULT QuePrinter := "LPT1:"
   nStatus := PrnStatus( QuePrinter )
   if     nStatus <        1 ; return "Impressora OK"
   elseif nStatus =        1 ; return "Impressora Pausada"
   elseif nStatus =        2 ; return "Impressora com Erro"
   elseif nStatus =        4 ; return "Impressora Deletando"
   elseif nStatus =        8 ; return "Impressora em Modo Bandeja"
   elseif nStatus =       16 ; return "Impressora Sem Papel"
   elseif nStatus =       32 ; return "Impressora em Modo Manual"
   elseif nStatus =       64 ; return "Impressora com Problema no Papel"
   elseif nStatus =      128 ; return "Impressora OffLine"
   elseif nStatus =      256 ; return "Impressora com IO Ativo"
   elseif nStatus =      512 ; return "Impressora Ocupada"
   elseif nStatus =     1024 ; return "Impressora Imprimindo"
   elseif nStatus =     2048 ; return "Impressora Memoria Lotada"
   elseif nStatus =     4096 ; return "Impressora Nao Instalada"
   elseif nStatus =     8192 ; return "Impressora Aguardando"
   elseif nStatus =    16384 ; return "Impressora Processando"
   elseif nStatus =    32768 ; return "Impressora Inicializando"
   elseif nStatus =    65536 ; return "Impressora em Atencao"
   elseif nStatus =   131072 ; return "Impressora Toner Baixo"
   elseif nStatus =   262144 ; return "Impressora Sem Toner"
   elseif nStatus =   524288 ; return "Impressora PAGE_PUNT"
   elseif nStatus =  1048576 ; return "Impressora Intervencao do Usuario"
   elseif nStatus =  2097152 ; return "Impressora Sem Memoria"
   elseif nStatus =  4194304 ; return "Impressora Tampa Aberta"
   elseif nStatus =  8388608 ; return "Impressora Servidor Desconhecido"
   elseif nStatus = 16777217 ; return "Impressora POWER_SAVE"
   endif

Funçao ISPRINTER()

Enviado: 12 Out 2014 01:58
por Nascimento
amigo rochinha eu nao uso nem uma impressora instalada pelo windows
faço a impressao direta como no clipper mesmo


tipo:
set printer to 'arqui.txt'

Funçao ISPRINTER()

Enviado: 13 Out 2014 15:29
por porter
até o windows 98 ISPRINTER() funcionava, a partir do XP, passou a considerar a impressora sempre como existente.

Funçao ISPRINTER()

Enviado: 13 Out 2014 19:15
por Jairo Maia
Olá Porter,

Permita-me um adendo: Acho que você esqueceu do ME. Até o ME (Windows Millenium) os Sistemas Operacionais Windows ainda eram baseados no MS-DOS. A partir do XP, a tecnologia passou a ser a NT (New Technology), e ai os recursos baseados em DOS se perderam...

Funçao ISPRINTER()

Enviado: 13 Out 2014 20:12
por rochinha
Amiguinhos,

Josivan Nascimento
O fato de você usar o comando citada não quer dizer que está imprimindo direto. O Windows continuará metendo o bedelho. O que se deve fazer é impedí-lo de fazer isto.

Teste esta função passada.

Porter
Faça o teste do IsPrinter() com impressora ligada e desligada, sendo que na configuração da saida de impressora esteja para pular o spool do Windows.

Jairo Maia
Se bem me lembro o ME foi a primeira tentativa de eliminar o Prompt do MS-DOS, to certo?

Funçao ISPRINTER()

Enviado: 14 Out 2014 03:46
por Jairo Maia
Olá Rochinha,
rochinha escreveu:Se bem me lembro o ME foi a primeira tentativa de eliminar o Prompt do MS-DOS, to certo?
Isso não me lembro. O que lembro é que quem tinha programas baseados em MS-DOS como em Clipper por exemplo, ficou de cabelo em pé até entender que o config.sys somente era lido e considerado as variáveis de ambiente. Variáveis de configuração como FILES=nFiles passou a ser definida no arquivo System.ini pela variável PerVMFile=nFiles.

O prompt do DOS é usado pelo suporte da Microsoft ainda até hoje. Há situações que só são resolvidas levando o usuário para o CMD. Mas realmente não deixou de ser uma preparação para passar a NT.

Funçao ISPRINTER()

Enviado: 14 Out 2014 09:06
por porter
Porter
Faça o teste do IsPrinter() com impressora ligada e desligada, sendo que na configuração da saida de impressora esteja para pular o spool do Windows.
olá Rochinha, fiz o teste, parei o Spooler de impressão no XP, e continua considerando sempre que a impressora está ligada, conectada.

xHarbour, windows XP.

Funçao ISPRINTER()

Enviado: 14 Out 2014 09:27
por rochinha
Amiguinho,

Jairo Maia
As mudanças no ME, relacionadas a tentativa frustrada da Microsoft afim de matar o prompt, fizeram desta versão um pacote inútil. Nesta época surgiram as configurações não por arquivo de lote mas por arquivos .NT, lembra?, autoexec.nt e config.nt.

A Microsoft deu na verdade um tiro no pé e voltou atrás porque os administradores deste S.O. usam massissamente este recurso para configurações cirurgicas do mesmo e também porque os SDK .Net também precisariam fazer uso deste recurso.

Antes do ME tinhamos um Prompt de MS-DOS real e depois dele o que temos é um emulador.

Porter
Então podemos achar que isto seja incompatibilidade da função com o S.O. e não um bug.

E quanto a função que passei, fez o teste?

Funçao ISPRINTER()

Enviado: 14 Out 2014 09:34
por porter
fiz o teste somente com o ISPRINTER, vou testar sua função e retorno o resultado, ok.

Funçao ISPRINTER()

Enviado: 14 Out 2014 09:51
por porter
IsPrint() <-- qual parametro devo passar.

Não entendi qual parametro devo passar no comando acima.

xHarbour