プログラミング工房 ≫ 覚え書き ≫ プリンタ・印刷関係 ≫ デフォルトプリンタの変更

 
通常使うプリンタ(デフォルトプリンタ)の変更 <VB6>
通常使うプリンタ(デフォルトプリンタ)をフォーム上より変更します。
フォーム上に ListBox1 と Label1 を配置します。

≪モジュール≫

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


≪フォーム≫

' フォームのロード
Private Sub Form_Load()
    Dim i As Long
    ' ListBox1 にプリンタ一覧を表示
    ListBox1 = Printer.DeviceName
    For i = 0 To Printers.Count - 1
        ListBox1.AddItem Printers(i).DeviceName
    Next
    ' Label1 に現在のデフォルトプリンタを表示
    Label1 = Printer.DeviceName
    For i = 0 To Printers.Count - 1
        Label1.AddItem Printers(i).DeviceName
    Next
End Sub

' ListBox1 をダブルクリック
Private Sub ListBox1_DblClick()
    Dim i As Long
    For i = 0 To Printers.Count - 1
    If Printers(i).DeviceName = ListBox1 Then Exit For
        Next
        If i = Printers.Count Then
            MsgBox "該当するプリンタがありません", vbExclamation
        Exit Sub
    End If
    ' 新しいデフォルトプリンタを登録
    SetWindowsDefaultPrinter Printers(i).DeviceName, Printers(i).DriverName, Printers(i).Port
    Printer.EndDoc
    ' Label1 に新しいデフォルトプリンタを表示
    Label1 = Printer.DeviceName
End Sub

戻る