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