EnumPrinters

https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/cc429796.aspx https://msdn.microsoft.com/ja-jp/library/cc429796.aspx https://msdn.microsoft.com/ja-jp/library/ms535469.aspx https://msdn.microsoft.com/ja-jp/library/ms536023.aspx https://msdn.microsoft.com/ja-jp/library/ms535774.aspx https://msdn.microsoft.com/ja-jp/library/ms535768.aspx

利用可能なプリンタ、プリントサーバー、ドメイン、プリントプロバイダを列挙します。

BOOL EnumPrinters(
  DWORD Flags,         // プリンタオブジェクトのタイプ
  LPTSTR Name,         // プリンタオブジェクトの名前
  DWORD Level,         // 情報レベル
  LPBYTE pPrinterEnum, // プリンタ情報を格納するバッファ
  DWORD cbBuf,         // プリンタ情報バッファのサイズ
  LPDWORD pcbNeeded,   // 受け取ったバイト数または必要なバイト数
  LPDWORD pcReturned   // 列挙されたプリンタの数
);

パラメータ

Flags
列挙したいプリントオブジェクトのタイプを指定します。次の値の任意の組み合わせを指定します。
意味
PRINTER_ENUM_LOCALName パラメータを無視し、ローカルにインストールされているプリンタを列挙します。

Windows 95:ネットワークプリンタも列挙します。ローカルプリントプロバイダがこれらのプリンタを取り扱うからです。

PRINTER_ENUM_NAMEName パラメータで指定されたプリンタを列挙します。この値は、サーバー、ドメイン、プリントプロバイダのいずれかを指定します。Name パラメータに NULL を指定すると、使用可能なプリントプロバイダを列挙します。
PRINTER_ENUM_SHARED共有属性を備えているプリンタを列挙します。この値は、単独では使えません。OR 演算子を使って、PRINTER_ENUM のほかのタイプと組み合わせてください。
PRINTER_ENUM_DEFAULTWindows 95:既定のプリンタ(通常使うプリンタ)に関する情報を返します。
PRINTER_ENUM_CONNECTIONSWindows NT/2000:ユーザーが既に接続を確立しているプリンタのリストを列挙します。
PRINTER_ENUM_NETWORKWindows NT/2000:コンピュータと同じドメイン内のネットワークプリンタを列挙します。この値は、Level パラメータが 1 のときに限って有効です。
PRINTER_ENUM_REMOTEWindows NT/2000:コンピュータと同じドメイン内のネットワークプリンタとプリントサーバーを列挙します。この値は、Level パラメータが 1 のときに限って有効です。

Level パラメータが 4 の場合、PRINTER_ENUM_CONNECTIONS 値と PRINTER_ENUM_LOCAL 値のみを使えます。

Name
Level パラメータが 1 で、Flags パラメータに PRINTER_ENUM_NAME が指定されていて、Name パラメータが NULL ではない場合、Name パラメータは、列挙したいオブジェクトの名前を表す、NULL で終わる文字列へのポインタを指定します。この文字列は、サーバー名、ドメイン名、プリントプロバイダ名のいずれかになります。

Level パラメータが 1 で、 Flags パラメータに PRINTER_ENUM_NAME が指定されていて、Name パラメータが NULL の場合、この関数は使用可能なプリントプロバイダを列挙します。

Level パラメータが 1 で、Flags パラメータに PRINTER_ENUM_REMOTE が指定されていて、Name パラメータが NULL の場合、この関数は、ユーザーと同じドメイン内のプリンタを列挙します。

Level パラメータが 2 か 5 の場合、Name パラメータは列挙したいプリンタをもつサーバー名を表す、NULL で終わる文字列へのポインタを指定します。この文字列が NULL の場合、この関数は、ローカルコンピュータにインストールされているプリンタを列挙します。

Level パラメータが 4 の場合、Name パラメータに NULL を指定するべきです。この関数は常に、ローカルコンピュータ上のプリンタの問い合わせを行います。

Name パラメータが NULL の場合、この関数は、ローカルコンピュータにインストールされているプリンタを列挙します。これらのプリンタには、ローカルコンピュータに接続されているプリンタに加えて、ネットワーク接続されているリモートプリンタも含まれます。

Level
pPrinterEnum パラメータが指すデータ構造体のタイプを指定します。指定できる値は 1、2、4、5 です。これらの値は、それぞれ PRINTER_INFO_1PRINTER_INFO_2PRINTER_INFO_4PRINTER_INFO_5 の各データ構造体に対応しています。

 Windows 95:1、2、5 のいずれかを指定できます。

Windows NT/2000:1、2、4、5 のいずれかを指定できます。

pPrinterEnum
PRINTER_INFO_1PRINTER_INFO_2PRINTER_INFO_4PRINTER_INFO_5 いずれかの構造体からなる配列を格納するバッファへのポインタを指定します。この関数から制御が返ると、このバッファに、複数の構造体からなる 1 つの配列が格納されます。各構造体は、使用可能なプリンタオブジェクトに関するデータを表します。

Level パラメータが 1 の場合、この配列は複数の PRINTER_INFO_1 構造体を保持します。Level パラメータが 2 の場合、PRINTER_INFO_2 構造体を保持します。Level パラメータが 4 の場合、PRINTER_INFO_4 構造体を保持します。Level パラメータが 5 の場合、PRINTER_INFO_5 構造体を保持します。

このバッファは、複数のデータ構造体からなる配列と、構造体のメンバが指す文字列や他のデータを格納するために十分なサイズでなければなりません。バッファのサイズが小さすぎる場合、pcdNeeded パラメータは必要なバッファサイズを返します。

Windows 95:このバッファには、PRINTER_INFO_4 構造体を格納できません。他のタイプの構造体は格納できます。

cbBuf
pPrinterEnum パラメータが指すバッファのサイズをバイト数で指定します。
pcbNeeded
1 つの値へのポインタを指定します。関数が成功すると、コピーされたバイト数が格納されます。cbBuf パラメータが小さすぎる場合、必要なバイト数が格納されます。
pcReturned
1 つの値へのポインタを指定します。この関数から制御が返ると、pPrinterEnum パラメータが指す配列に格納された、PRINTER_INFO_1PRINTER_INFO_2PRINTER_INFO_4PRINTER_INFO_5 いずれかの構造体の数が格納されます。

戻り値

関数が成功すると、0 以外の値が返ります。

関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

EnumPrinters 関数が、PRINTER_ENUM_CONTAINER を保持する PRINTER_INFO_1 構造体を返した場合、プリンタオブジェクトの階層が存在することを示しています。アプリケーションは、PRINTER_INFO_1 構造体の pName メンバと同じ値を Name パラメータに指定して EnumPrinters 関数を再び呼び出すと、この階層を列挙できます。

EnumPrinters 関数は、セキュリティ情報を取得しません。pPrinterEnum パラメータの指す配列に PRINTER_INFO_2 構造体が返された場合、pSecurityDescriptor メンバは NULL に設定されています。

既定のプリンタ(通常使うプリンタ)に関する情報を取得するには、セクション名を表す文字列に "windows"、キー名を表す文字列に "device" を設定して 関数を呼び出してください。既定のプリンタの名前、プリンタの DRV ファイルの名前、プリンタの接続ポートからなる文字列が返ります。

Windows NT/2000PRINTER_INFO_4 構造体を使うと、ローカルコンピュータにインストールされているプリンタと同様に、ユーザーが接続を確立したリモート接続の名前を簡単かつ迅速に取得できます。Level パラメータに 4 を指定し、PRINTER_INFO_4 データ構造体を要求して EnumPrinters 関数を呼び出すと、この関数はレジストリへ指定の情報を問い合わせてすぐに制御を返します。これは、他のデータ構造体を要求した場合とは異なる挙動です。特に、Level パラメータで 2 を指定して PRINTER_INFO_2 データ構造体を要求した場合は、リモート接続ごとに OpenPrinter 関数を使うので、違いは大きくなります。たとえば、リモート接続がダウンして(失われて)いる場合や、リモートサーバーが存在しなくなっている場合、またはリモートプリンタサーバーが存在しなくなっている場合、Level パラメータに 2 を指定すると、EnumPrinter 関数は RPC がタイムアウトになるのを待たなければなりません。その後、OpenPrinter 関数の呼び出しの失敗が確定します。この動作には、多少の時間がかかります。一方、PRINTER_INFO_4 構造体を渡すと、アプリケーションは、最小限の必要な情報をそのまま取得できます。さらに詳しい情報を取得するには、Level パラメータに 2 を指定して EnumPrinters 関数を呼び出します。

Windows 95:ローカルプリンタとネットワークプリンタを迅速に列挙するには、PRINTER_INFO_5 構造体を使います。この構造体を使うと、EnumPrinters 関数はリモートコールを行う代わりに、レジストリへの問い合わせを行います。これは、上記のように Windows NT/2000 で PRINTER_INFO_4 構造体を使うのと似ています。

次の表は、Level パラメータに 1 を指定したときに、Flags パラメータのさまざまな値に対して EnumPrinters 関数が出力する値をまとめたものです。

Name パラメータ」の列には、Printer ProviderDomainMachine などの単語が表記されていますが、これらは実際のプリントプロバイダ名、ドメイン名、コンピュータ名に読み替えてください。たとえば、Print Provider の代わりに Windws NT のネットワークプロバイダである "Windows NT Remote Printers"、または Windows 95 のローカルプリントプロバイダである "Windows 95 Local Print Provider" を使うことがあります。実際のプリントプロバイダ名を取得するには、Name パラメータに NULL を指定して EnumPrinters 関数を呼び出します。

Flags パラメータName パラメータ結果
PRINTER_ENUM_LOCALName パラメータは無視されます。すべてのローカルプリンタ。

Windows 95:ネットワークプリンタも列挙します。これらのプリンタもローカルにインストールされているからです。

PRINTER_ENUM_NAME"Print Provider"すべてのドメイン名。
PRINTER_ENUM_NAMEWindows NT/2000:"Print Provider!Domain"コンピュータと同じドメイン内のすべてのプリンタとプリントサーバー。
PRINTER_ENUM_NAMEWindows NT/2000:"Print Provider!!\\Machine"\\Machine で共有されているすべてのプリンタ。
PRINTER_ENUM_NAMEWindows NT/2000:空の文字列("")

Windows 95:ローカルコンピュータ名、またはローカルプリントプロバイダ名。

すべてのローカルプリンタ。

Windows 95:ネットワークプリンタも列挙します。これらのプリンタもローカルにインストールされているからです。

PRINTER_ENUM_NAMENULLコンピュータと同じドメイン内のすべてのプリントプロバイダ。
Windows NT/2000:PRINTER_ENUM_CONNECTIONS Name パラメータは無視されます。接続されているすべてのリモートプリンタ。
Windows NT/2000:PRINTER_ENUM_NETWORK Name パラメータは無視されます。コンピュータと同じドメイン内のすべてのプリンタ。
Windows NT/2000:PRINTER_ENUM_REMOTE 空の文字列("")コンピュータと同じドメイン内のすべてのプリンタとプリントサーバー。
Windows NT/2000:PRINTER_ENUM_REMOTE "Print Provider"PRINTER_ENUM_NAME に同じ。
Windows NT/2000:PRINTER_ENUM_REMOTE "Print Provider!Domain"指定された Domain にかかわりなく、コンピュータと同じドメイン内のすべてのプリンタとプリントサーバー。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winspool.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Winspool.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

AddPrinter, DeletePrinter, GetPrinter, , , , , , SetPrinter

表示: