Ir para conteúdo
Fórum Script Brasil
  • 0

Gerenciar Impressões Do Spool


Anderson Fernandes

Pergunta

Ola pessoal!!!

Eu estou tentando fazer um programa que ao usuário imprimir o programa pegue os dados da do documento impresso como titulo, numero de folhas, total de cópias, algum ID de impressão e nome do usuário que imprimiu

Eu já encontrei um tópico aqui no scriptbrasil mas o código está incompleto, não sei exatamente qual declaração API ou referencia eu preciso fazer para que o código funcione

Grato,

Editado por Anderson Fernandes
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Ola pessoal!

Eu achei esse script, mas ele esta dando alguns erros, alguém pode me ajudar?

Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" _

(ByVal hPrinter As Long, _

ByVal FirstJob As Long, _

ByVal NoJobs As Long, _

ByVal Level As Long, _

pJob As Long, _

ByVal cdBuff As Long, _

pcbneeded As Long, _

pcbytesReturned As Long) As Long

----------------------------------------------------------------------------------------------

For Each impressora In Printer

OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&

EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned

If lNeeded > 0 Then

ReDim byteJobsBuffer(lNeeded - 1) As Byte

EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned

If lReturned > 0 Then

lJobCount = lReturned

Else

lJobCount = 0

End If

Else

lJobCount = 0

End If

ClosePrinter hPrinter

Text1.Text = CStr(lJobCount)

If Text1.Text = 1 Then

Form2.Show

Text1.Text = 0

End If

Next

Aonde esta de vermelho são alguns erros que eu encontre a maioria é por não ter declarado e a sub OpenPrinter tambem não sei o que é

será que alguém pode me ajudar com o script?

valeu!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Kuroi!!!

Esse código eu achei em um tópico por isso está incompleto, o tópico é:

http://scriptbrasil.com.br/forum/index.php?showtopic=87465

Creio que esses Script não precise de referencias a DLL.

---------------------------------------------------------------

'Encontrei o função OpenPrinter:

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrn As Long, pDefault As Any) As Long

--------------------------------------------------------------

For Each impressora In Printer

nesta linha fala que a variavel impressora não foi definida, beleza

eu tirei o option explicit da 1ª linha e não deu mais erro

---------------------------------------------------------------

Então deu erro em byteJobsBuffer

Erro:

Compile Error:

ByRef argument type mismatch

na linha:

EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned

então eu add byval byteJobsBuffer(0)

a linha ficou assim

EnumJobs hPrinter, 0, 99, 1, ByVal byteJobsBuffer(0), lNeeded, lNeeded, lReturned

e não deu mais erro

---------------------------------------------------------------

puts deu erro em ClosePrinter

mais beleza encontrei a declaração

Private Declare Function ClosePrinter Lib "winspool.drv" Alias "ClosePrinterA" (ByVal hPrn As Long) As Long

---------------------------------------------------------------

aff, deu outro erro

Run-time error '438':

Object doesn't support this property or method

em:

For Each impressora In Printer

provavelmente é em impressora não tem nenhuma declaração para ela e eu não me lembro muito bem como se usa o FOR EACH

---------------------------------------------------------------------------------------------------------

PUTS CURRIOLA MAS EU ACHO QUE ARRUMANDO ESTE ERRO NÃO VAI MAIS TER NENHUM OUTRO PROBLEMA GRAVE

DESCULTA A ENRROLAÇÃO PRA CHEGAR A ESTE ULTIMO ERRO É QUE EU FUI POSTANDO CONFORME IA FAZENDO OS TESTE

BOM SE alguém PUDER ME AJUDAR COM O FOR EACH E "IMPRESSORA" EU AGRADEÇO!

VALEU!!!!!!

RESUMINDO O CÓDIGO FICOU ASSIM

Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" _
(ByVal hPrinter As Long, _
ByVal FirstJob As Long, _
ByVal NoJobs As Long, _
ByVal Level As Long, _
pJob As Long, _
ByVal cdBuff As Long, _
pcbneeded As Long, _
pcbytesReturned As Long) As Long

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrn As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" Alias "ClosePrinterA" (ByVal hPrn As Long) As Long

Dim impressora As String

Private Sub Command1_Click()

For Each impressora In Printer
OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&
EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned
If lNeeded > 0 Then
ReDim byteJobsBuffer(lNeeded - 1) As Byte
EnumJobs hPrinter, 0, 99, 1, ByVal byteJobsBuffer(0), lNeeded, lNeeded, lReturned
If lReturned > 0 Then
lJobCount = lReturned
Else
lJobCount = 0
End If
Else
lJobCount = 0
End If
ClosePrinter hPrinter
Text1.Text = CStr(lJobCount)
If Text1.Text = 1 Then
Form2.Show
Text1.Text = 0
End If

Next

End Sub

O ERRO QUE EU NÃO CONSIGO RESOLVER AGORA É NA LINHA

For Each impressora In Printer

onde provavelmente o erro esta em "impressora"

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...