none
Driver de impressora

    Question

  • Olá pessoal,
    Mais uma vez venho requisitar a ajuda de vocês, bem, tenho uma impressora HP LaserJet P1005, e a minha aplicação não está reconhecendo configuração da impressora, utilizamos um componente de impressão próprio, ou seja, não estou utilizando o CR para imprimir, então eu gostaria de saber como eu faço para utilizar a API do windows para reconhecer o driver da impressora que já está instalado no windows.

    PS.: Utilizo o Windows XP SP3 e o VB6 SP6, consigo visualizar a impressão, porém quando mando imprimir ela está sendo impressa 3x maior que o seu tamanho original, fazendo com que a impressão sai incompleta na página.
    Friday, December 11, 2009 5:41 PM

Answers

  • Segue abaixo o código que utilizo para reconhecer as impressoras instaladas no pc


    Lista quais são as impressoras instaladas

            Dim impT As String = ""
    
            Try
    
    
                For Each impT In PrinterSettings.InstalledPrinters
    
                    Me.ImpComboBox.Items.Add(impT)
    
                Next
    
            Catch ex As Exception
    
                MessageBox.Show(ex.ToString, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
            End Try
    O código abaixo retorna qual porta que está a impressora

    Impressora.RetornaPortaImpressora("Nome da Impressora")

    Depois disso é só ver qual tipo de porta que ele é, serial, usb e enviar os dados diretamente para ela, por exemplo, se for serial, vc escreve os dados na porta serial e pronto.

    Segua abaixo a classe impressora

    Imports System.Runtime.InteropServices
    
    Module Impressora
    
        <DllImport("winspool.drv", SetLastError:=True, CharSet:=CharSet.Auto)> Public Function GetPrinter(ByVal hPrinter As IntPtr, ByVal dwLevel As UInteger, ByVal pPrinter As IntPtr, ByVal dwBuf As UInteger, ByRef dwNeeded As UInteger) As Boolean
    
        End Function
    
        <DllImport("winspool.drv", SetLastError:=True, CharSet:=CharSet.Auto)> Private Function OpenPrinter(ByVal pPrinterName As String, ByRef phPrinter As IntPtr, ByRef pDefault As PRINTER_DEFAULTS) As Integer
        End Function
    
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Structure PRINTER_DEFAULTS
    
            Public pDatatype As IntPtr
            Public pDevMode As IntPtr
            Public DesiredAccess As Integer
    
        End Structure
    
        <DllImport("winspool.drv", SetLastError:=True)> Private Function ClosePrinter(ByVal hPrinter As IntPtr) As Integer
        End Function
    
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Public Structure PRINTER_INFO_2
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pServerName As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pPrinterName As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pShareName As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pPortName As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pDriverName As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pComment As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pLocation As String
    
            Public pDevMode As IntPtr
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pSepFile As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pPrintProcessor As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pDatatype As String
    
            <MarshalAs(UnmanagedType.LPTStr)> Public pParameters As String
    
            Public pSecurityDescriptor As IntPtr
    
            Public Attributes As UInteger
    
            Public Priority As UInteger
    
            Public DefaultPriority As UInteger
    
            Public StartTime As UInteger
    
            Public UntilTime As UInteger
    
            Public Status As UInteger
    
            Public cJobs As UInteger
    
            Public AveragePPM As UInteger
    
        End Structure
    
        Public Function RetornaPortaImpressora(ByVal pd As String) As String
    
            RetornaPortaImpressora = ""
    
            Dim printerHandle As IntPtr = IntPtr.Zero
    
            Dim printerDefaults As New PRINTER_DEFAULTS()
    
            Dim tam As UInteger = 0UI
    
            ' Tenta abrir a impressora cujo nome foi retornado pelo PrintDialog.
    
            OpenPrinter(pd, printerHandle, printerDefaults)
    
            Dim ret As Boolean = GetPrinter(printerHandle, 2, IntPtr.Zero, 0, tam)
    
            If tam > 0 Then
    
                Dim ptrBuffer As IntPtr = Marshal.AllocHGlobal(Convert.ToInt32(tam))
    
                ret = GetPrinter(printerHandle, 2, ptrBuffer, tam, tam)
    
                If ret Then
    
                    Dim info2 As New PRINTER_INFO_2() ' Obtém estrutura PRINTER_INFO_2 com as informações da impressora.
    
                    info2 = DirectCast(Marshal.PtrToStructure(ptrBuffer, GetType(PRINTER_INFO_2)), PRINTER_INFO_2)
    
                    ' Exibe porta.
                    Console.WriteLine("Impressora: " + info2.pPortName)
                    'MessageBox.Show(info2.pPortName)
    
                    If Not info2.pServerName Is Nothing Then
    
                        RetornaPortaImpressora = info2.pServerName & "\" & info2.pShareName
    
                    Else
    
                        RetornaPortaImpressora = info2.pServerName & "\" & info2.pShareName
    
                    End If
    
                End If
    
                Marshal.FreeHGlobal(ptrBuffer)
    
            End If
    
            ' Fecha.
    
            ClosePrinter(printerHandle)
    
        End Function
    
    End Module
    


    Bacharel em Ciência da Computação
    Thursday, December 17, 2009 6:01 PM