可以用API获得打印机支持的纸张类型,然后比较。
解决方案 »
- RTX客户端发送数据到服务器
- 关于OPEN语句如何创建UTF8文件?
- 使用PaintPicture在PictureBox中打印GIF透明图片为何不能透明呢?
- 如何在ListBox中右键选择列表中的项,即点右键可以得到当前点击项的值?
- 给叶帆提点意见!
- 属性写在什么地方
- win2000里面都有系统日志(用事件查看器可以看到),我怎么才可以读取那些日志呢?
- 请问:vb6中的菜单和快捷键之间的那条横线如何加?(象vb6编辑窗口上那样)
- 我想要学习VB,希望大家给我帮助。谢谢
- Datagrid出错,盼望指教(VB新手)
- 如何制作ACTIVEX并在WEB中使用
- (重复问题)在VB中如何判断声卡正被另一个程序使用,以及如何终止这个程序对声卡的占用(一定给分)
我现在是:
用API在程序里改变了默认打印机的纸张大小和打印方向。可我没有办法判断更改后的纸张能不能在默认打印机上使用。
你有更详细点的说明吗?
在线等待。
'参数说明:
'sName------打印机名称Printer.DeviceName
'sPort------打印机端口Printer.Port
On Error Resume Next
Dim PaperCount As Long
Dim PaperSize As Integer
Dim bytePaperNames() As Byte
Dim bytePaperSizes() As Byte
Dim sInfo As String
Dim i As Long
Dim hPrn As Long
Dim PrnDef As PRINTER_DEFAULTS
Dim lbNeed As Long
Dim dm As DEVMODE
Dim bDM() As Byte
Dim lResult As Long
Screen.MousePointer = vbHourglass
PrnDef.DesiredAccess = PRINTER_ALL_ACCESS
lResult = OpenPrinter(sName, hPrn, PrnDef)
' CopyMemory dm, mb_CurDM(1), Len(dm)
lbNeed = DocumentProperties(Me.hwnd, hPrn, sName, dm, dm, 0&)
ReDim bDM(1 To lbNeed)
CopyMemory bDM(1), mb_CurDM(1), lbNeed
PaperCount = DeviceCapabilities(sName, sPort, DC_PAPERNAMES, 0&, bDM(1))
If PaperCount <= 0 Then
cboPrinter(1).Clear
MsgBox "打印机" & sName & "无有效的打印纸张规格!请检查是否正确安装了该打印机.", vbInformation, VCSPRINTTITLE
Screen.MousePointer = vbDefault
Exit Sub
End If
Dim l As Long
ReDim bytePaperNames(1 To 64 * PaperCount)
Call DeviceCapabilities(sName, sPort, DC_PAPERNAMES, VarPtr(bytePaperNames(1)), bDM(1)) ReDim bytePaperSizes(1 To 2 * PaperCount)
Call DeviceCapabilities(sName, sPort, DC_PAPERS, VarPtr(bytePaperSizes(1)), bDM(1))
cboPrinter(1).Clear
For i = 1 To PaperCount
sInfo = StrConv(MidB(bytePaperNames, (i - 1) * 64 + 1, 64), vbUnicode)
cboPrinter(1).AddItem Left(sInfo, InStr(sInfo, Chr(0)) - 1) '纸张名称
CopyMemory PaperSize, bytePaperSizes((i - 1) * 2 + 1), 2
cboPrinter(1).ItemData(cboPrinter(1).NewIndex) = PaperSize
DoEvents
Next i
Call GetLimExtent(sName, sPort, m_MinWidth, m_MaxWidth, m_MinHeight, m_MaxHeight)
Call GetCurPaper(PaperCount)
Screen.MousePointer = vbDefault
End Sub以上GetLimExtent、GetCurPaper的两个函数是我自己的另外两个功能块,与此无关。
以上mb_CurDM是另外一个模块级变量,就是通过API函数DocumentProperties或GetPrinter得到。请参看MSDN 这是以前一个帖子的节选,目的是列出一个打印机所可以打印的所有纸张大小的类型,你看看吧!