判断打印机是否支持彩色/双面打印-danis
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 综合其它


判断打印机是否支持彩色/双面打印

发表时间:2008/10/13 19:22:30 评论(0) 浏览(10757)  评论 | 加入收藏 | 复制
   
摘 要:判断打印机是否支持彩色/双面打印
正 文:
判断打印机是否支持彩色/双面打印

Const NULLPTR = 0&
'Constants for DEVMODE
Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32
'Constants for DocumentProperties
Const DM_MODIFY = 8
Const DM_COPY = 2
Const DM_IN_BUFFER = DM_MODIFY
Const DM_OUT_BUFFER = DM_COPY


Private Type DEVMODE
  dmDeviceName(1 To CCHDEVICENAME) As Byte
  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(1 To CCHFORMNAME) As Byte
  dmUnusedPadding              As Integer
  dmBitsPerPel                 As Integer
  dmPelsWidth                  As Long
  dmPelsHeight                 As Long
  dmDisplayFlags               As Long
  dmDisplayFrequency           As Long
End Type

Declare Function OpenPrinterA Lib "winspool.drv" (ByVal pPrinterName As String, phPrinter As Long, _
        ByVal pDefault As Long) As Long
Declare Function DocumentPropertiesA Lib "winspool.drv" (ByVal hwnd As Long, ByVal hPrinter As Long, _
        ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, ByVal fMode As Long) As Long
Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

Function StripNulls(OriginalStr As String) As String
  If (InStr(OriginalStr, Chr(0)) > 0) Then
     originalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
  End If
  StripNulls = Trim(OriginalStr)
End Function

Function ByteToString(ByteArray() As Byte) As String
  Dim TempStr As String
  Dim I       As Integer
  For I = 1 To CCHDEVICENAME
      TempStr = TempStr & Chr(ByteArray(I))
  Next I
  ByteToString = StripNulls(TempStr)
End Function

Function GetPrinterSettings(szPrinterName As String) As Boolean
  Dim hPrinter   As Long
  Dim nSize      As Long
  Dim pDevMode   As DEVMODE
  Dim aDevMode() As Byte
  Dim TempStr    As String

  If OpenPrinterA(szPrinterName, hPrinter, NULLPTR) Then
     nSize = DocumentPropertiesA(NULLPTR, hPrinter, szPrinterName, NULLPTR, NULLPTR, 0)
     ReDim aDevMode(1 To nSize)
     nSize = DocumentPropertiesA(NULLPTR, hPrinter, szPrinterName, aDevMode(1), NULLPTR, DM_OUT_BUFFER)
     Call CopyMemory(pDevMode, aDevMode(1), Len(pDevMode))

     Debug.Print "Printer Name: " & ByteToString(pDevMode.dmDeviceName)
     Debug.Print "PaperSize:" & pDevMode.dmPaperSize
  
     Select Case pDevMode.dmDuplex
     Case 1: TempStr = "None 单面打印"
     Case 2: TempStr = "Duplex on long edge (book) 长边翻页打印"
     Case 3: TempStr = "Duplex on short"
     End Select
     Debug.Print "Duplex:" & TempStr
   
     '获取打印机是否支持彩色打印
     Select Case pDevMode.dmColor
     Case 1: TempStr = "MONOCHROME"
     Case 2: TempStr = "COLOR"
     Case Else: TempStr = "UNDEFINED"
     End Select
     
     Debug.Print "Color or Monochrome: " & TempStr
     Call ClosePrinter(hPrinter)
     GetPrinterSettings = True
  Else
     GetPrinterSettings = False
  End If
End Function

Sub Test()
    GetPrinterSettings Left(Application.ActivePrinter, InStr(Application.ActivePrinter, "在") - 2)
End Sub

Access软件网交流QQ群(群号:198465573)
 
 相关文章
判断InputBox界面点击了确定还是取消按钮的方法  【叶海峰  2013/4/20】
如何判断是否以独占方式打开当前数据库?  【杜超-2号  2013/4/27】
【Access基础】判断表中是否有负数存在  【缪炜  2013/5/3】
【Access基础】判断文本框中是否存在非数字字符/文本框只能输入...  【缪炜  2013/5/24】
sqlserver中判断表或临时表是否存在  【平常心  2013/7/22】
常见问答
技术分类
相关资源
文章搜索
关于作者

danis

文章分类

文章存档

友情链接