6.通常使うプリンターを取得及び設定する(07_Pri_06) (旧、SampleNo.058) |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし 使用コン:ComboBox1 / Button1/Button2 / Button3 / Button4 /Button5 / Button6 トロール: このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.通常使うプリンターを取得(簡易版) |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '通常使うプリンターを取得 Dim pd As New System.Drawing.Printing.PageSettings Debug.WriteLine(pd.PrinterSettings.PrinterName) '結果 EPSON PM-A840 'ただし、下記のようにプリンターを変更されると通常使うプリンター名が '返ってくるとは限りません Dim printer As String = "ABCD Printer" pd.PrinterSettings.PrinterName = printer '存在しなくても変更はできる Debug.WriteLine(pd.PrinterSettings.PrinterName) '結果 ABCD Printer End Sub |
2.通常使うプリンターを取得(改良版) |
Private Sub Button2_Click(sender As Object, e As 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-A840 Else pd = New System.Drawing.Printing.PrintDocument Debug.WriteLine(pd.PrinterSettings.PrinterName) '結果 EPSON PM-A840 End If End Sub |
3.WScript.Network を使っての通常使うプリンターを設定する |
Private Sub Button3_Click(sender As Object, e As 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(sender As Object, e As 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(sender As Object, e As 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 |
6.プリンターの状態(電源OFF・接続・ポート)を取得 |
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click 'プリンターの状態を取得 'アプリの印刷のボタンをクリックした時に表示される印刷のダイアログボックスの 'プリンターの状態を取得、Excel・Word 等多くのソフトはPrinterStatus の値を表示 'しているようです。 'これは、繋がっていなかっても、電源がOFF でも 3(準備完了) が表示されます。 'IE や メモ帳のダイアログでは、WorkOffline の状態を表示しています。 'WorkOffline の状態なら、電源がOFF や接続されているか、判断できるようです。 '(但し、プリンターによってやパラレル接続等でうまく取得できない場合があります) Dim ms As New System.Management.ManagementObjectSearcher("Select * from Win32_Printer") Dim offLine As String Dim priName As String Dim port As String For Each oPrinter As System.Management.ManagementObject In ms.Get() priName = oPrinter("Name").ToString() port = oPrinter("PortName").ToString() If DirectCast(oPrinter("WorkOffline"), Boolean) = True Then offLine = "オフライン" Else offLine = "準備完了" End If Debug.WriteLine("----------------------------------------") Debug.WriteLine("プリンター名:" & priName) Debug.WriteLine("状態 :" & offLine) Debug.WriteLine("場所 :" & port) Next oPrinter '電源断 '---------------------------------------- 'プリンター名: EPSON PM-A840 '状態: オフライン '場所: USB001 '---------------------------------------- 'プリンター名:EPSON LASER LP-1400 '状態: 準備完了 '場所: LPT1 '電源入り '---------------------------------------- 'プリンター名: EPSON PM-A840 '状態: 準備完了 '場所: USB001 '---------------------------------------- 'プリンター名:EPSON LASER LP-1400 '状態: 準備完了 '場所: LPT1 End Sub |
7.コンピューターにインストールされているすべてのプリンターの名前を取得 |
Private Sub Form1_Load(sender As Object, e As 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 |
検索キーワード及びサンプルコードの別名(機能名) |
1.通常使うプリンターを取得(簡易版) 2.通常使うプリンターを取得(改良版) 3.WScript.Network を使っての通常使うプリンターを設定する 4.WMI のWin32_Printer クラスを使って通常使うプリンターを取得 5.WMI のWin32_Printer クラスを使って通常使うプリンターを設定 6.プリンターの状態(電源OFF・接続・ポート)を取得 7.コンピューターにインストールされているすべてのプリンターの名前を取得 |