Option Explicit
' デフォルトプリンタ変更関数の宣言
Private Declare Function GetVersion Lib "kernel32" () 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 HWND_BROADCAST = &HFFFF&
Const WM_WININICHANGE = &H1A
' OS が Windows NT系 なら True、Windows 95系 なら False
Public Function isWindowsNT() As Boolean
isWindowsNT = IIf(GetVersion() And &H80000000, False, True)
End Function
' OS のデフォルトプリンタを変更
Public Sub SetWindowsDefaultPrinter(DeviceName As String, DriverName As String, Port As String)
Dim param As String
param = DeviceName & "," & DriverName & "," & Port
WriteProfileString "windows", "device", param
If isWindowsNT Then
' Windows NT
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0&, ByVal 0&
Else
' Windows 95
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0&, ByVal "windows"
End If
End Sub