在 VB 裡面, 原本改變預設印表機的方法是:(假設安裝有兩種印表機(驅動程式))
Set Printer = Printers(0) ' 將預設印表機設定成第一種印表機
Set Printer = Printers(1) ' 將預設印表機設定成第二種印表機
但實際上以上敘述有時候不會成功(原因不詳), 為了能夠成功地改變預設印表機, 以下是呼叫 Windows API 的方法:(補充說明: 此一解決方案適用於 Windows 95, 至於 NT 設定預設印表機的方法請參考 98/04/05 的每週小技巧)
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
註:如果以上的宣告放在「一般模組」底下, 應在 Const 之前加上 Public 保留字, 並且將 Private 保留字去掉。
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")
以筆者的所安裝的印表機為例, 含有 "HP LaserJet 4L" 及 "HP LaserJet 5L (Traditional)" 兩種, 若想將預設印表機設定成 "HP LaserJet 4L", 則須將以上程式的「PrinterName = "您想設定的印表機名稱"」 改成:
PrinterName = "HP LaserJet 4L"