如何變更 系統預設印表機
如何改變 系統預設印表機
方法 1 :
使用 WMI 來設定預設印表機
' 呼叫設定
SetDefaultPrinter "HP LaserJet 1100 (MS)" ' 設定預設引表機 , 傳入印表機名稱
Private Sub SetDefaultPrinter(strDevice As String)
Const strCls = "Win32_Printer" ' WMI Class
GetObject("winmgmts:").InstancesOf(strCls)(strCls & ".DeviceID=""" & strDevice & """").SetDefaultPrinter
End Sub
================================================================
方法 2 :
透過 WSH 物件的 NetWork 類別的 SetDefaultPrinter 方法來改變預設印表機
' 呼叫設定
CreateObject("WScript.Network").SetDefaultPrinter "HP LaserJet 1100 (MS)" ' 設定預設印表機,傳入印表機名稱
================================================================
方法 3 :
透過改變登錄檔的方法來改變預設印表機
' 宣告
Private Const HWND_BROADCAST = &HFFFF&
Private Const WM_WININICHANGE = &H1A
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
' 呼叫設定
SetDefPrinter "HP LaserJet 1100 (MS)" ' 設定預設引表機 , 傳入印表機名稱
Private Sub SetDefPrinter(ByVal PrinterName As String)
Dim objP As Printer
' 從 Printers 集合物件中列舉出所有的印表機
For Each objP In Printers
If StrComp(objP.DeviceName, PrinterName, 1) = 0 Then ' 找到欲設定的印表機
' DriverName 為 Printer 的驅動程式名稱 , Port 為 Printer 的連接埠的名稱
SetPrinter PrinterName & "," & objP.DriverName & "," & objP.Port
Exit For
End If
Next
Set objP = Nothing
End Sub
Private Sub SetPrinter(Device As String)
Dim hKey As Long
Dim strKey As String
' 透過登錄檔的改寫 , 來改變預設印表機
strKey = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"
If Len(Environ("OS")) > 0 Then
' Win NT , 2K , XP 等系列 OS 平台
CreateObject("WScript.Shell").RegWrite strKey, Device
Else
' Win 98 系列 OS 平台
WriteProfileString "windows", "device", Device
' Call API 傳送訊息 , 廣播登錄檔資訊變更
SendMessage HWND_BROADCAST, WM_WININICHANGE, 32767&, ByVal "windows"
End If
End Sub
================================================================
VB.Net 寫法 :
加入參考 System.Drawing.dll
Imports System.Drawing.Printing
' 設定應用程式預設印表機
Private Sub SetAppDefPrinter(ByVal strPrinterName As String)
Dim pd As New PrintDocument ' 宣告並初始化 PrintDocument 類別的新執行個體
pd.PrinterSettings.PrinterName = strPrinterName ' 設定應用程式輸出印表機
End Sub
' 設定系統預設印表機
Private Function SetSysDefPrinter(ByVal strPrinter As String) As Boolean
Dim objWshNet As Object
Dim pd As New PrintDocument ' 宣告並初始化 PrintDocument 類別的新執行個體
Dim strOldPrinter As String
Try
objWshNet = CreateObject("WScript.Network") ' 建立 WSH 物件的 NetWork 類別
strOldPrinter = pd.PrinterSettings.PrinterName ' 記錄舊的系統預設印表機名稱
objWshNet.SetDefaultPrinter (strPrinter) ' 設定新的系統預設印表機
pd.PrinterSettings.PrinterName = strPrinter ' 設定應用程式輸出印表機
SetSysDefPrinter = pd.PrinterSettings.IsValid ' 判斷是否為有效印表機
' 若為無效印表機 , 則還原為舊的系統預設印表機
If Not SetSysDefPrinter Then objWshNet.SetDefaultPrinter (strOldPrinter)
Catch exc As Exception ' 錯誤掌控 , 例外處理
objWshNet.SetDefaultPrinter (strOldPrinter) ' 還原舊的系統預設印表機
Return False
Finally
' 釋放物件
objWshNet = Nothing
pd = Nothing
End Try
End Function
' 呼叫設定
SetSysDefPrinter ("HP LaserJet 1100 (MS)") ' 設定系統預設印表機
' 或
SetAppDefPrinter ("HP LaserJet 1100 (MS)") ' 設定應用程式預設印表機
================================================================
另一種方法 , Word Application 物件改變 [ 系統預設印表機 ]
Private Sub cmdSetDefPrinter_Click()
SetDefaultPrinter "HP LaserJet 1100 (MS)"
End Sub
Private Sub SetDefaultPrinter(strPrinterName As String)
With CreateObject("Word.Application")
.ActivePrinter = strPrinterName
On Error Resume Next
.ActiveDocument.Close False
.Quit
End With
End Sub