概要
Windows のデフォルトプリンターを取得します。同時にデバイスに登録されているプリンターの一覧も取得します。
印刷関連のメソッドで、現在の印刷環境を判断するのにご使用ください。
機能
- Windows OSに登録されているプリンターを一覧で取得します。
- 一覧の1番目にデフォルトのプリンター名を返します。
- 一覧の2番目以降に他のプリンター名を返します。
- 一覧の1番目「strPrinterName(0)」が空 ""の時はプリンターは一件も登録されていません。
形式
001 Boolean = GetDefPrinterName_All(ByRef strPrinterName() As String)
引数
- 第一引数 ( string strPrinterName() ) :
プリンター名の一覧が返されます。
動的配列なので配列のサイズは指定しません。関数側でReDim で設定されて返されます。
Dim strPrinterName() As String
戻り値
- True:エラー無し
- False:実行エラー
サンプル
デフォルトプリンター名をstrPrinterName(0)に返します。それ以外はstrPrinterName(1)以降の配列に返します。
Download:sample-GetAllPrinters.xls
001 Option Explicit
002
003 Sub test_Main_nnn2GetAllPrinters()
004 Dim strPrinterName() As String
005 Dim bRet As Boolean
006 bRet = nnn2GetAllPrinters(strPrinterName)
007 Dim i As Long
008 For i = 0 To UBound(strPrinterName)
009 If i = 0 Then
010 'Default Printer
011 Debug.Print i & " = " & strPrinterName(i) _
012 & " (Default Printer)"
013 Else
014 Debug.Print i & " = " & strPrinterName(i)
015 End If
016 Next i
017 Debug.Print "Cound = " & UBound(strPrinterName, 1) + 1
018 End Sub
019
020 '======================================================================
021 '
022 ' 名称 :OSのプリンターを全て取得
023 ' 機能 :OSのプリンターを取得して、strPrinterName()配列に返す。
024 ' strPrinterName(0)には「通常使うプリンター」がセットされる。
025 ' strPrinterName(1)以上にそれ以外はプリンターがセットされる。
026 ' バージョン:1.0
027 ' 作成日 :2017/08/19 初版
028 ' URL :https://pdf-file.nnn2.com/?p=1012
029 '
030 '======================================================================
031
032 Private Function nnn2GetAllPrinters( _
033 ByRef strPrinterName() As String) As Boolean
034
035 nnn2GetAllPrinters = True
036 On Error GoTo Err_nnn2GetAllPrinters:
037
038 ReDim strPrinterName(10) As String
039 Dim varWMIService As Variant
040 Dim varPS As Variant
041 Dim objPrinter As Object
042 Dim i As Long
043 i = 0
044 strPrinterName(0) = ""
045 strPrinterName(1) = ""
046 Set varWMIService = CreateObject("winmgmts:{impersonationLevel=impersonate}!¥¥.¥root¥cimv2")
047 Set varPS = varWMIService.ExecQuery("Select * from Win32_Printer")
048 For Each objPrinter In varPS
049 If objPrinter.Default Then
050 '通常使うプリンターを取得
051 strPrinterName(0) = objPrinter.Caption
052 Else
053 i = i + 1
054 strPrinterName(i) = objPrinter.Caption
055 End If
056 Next
057 ReDim Preserve strPrinterName(i) As String
058 Exit Function
059
060 Err_nnn2GetAllPrinters:
061 MsgBox "nnn2GetAllPrinters " & vbCrLf & _
062 Err.Description, vbCritical, "Runtime Error"
063 nnn2GetAllPrinters = False
064 End Function
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
実行結果
0 = Adobe PDF (Default Printer)
1 = Microsoft XPS Document Writer
2 = Microsoft Print to PDF
3 = Fax
4 = ¥¥AMD-PC¥Brother DCP-J957N Printer
Cound = 5
- 配列の1番目(添字=0)にデフォルトのプリンタ名が返されます。
- 「¥¥AMD-PC¥」とあるのはネットワークプリンターです。
- プリンター名の数は Ubound(strPrinterName,1)+1 の結果です。
参照
< サンプル一覧 >