玄関へお回り下さい。
通常使うプリンターを取得及び設定する (5個)            (SNo.058)

1.通常使うプリンターを取得(簡易版)
2.通常使うプリンターを取得(改良版)
3.WScript.Network を使っての通常使うプリンターを設定する
4.WMI のWin32_Printer クラスを使って通常使うプリンターを取得 
5.WMI のWin32_Printer クラスを使って通常使うプリンターを設定
使用コントロール Button1 〜 Button5   ComboBox1
その他条件 WindowsVista  WindowsXP(SP2)  VB2005(EE)  Framework2.0
別途、必要によりComboBox1にプリンターの一覧を取得しておいて下さい
必要により、プロジェクト→参照の追加→.NET→で System.Management を追加しておいて下さい
1.通常使うプリンターを取得(簡易版)
 
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
'通常使うプリンターを取得
   Dim pd As New System.Drawing.Printing.PageSettings
   Debug.WriteLine(pd.PrinterSettings.PrinterName)     '結果  EPSON PM-3300C ESC/P R

   'ただし、下記のようにプリンターを変更されると通常使うプリンター名が
   '返ってくるとは限りません
   Dim printer As String = "ABCD Printer"
   pd.PrinterSettings.PrinterName = printer            '存在しなくても変更はできる
   Debug.WriteLine(pd.PrinterSettings.PrinterName)     '結果  ABCD Printer
End Sub
 
2.通常使うプリンターを取得(改良版)
 
Private Sub Button2_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button2.Click
   Dim pd As New System.Drawing.Printing.PrintDocument

   '途中でプリンターを変更(テストのために)
   Dim printer As String = "ABCD Printer"
   pd.PrinterSettings.PrinterName = printer                '存在しなくても変更はできる
   Debug.WriteLine(pd.PrinterSettings.PrinterName)         '結果  ABCD Printer

   'IsDefaultPrinter プロパティ で PrinterNameが変更されていないか
   '確認する。変更されていれば、IsDefaultPrinter プロパティ=False となる
   If pd.PrinterSettings.IsDefaultPrinter Then
      Debug.WriteLine(pd.PrinterSettings.PrinterName)     '結果  EPSON PM-3300C ESC/P R
   Else
      pd = New System.Drawing.Printing.PrintDocument
      Debug.WriteLine(pd.PrinterSettings.PrinterName)     '結果  EPSON PM-3300C ESC/P R
   End If
End Sub

※ PrinterName プロパティ は、通常使うプリンター名を返すのではなく、使用するプリンターの名前を取得または設定するものであるという事です。
これ以下のコードをテストする場合は、下記でプリンター一覧を取得しておいて下さい。

Private Sub Form1_Load(ByVal sender As System.Object, _
                       
ByVal e As System.EventArgs) Handles MyBase.Load
'コンピューターにインストールされているすべてのプリンターの名前を取得
   
Dim pp As New System.Drawing.Printing.PageSettings

   ComboBox1.Items.Clear()
   
For Each p As String In Printing.PrinterSettings.InstalledPrinters
     
If p = pp.PrinterSettings.PrinterName Then
         ComboBox1.Text = p
     
End If
      ComboBox1.Items.Add(p)
      '  Debug.WriteLine(p)
   
Next
End Sub

3.WScript.Network を使っての通常使うプリンターを設定する
 
Private Sub Button3_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button3.Click
'WScript.Network を使っての通常使うプリンターを設定する
   If ComboBox1.Text.Length > 0 Then
      Dim t As Type = Type.GetTypeFromProgID("WScript.Network")
      Dim oWsn As Object = Activator.CreateInstance(t)
      t.InvokeMember("SetDefaultPrinter", System.Reflection.BindingFlags.InvokeMethod, _
                     Nothing, oWsn, New Object() {ComboBox1.Text})
   End If

'--------------------------------------------------------------------------------------
   'Dim objWsn As Object
   'objWsn = CreateObject("WScript.Network")
   'objWsn.SetDefaultPrinter(ComboBox1.Text)
   'objWsn = Nothing

End Sub
 
4.WMI のWin32_Printer クラスを使って通常使うプリンターを取得
 
Private Sub Button4_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button4.Click
'WMI のWin32_Printer クラスを使って通常使うプリンターを取得
   Dim ms As New System.Management.ManagementObjectSearcher("Select * from Win32_Printer")
   For Each oPrinter As System.Management.ManagementObject In ms.Get()
      If DirectCast(oPrinter("Default"), Boolean) = True Then
         Debug.WriteLine(oPrinter("Name").ToString())
         Exit For
      End If
   Next oPrinter

'--------------------------------------------------------------------------------------
   'Dim myComputer As String = "."
   'Dim oWMIService As Object = GetObject("winmgmts:" _
   '  & "{impersonationLevel=impersonate}!\\" & myComputer & "\root\cimv2")
   'Dim ps As Object = oWMIService.ExecQuery("Select * from Win32_Printer")
   'Dim oPrinter As Object
   'For Each oPrinter In ps
   '   '通常使うプリンターを取得
   '   If oPrinter.Default Then
   '      Debug.WriteLine(oPrinter.Caption)
   '   End If
   'Next

End Sub
 
5.WMI のWin32_Printer クラスを使って通常使うプリンターを設定

Private Sub Button5_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button5.Click
'WMI のWin32_Printer クラスを使って通常使うプリンターを設定
   'この方法で通常使うプリンターを設定した場合コントロールパネルの通常使うプリンターのマークはすぐには反映されない。
   Dim ms As New System.Management.ManagementObjectSearcher("Select * from Win32_Printer")
   For Each oPrinter As System.Management.ManagementObject In ms.Get()
      '通常使うプリンターを設定
      If ComboBox1.Text = oPrinter("Caption").ToString() Then
         oPrinter.InvokeMethod("SetDefaultPrinter", Nothing)
         Exit For
      End If
   Next oPrinter
   Button4.PerformClick()  '通常使うプリンターを取得して確認して見る
'--------------------------------------------------------------------------------------
   'Dim myComputer As String = "."
   'Dim oWMIService As Object = GetObject("winmgmts:" _
   '  & "{impersonationLevel=impersonate}!\\" & myComputer & "\root\cimv2")
   'Dim ps As Object = oWMIService.ExecQuery("Select * from Win32_Printer")
   'Dim oPrinter As Object
   'For Each oPrinter In ps
   '   '通常使うプリンターを設定する
   '   If ComboBox1.Text = oPrinter.Caption Then
   '      oPrinter.SetDefaultPrinter()
   '   End If
   'Next

End Sub



2004/07/17
2007/12/16


VBレスキュー(花ちゃん)
VB.NET2003  VB2005