SOFTWARE PARA CONTROLE IMPRESSAO EM SERVIDOR

CAUEFELIPE1 21/05/2012 09:01:45
#402372
Bom dia pessoal.

Esse é meu primeiro tópico no fórum.
Semana passada na empresa, me foi pedido o desenvolvimento deum software que controle as impressões da empresa (cotas, quem e quando o trabalho foi impresso), sei que existem softwares para esse propósito, porém o pessoal quer ter um software próprio (a emprersa está inserindo uma área interna de desenvolvimento).
O problema não é o gerenciamento de usuários, isso vai ser fácil, o problema é o monitoramento do spool do servidor.
A estrutura da empresa é a seguinte: 15 impressoras em um servidos com Windows Server 2003 e 250 usuários.
Eu ja dei uma pesquisada na internet e aqui no fórum mesmo, encontrei alguns códigos, porém não consegui compreender (ainda não possuo conhecimentos avançados), gostaria de saber se alguém poderia me nortear nesse sentido (explicar).
O desenvolvimento será em VB.NET.
Agradeço desde já.
AJSO 21/05/2012 11:01:59
#402388
Caro CAUEFELIPE1

Sim é possivel estabelecer este controle dop processo principalmente se as impressoras estão em um dominio para server 2003 e/ou 2008

Baseando nas configurações do Print server do 2003/2008 para onde será instalada e apartir deste terminal sera monitorado toda as regras de acesso ao hardware.

não sei se utiilizar VB.Net ou C# é possivel controlar sem riscos a segurança ou possibilidade de burlar

Tenho um controle de hardware pela porta Paralela muito parecido a este seu e criei uma dll de serviço para o server onde não utiilizo o framework mas apenas um conjunto de comando de diretrizes do sistema operacional para informar o IP da máquina, usuário e senha de utilização e controle do hardware.

Todo escrito em C++ utilizando COM+ para ser utilizado com o banco de dados para ser armazenado esta informações junto as uma aplicação de instrução de desennho e impressão em equipamento CNC.

Ficando assim não necessário a instalação de qualquer versão do framework.

Basicamento no seu aplicativo que irá controlar são estas a diretivas ou comandos do print server para controlar qq impressora em um ambiente será eestes:



cscript prnjobs.vbs

Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

Em uso: prnjobs [-zmxl?] [-s server][-p printer][-j jobid][-u user name][-w password]

Arguments:
-j - job id
-l - list all jobs
-m - resume the job
-p - printer name
-s - server name
-u - user name
-w - password
-x - cancel the job
-z - pause the job
-? - display command usage

um examplo:
prnjobs -z -p printer -j jobid
prnjobs -l -p printer
prnjobs -l

Será executado internamente em sua aplicação e podendo até saber alem do usuário que utilizou mas em dia/hora foi feito e numero de paginas impressa..........


Boa Sorte.
ALEVALE 21/05/2012 14:44:03
#402397
Segue um exemplo !

http://printqueuewatch.codeplex.com/wikipage?title=Getting%20started&referringTitle=Documentation

CAUEFELIPE1 22/05/2012 09:39:08
#402424
Bom dia

AJSO, eu entendi mais ou menos a sua solução, ela me pareceu um pouco avançada...

ALEVALE, eu baixei o seu exemplo, estou [Ô]brincando[Ô] com ele, a primeira vista, me pareceu mais simpes que o exemplo do AJSO.

Por enquanto estou estudando o exemplo, acredito que ainda postarei mais dúvidas....rsrsrs
CAUEFELIPE1 23/05/2012 11:49:46
#402545
Bom dia.

ALEVALE, você poderia me dar uma informação?

Com as dll[ô]s q o exemplo usa, é possível identificar a quantidade de páginas q foram impressas ao final do job (Ex: mandei imprimir 300 pag[ô]s, mas o job foi cancelado e imprimiram apenas 100)?
De qualquer maneira, estou pesquisando essa informação na internet.
PS: estava tentando usar a propriedade [Ô]PagesPrinted[Ô], mas ela esta retornando sempre a qtd total de páginas, mesmo quando executo o método [Ô]Update[Ô] do PrintJob.

Valeu
ALEVALE 23/05/2012 13:41:15
#402560
Sobre a quantidade e informações adicionais o PritJob deve ter a opção count ou alguma coisa do genero.
Bom o que daria pra você fazer é o PrintJob tem a classe JobCanceled ou Deleted se não me engano, daria pra pegar o total de páginas impressas e fazer uma substração quando cancelado o Job vou dar uma olhada tbm dai eu posto o resultado qq coisa.
ALEVALE 23/05/2012 15:03:39
#402569
http://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET
CAUEFELIPE1 24/05/2012 07:06:34
#402618
Bom dia

ALEVALE, seu exemplo me ajudou em um outro sentido (exibir o ícone na barra de notificações), porém quando eu me referi ao total de páginas impressas, eu quis dizer se é possivel capturar quantas páginas a impressora imprimiu, independente da quantidade de cópias, ex: a soma de tudo que tem que ser impresso é 500 pag[ô]s, porém por cancelamento do usuário, a impressora imprimiu 200 pag[ô]s. A minha dúvida é: é possivel capturar esse total de pag[ô]s impressas (nesse caso, as 200 pag[ô]s)?
Tentei com a propriedade PagePrinted, mas não retornou a informação q eu precisava.

Segue o trecho do código (não sei se ajuda a entender melhor a situação rsrs)

Private Sub pmon_JobAdded(ByVal sender As Object, ByVal e As PrintJobEventArgs) Handles pmon.JobAdded
Dim pages As Integer
pages = 0
With CType(e, PrintJobEventArgs)

While (.PrintJob.Spooling) Or (.PrintJob.Printing)
.PrintJob.Update()
pages = .PrintJob.PagesPrinted
End While

If (.PrintJob.Printed) Then
cmd.CommandText = [Ô]INSERT INTO IMPRESSOES(USUARIO, PAGINAS, DOCUMENTO, QTDCOPIAS, NOMEIMPRESSORA, DATAIMPRESSAO, PAGIMPRESSAS) VALUES([Ô]
cmd.CommandText &= [Ô][ô][Ô] & .PrintJob.UserName & [Ô][ô], [Ô]
cmd.CommandText &= [Ô][Ô] & .PrintJob.TotalPages.ToString & [Ô], [Ô]
cmd.CommandText &= [Ô][ô][Ô] & .PrintJob.Document.ToString & [Ô][ô], [Ô]
cmd.CommandText &= [Ô][Ô] & .PrintJob.Copies.ToString & [Ô], [Ô]
cmd.CommandText &= [Ô][ô][Ô] & .PrintJob.PrinterName & [Ô][ô], [Ô]
cmd.CommandText &= [Ô][ô][Ô] & .PrintJob.Submitted.ToString & [Ô][ô], [Ô]
cmd.CommandText &= [Ô][Ô] & pages.ToString & [Ô])[Ô]

conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End If
End With
End Sub

Valeu
ALEVALE 24/05/2012 16:34:51
#402695
Tenta assim , coloquei umas funçoes a mais para você monitora o status da impressora assim você entende um pouquinho a mais do componente.
O seu erro estava na lógica.
Para testar coloque a impressora em pause envie um documento para a fila, depois disso tire a impressora de [Ô]pausa[Ô].

With CType(e, PrintJobEventArgs)
Do While (.PrintJob.Printed = False)
.PrintJob.Update()
Loop

MsgBox([Ô]Usuário:[Ô] & .PrintJob.UserName)
MsgBox([Ô]Página:[Ô] & .PrintJob.PagesPrinted)
MsgBox([Ô]Documento:[Ô] & .PrintJob.Document.ToString)
MsgBox([Ô]Copias:[Ô] & .PrintJob.Copies)
MsgBox([Ô]Total de páginas impressas:[Ô] & (.PrintJob.PagesPrinted * .PrintJob.Copies), MsgBoxStyle.Information, [Ô]PrintMonitor[Ô])
MsgBox([Ô]Documentos impressos ![Ô], MsgBoxStyle.Information, [Ô]PrintMonitor[Ô])

End With
CAUEFELIPE1 28/05/2012 10:03:44
#402944
Bom dia

ALEVALE, Eu mudei o evento que eu estava usando, estou usando agora o JobDeleted e o JobAdded.
Procurei na internet e ainda não encontrei (começarei a sair das pesquisas em ingles...rsrsrs), você ja conseguiu adicionar no monitoramento, uma impressora da rede?


Valeu
ALEVALE 28/05/2012 10:38:32
#402948
Caue a função que eu mudei pra você funciona perfeitamente já que ela só irá seguir em diante quando o job estiver bem sucedido, claro se quiser se o job for deletado você deve cancelar a rotina mas isso já outra historia.
Em relação a impressora da rede na minha visão [Ô]você deve ter um servidor de impressão só para isso dai essa aplicação irá ser executada no servidor[Ô].
As demais estações devem imprimir pelo servidor correto a sua infra está desse jeito ?
Página 1 de 4 [32 registro(s)]
Tópico encerrado , respostas não são mais permitidas