VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 印刷関係のメニュー
1.プリンターの一覧を取得及び指定のプリンターで印刷
2.印刷位置をmm単位で指定しての簡単なテキストの印刷
3.印刷プレビューを表示及びダイアログの設定色々
4.ページ設定ダイアログボックスを表示する
5.用紙サイズの取得及び設定・印刷部数・印刷方向の設定
6.通常使うプリンターを取得及び設定する
7.画像を拡大・縮小して印刷及びファイルから直接読み込み印刷
8.格子状にラインを引いて表形式で印刷する
9.
10.
11.
12.
 .
20.その他、当サイト内に掲載の印刷に関するサンプル 


6.通常使うプリンターを取得及び設定する(07_Pri_06) (旧、SampleNo.058)
1.通常使うプリンターを取得(簡易版)
2.通常使うプリンターを取得(改良版)
3.WScript.Network を使っての通常使うプリンターを設定する
4.WMI のWin32_Printer クラスを使って通常使うプリンターを取得
5.WMI のWin32_Printer クラスを使って通常使うプリンターを設定
6.プリンターの状態(電源OFF・接続・ポート)を取得
7.コンピューターにインストールされているすべてのプリンターの名前を取得

 下記プログラムコードに関する補足・注意事項 
動作確認: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.コンピューターにインストールされているすべてのプリンターの名前を取得


このページのトップへ移動します。