VB中打印机选择

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1)

假设你的COMMONDIALOG控件叫CMDiag

用如下代码可以使你选择的打印机成为默认打印机"Printer"

On Error Resume Next

CMDiag.PrinterDefault = True

CMDiag.CancelError = True

CMDiag.ShowPrinter

If Err.Number <> 0 Then Exit Sub

(2)

VB 里面,原本改变预设打印机的方法是:(假设安装有两种打印机(驱动程式))

Set Printer = Printers(0) ' 将预设打印机设定成第一种打印机

Set Printer = Printers(1) ' 将预设打印机设定成第二种打印机

但实际上以上叙述有时候不会成功(原因不详),为了能够成功地改变预设打印机,

以下是呼叫Windows API 的方法:( 此一解决方案适用於Windows 95,98)

1. API 的宣告:

Const HWND_BROADCAST = &HFFFF&

Const WM_WININICHANGE = &H1A

Private Declare Function GetProfileString Lib "kernel32" Alias _ "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As _

String, ByVal lpDefault As String, ByVal lpReturnedString As String, _

ByVal nSize As Long) As Long

Private Declare Function WriteProfileString Lib "kernel32" Alias _ "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName _

As String, ByVal lpszString As String) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _

(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long

2. 程式范例:

PrinterName = "您想设定的打印机名称"

Dim S As String, length As Long, hKey As Long

S = String(80, Chr(0))

length = GetProfileString("devices", PrinterName, "", S, Len(S))

S = Left(S, length)

Call WriteProfileString("windows", "device", PrinterName & "," & S)

Call SendMessage(HWND_BROADCAST, WM_WININICHANGE, &H7FFF&, ByVal "windows")

至於改变NT 预设打印机的方法,则是改变登录资料库(Registry)打印机的设定,

在登录资料库中纪录

预设打印机的Value 是:

HKEY_CURRENT_USER

\Software\Microsoft\WindowsNT\CurrentVersion\Windows subkey 的Device value

(3)VB中获取指定打印机的各种纸张类型及大小

放入一个MSFlexGrid,名称为fgd1,列数为4

'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 "DeviceCap abilitiesA" (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

Private Sub Form_Load()

Dim i As Long

With fgd1

.Clear

.FormatString = "^纸张编号|^纸张名称|^纸张长度|^纸张宽度"

For i = 0 To .Cols - 1

.ColWidth(i) = 1700

Next i

.AllowUserResizing = flexResizeColumns

.Left = 0

.Width = Me.ScaleWidth

End With

GetPaperInfo

End Sub

Private Sub GetPaperInfo()

Dim i As Long, ret As Long

Dim Length As Integer, Width As Integer

Dim PaperNo() As Integer, PaperName() As String, PaperSize() As POINTS

'支持最大打印纸:

相关文档
最新文档