zoukankan      html  css  js  c++  java
  • 获取打印机纸张信息

    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
  • 相关阅读:
    RabbitMQ修改端口号和心跳时间
    RabbitMQ常用命令行
    机票分页存储过程!
    Sql Server随机取数据
    Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现
    AJAX请求时status返回状态明细表 readyState的五种状态
    最小化到托盘,右键退出
    post注入及提权思路
    MySQL提权之user.MYD中hash破解方法
    鸡肋提权之变态root利用
  • 原文地址:https://www.cnblogs.com/Spacecup/p/3642833.html
Copyright © 2011-2022 走看看