Funçao ISPRINTER()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Funçao ISPRINTER()

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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.
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.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Funçao ISPRINTER()

Mensagem 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.
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Funçao ISPRINTER()

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Funçao ISPRINTER()

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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
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.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Funçao ISPRINTER()

Mensagem 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'
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem por porter »

até o windows 98 ISPRINTER() funcionava, a partir do XP, passou a considerar a impressora sempre como existente.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funçao ISPRINTER()

Mensagem 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...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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?
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.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funçao ISPRINTER()

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem 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.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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?
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.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem por porter »

fiz o teste somente com o ISPRINTER, vou testar sua função e retorno o resultado, ok.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Funçao ISPRINTER()

Mensagem por porter »

IsPrint() <-- qual parametro devo passar.

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

xHarbour
Responder