Type PRINTER_DEFAULTS 
pDatatype As String
pDevMode As Long
DesiredAccess As Long
End Type
Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"  (Byval pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
         
Dim printer As Long
Dim printerdefault As PRINTER_DEFAULTS
ttt =  OpenPrinter("Acrobat PDFWriter",printer, printerdefault)
我用以上代买来实现连接打印机,为何返回值是0呢,Acrobat PDFWriter这个打印机确实存在的啊???

解决方案 »

  1.   

    Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    Public Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    Public Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" _
          (ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As LongPublic Declare Function StartDocPrinter Lib "winspool.drv" Alias _
             "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
             pDocInfo As DOCINFO) As Long
           
    Public Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    Public Declare Function WritePrinter Lib "winspool.drv" (ByVal _
             hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, _
             pcWritten As Long) As Long
      

  2.   

    据我所知,
    Type PRINTER_DEFAULTS 
    pDatatype As String
    pDevMode As Long
    DesiredAccess As Long
    End Type
    第二条应该是     pDevMode As DEVMODE

    Type DEVMODE
        dmDeviceName As String * CCHDEVICENAME
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCHFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Long
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
    End Type
    合起来,我试验的结果就是Const CCHDEVICENAME = 32
    Const CCHFORMNAME = 32Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As LongType DEVMODE
        dmDeviceName As String * CCHDEVICENAME
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCHFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Long
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
    End TypeType PRINTER_DEFAULTS
        pDatatype As String
        pDevMode As DEVMODE
        DesiredAccess As Long
    End TypePrivate Sub Form_Load()    Dim pDefault As PRINTER_DEFAULTS
        Dim pName As String
        Dim pHPrint As Long
        Dim value As Long
        
        pName = "\\QDF\HPLJ4050"
        value = OpenPrinter(pName, pHPrint, pDefault)
        
        MsgBox CStr(pHPrint) & " " & value
        
        
        
    End Sub在我的电脑上运行通过,你改一个pName试试