GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Informações da impressora
Go
Novo
Procurar
Notificar
Ferramentas
Responder
  
-star Rating Vote!  Login/Cadastrar 
Analista Sênior

Figura de  JBSR
postado
Alguem conhece algum codigo VB ou API que permita extrair informações do documento que está na fila de impressão? O que eu preciso é de uma instrução que capture a quantidade de folhas que serão impressas por documento.

Desde já gradeço.
Legaljbsr@pop.com.br

"Conhecimento é poder"
 
Postagens: 1608 | Localização: Belo Horizonte | Registrado: 15 July 2003Reply With QuoteEditar ou Apagar MensagemReport This Post
Analista Sênior

postado Hide Post
Olá,

a tempos desenvolvi um controle de impressão que deveria controlar a quantidade de cópias. Mas somente terei acesso ao código na segunda-feira.

Enquanto isso, a fonte de onde consegui obter o que queria começa por aqui:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/w98ddk/hh/w98ddk/printer_6eya.asp

Para seguir por conta, é só resolver os ponteiros do C, usado como referência neste link. Me lembro que resolvi com funções com addressOf e copymemory.

Mas se quiser aguardar até segunda...

Roberto
-----------------------------------
 
Postagens: 1589 | Localização: Porto Alegre | Registrado: 03 April 2002Reply With QuoteEditar ou Apagar MensagemReport This Post
Analista Sênior

Figura de  JBSR
postado Hide Post
Amigo, estou aguardando sua posição quanto ao aplicativo. Não conseguir logar no endereço que você me passou. Se ainda puder dar uma ajuda, fico muito agradecido.

"Conhecimento é poder"
 
Postagens: 1608 | Localização: Belo Horizonte | Registrado: 15 July 2003Reply With QuoteEditar ou Apagar MensagemReport This Post
Analista Sênior

postado Hide Post
Olá JBSR,

o código a seguir lista os documentos na fila de impressão com o total de páginas.

Porém, nos testes que fiz, usando acc97 com win98 e winxp, somente recuperou as páginas para impressoras locais. Para impressoras compartilhadas traz apenas o nome do documento?!

Um outro detalhe é que as informações tratadas aqui se referem à fila de impressão do windows (spool), portanto documentos no buffer da própria impressora, já imprimindo ou em pausa, não são recuperados.

Para executar, informe o nome da impressora como consta na pasta Impressoras (Iniciar > Impressoras ou Iniciar > configurações > Impressoras (win98))

Option Compare Database
Option Explicit


' Descrição JOB_INFO_2:
' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_629e.asp
Type JOB_INFO_2
    JobId As Long
    pPrinterName As Long
    pMachineName As Long
    pUserName As Long
    pDocument As Long
    pNotifyName As Long
    pDatatype As Long
    pPrintProcessor As Long
    pParameters As Long
    pDriverName As Long
    pDevMode As Long ' DEVMODE
    pStatus As Long
    pSecurityDescriptor As Long 'SECURITY_DESCRIPTOR
    status As Long
    Priority As Long
    Position As Long
    StartTime As Long
    UntilTime As Long
    TotalPages As Long
    Size As Long
    Submitted As SYSTEMTIME
    time As Long
    PagesPrinted As Long
End Type

Private Declare Sub CopyMemory Lib "kernel32" _
        Alias "RtlMoveMemory" _
        (Destination As Any, _
        Source As Any, _
        ByVal length As Long)


Function impressora(strPrinterName) As Integer

Dim hPrinter As Long
Dim lngRet As Long
'Dim pD As PRINTER_DEFAULTS
Dim cByteNeeded As Long
Dim nReturned As Long
Dim cByteUsed As Long
Dim lpBuffer() As Byte
Dim lpJobInfo2 As JOB_INFO_2
Dim ppJobInfo2 As Long

Dim strOut As String
Dim i As Long

    lngRet = OpenPrinter(strPrinterName, hPrinter, 0)
    If lngRet <> 0 Then
        
        cByteUsed = 0
        ReDim lpBuffer(cByteUsed)
        
        ' verifica qtde de relatórios na spool
        lngRet = EnumJobs(hPrinter, 0, 99, 2, lpBuffer(0), cByteUsed, cByteNeeded, nReturned)
        If lngRet = 0 Then
                Erase lpBuffer: ReDim lpBuffer(cByteNeeded)
                cByteUsed = cByteNeeded
                lngRet = EnumJobs(hPrinter, 0, 99, 2, lpBuffer(0), cByteUsed, cByteNeeded, nReturned)
        End If
    End If
    lngRet = ClosePrinter(hPrinter)
    
    If lngRet <> 0 Then       ' debug dos dados da fila de impressão
        ppJobInfo2 = VarPtr(lpBuffer(0))
        
        For i = 1 To nReturned
            ' copiamos dados do documento na fila para memoria sob nosso controle
            Call CopyMemory(lpJobInfo2, ByVal ppJobInfo2, LenB(lpJobInfo2))
            
            ' .pDocument: ponteiro para string nome-do-Documento;
            '           reservamos espaço e copiamos valor
            strOut = Space$(apilstrlenA(lpJobInfo2.pDocument) + 1)
            Call CopyMemory(ByVal strOut, ByVal lpJobInfo2.pDocument, Len(strOut) - 1)
            
            Debug.Print i, strOut, lpJobInfo2.TotalPages
            
            ' avançamos para o próximo documento na fila
            ppJobInfo2 = ppJobInfo2 + LenB(lpJobInfo2)
        Next
    End If
End Function

  


'----------------------------------
' Roberto
 
Postagens: 1589 | Localização: Porto Alegre | Registrado: 03 April 2002Reply With QuoteEditar ou Apagar MensagemReport This Post
Coordenador

postado Hide Post
amigo roberto
vc sabe como faço para imprimir um documento em outra impressora via codigo ?

Almir Augusto Fiorio
almir@datamedia.com.br
ICQ 144493367
 
Postagens: 1802 | Localização: Rio de Janeiro | Registrado: 29 January 2001Reply With QuoteEditar ou Apagar MensagemReport This Post
 Tópico Anterior | Próximo Tópico Powered by Eve For Enterprise  
 

GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Informações da impressora

©