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