请问如何得到当前印机纸张信息?
如纸张名称、长、宽等

解决方案 »

  1.   

    获取打印机纸张信息Option Explicit
    Private Const DC_MAXEXTENT = 5
    Private Const DC_MINEXTENT = 4
    Private Const DC_PAPERNAMES = 16
    Private Const DC_PAPERS = 2
    Private Const DC_PAPERSIZE = 3
    Private Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, lpDevMode As Any) As Long
    Private Type POINTS
            x  As Long
            y  As Long
    End Type'***********************************************************
    '* 名称:GetPaperInfo
    '* 功能:得到打印机低张信息
    '* 用法:GetPaperInfo(控件名)
    '* 描述:如在 form_load()中调用GetPaperInfo MSHFlexGrid1
    '***********************************************************
    Public Function GetPaperInfo(Flex As MSHFlexGrid) As Boolean    Dim i As Long, ret As Long
        Dim Length As Integer, Width As Integer
        Dim PaperNo() As Integer, PaperName() As String, PaperSize() As POINTS
        
        With Flex
            .FormatString = "^纸张编号|^纸张名称|^纸张长度|^纸张宽度"
            For i = 0 To .Cols - 1
                .ColWidth(i) = 1700
            Next i
            .AllowUserResizing = flexResizeColumns
            .Left = 0
        End With
            
        '支持最大打印纸:
        ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_MAXEXTENT, ByVal 0&, ByVal 0&)
        Length = ret \ 65536
        Width = ret - Length * 65536
        
        '支持最小打印纸:
        ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_MINEXTENT, ByVal 0&, ByVal 0&)
        Length = ret \ 65536
        Width = ret - Length * 65536
        
        '支持纸张种类数
        ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERS, ByVal 0&, ByVal 0&)
        
        '纸张编号
        ReDim PaperNo(1 To ret) As Integer
        Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERS, PaperNo(1), ByVal 0&)
        
        '纸张名称
        Dim arrPageName() As Byte
        Dim allNames As String
        Dim lStart As Long, lEnd As Long
        ReDim PaperName(1 To ret) As String
        ReDim arrPageName(1 To ret * 64) As Byte
        Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERNAMES, arrPageName(1), ByVal 0&)
        allNames = StrConv(arrPageName, vbUnicode)
        'loop through the string and search for the names of the papers
        i = 1
        Do
            lEnd = InStr(lStart + 1, allNames, Chr$(0), vbBinaryCompare)
            If (lEnd > 0) And (lEnd - lStart - 1 > 0) Then
                PaperName(i) = Mid$(allNames, lStart + 1, lEnd - lStart - 1)
                i = i + 1
            End If
            lStart = lEnd
        Loop Until lEnd = 0
        
        '纸张尺寸
        
        ReDim PaperSize(1 To ret) As POINTS
        Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERSIZE, PaperSize(1), ByVal 0&)
        
        '显示在表格中
        For i = 1 To ret
            Flex.AddItem PaperNo(i) & vbTab & PaperName(i) & vbTab & PaperSize(i).y & vbTab & PaperSize(i).x
        Next i
        
    End Function
      

  2.   


    加一个MSHFlexGrid1
    调用方法 
      GetPaperInfo MSHFlexGrid1