EnumPrinters 関数

EnumPrinters 関数は、使用可能なプリンター、プリント サーバー、ドメイン、または印刷プロバイダーを列挙します。

構文

BOOL EnumPrinters(
  _In_  DWORD   Flags,
  _In_  LPTSTR  Name,
  _In_  DWORD   Level,
  _Out_ LPBYTE  pPrinterEnum,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcbNeeded,
  _Out_ LPDWORD pcReturned
);

パラメーター

Flags [in]

関数が列挙する必要がある印刷オブジェクトの型。 この値には、次の値のうち 1 つ以上を指定できます。

説明
PRINTER_ENUM_LOCAL
PRINTER_ENUM_NAME フラグも渡されない場合、関数は Name パラメーターを無視し、ローカルにインストールされているプリンターを列挙します。 PRINTER_ENUM_NAMEも渡された場合、関数は Name でローカル プリンターを列挙 します
PRINTER_ENUM_NAME
関数は 、Name で識別されるプリンターを列挙します。 サーバー、ドメイン、または印刷プロバイダーを指定できます。 NameNULL の場合、関数は使用可能な印刷プロバイダーを列挙します。
PRINTER_ENUM_SHARED
関数は、共有属性を持つプリンターを列挙します。 単独では使用できません。OR 操作を使用して、別のPRINTER_ENUM型と組み合わせます。
PRINTER_ENUM_CONNECTIONS
関数は、ユーザーが以前に接続したプリンターの一覧を列挙します。
PRINTER_ENUM_NETWORK
関数は、コンピューターのドメイン内のネットワーク プリンターを列挙します。 この値は、 Level が 1 の場合にのみ有効です。
PRINTER_ENUM_REMOTE
関数は、コンピューターのドメイン内のネットワーク プリンターとプリント サーバーを列挙します。 この値は、 Level が 1 の場合にのみ有効です。
PRINTER_ENUM_CATEGORY_3D
関数は、3D プリンターのみを列挙します。
PRINTER_ENUM_CATEGORY_ALL
関数は、3D プリンターを含むすべての印刷デバイスを列挙します。

Level が 4 の場合は、PRINTER_ENUM_CONNECTIONS定数とPRINTER_ENUM_LOCAL定数のみを使用できます。

注意

既定では、3D 印刷デバイスは列挙されません。 3D プリンターのみを列挙するには、 PRINTER_ENUM_CATEGORY_3DPRINTER_ENUM_LOCAL の両方を含める必要があります。 3D プリンターを他のすべてのローカル プリンターと共に含めるには、 PRINTER_ENUM_CATEGORY_ALLPRINTER_ENUM_LOCALを使用します。

Name [in]

Level が 1 の場合、Flags には PRINTER_ENUM_NAMEが含まれており、NameNULL 以外の場合、Name は列挙するオブジェクトの名前を指定する null で終わる文字列へのポインターです。 この文字列には、サーバー、ドメイン、または印刷プロバイダーの名前を指定できます。

Level が 1 の場合、Flags にはPRINTER_ENUM_NAMEが含まれており、NameNULL の場合、関数は使用可能な印刷プロバイダーを列挙します。

Level が 1 の場合、Flags にはPRINTER_ENUM_REMOTEが含まれており、NameNULL の場合、関数はユーザーのドメイン内のプリンターを列挙します。

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

Level が 4 の場合、NameNULL である必要があります。 関数は常にローカル コンピューターでクエリを実行します。

NameNULL の場合、Flags を PRINTER_ENUM_LOCAL に設定する |PRINTER_ENUM_CONNECTIONSは、ローカル コンピューターにインストールされているプリンターを列挙します。 これらのプリンターには、ローカル コンピューターに物理的に接続されているプリンターと、ネットワーク接続があるリモート プリンターが含まれます。

NameNULL でない場合は、Flags を PRINTER_ENUM_LOCAL に設定します。 |PRINTER_ENUM_NAMEサーバー名にインストールされているローカル プリンターを列挙します

レベル [入力]

pPrinterEnum が指すデータ構造の型。 有効な値は 1、2、4、および 5 で、 PRINTER_INFO_1PRINTER_INFO_2PRINTER_INFO_4およびPRINTER_INFO_5 データ構造に対応します。

この値には、1、2、4、または 5 を指定できます。

pPrinterEnum [out]

PRINTER_INFO_1、PRINTER_INFO_2、PRINTER_INFO_4、またはPRINTER_INFO_5構造体の配列受け取るバッファーへのポインター。 各構造体には、使用可能な印刷オブジェクトを記述するデータが含まれています。

Level が 1 の場合、配列にはPRINTER_INFO_1構造体が含まれます。 Level が 2 の場合、配列にはPRINTER_INFO_2構造体が含まれます。 Level が 4 の場合、配列にはPRINTER_INFO_4構造体が含まれます。 Level が 5 の場合、配列にはPRINTER_INFO_5構造体が含まれます。

バッファーは、データ構造の配列と、構造体メンバーが指す文字列またはその他のデータを受け取るのに十分な大きさである必要があります。 バッファーが小さすぎる場合、 pcbNeeded パラメーターは必要なバッファー サイズを返します。

cbBuf [in]

pPrinterEnum が指すバッファーのサイズ (バイト単位)。

pcbNeeded [out]

関数が成功した場合にコピーされたバイト数を受け取る値へのポインター、または cbBuf が小さすぎる場合に必要なバイト数。

pcReturned [out]

pPrinterEnum が指す配列で関数が返すPRINTER_INFO_1PRINTER_INFO_2PRINTER_INFO_4、またはPRINTER_INFO_5構造体の数を受け取る値へのポインター。

戻り値

関数が成功した場合、戻り値は 0 以外の値になります。

関数が失敗した場合は、0 を返します。

解説

DllMain では、このメソッドを呼び出さないでください。

注意

これはブロック関数または同期関数であり、すぐには返されない場合があります。 この関数が返す速度は、アプリケーションの作成時に予測が困難なネットワーク状態、プリント サーバーの構成、プリンター ドライバーの実装要因などの実行時の要因によって異なります。 ユーザー インターフェイスとの対話を管理するスレッドからこの関数を呼び出すと、アプリケーションが応答しなくなる可能性があります。

EnumPrinters、PRINTER_ENUM_CONTAINERが指定されたPRINTER_INFO_1構造体を返す場合、プリンター オブジェクトの階層があることを示します。 アプリケーションは 、EnumPrinters をもう一度呼び出し、 NamePRINTER_INFO_1 構造体の pName メンバーの値に設定することで、階層を列挙できます。

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

既定のプリンターに関する情報を取得するには、 GetDefaultPrinter を呼び出します。

PRINTER_INFO_4構造を使用すると、ローカル コンピューターにインストールされているプリンターの名前と、ユーザーが確立したリモート接続を簡単かつ高速に取得できます。 EnumPrintersPRINTER_INFO_4データ構造で呼び出されると、その関数は指定された情報についてレジストリに対してクエリを実行し、すぐにを返します。 これは、他のレベルのPRINTER_INFO_* データ構造で呼び出された場合の EnumPrinters の動作とは異なります。 特に、 EnumPrinters がレベル 2 (PRINTER_INFO_2) データ構造で呼び出されると、各リモート接続で OpenPrinter 呼び出しが実行されます。 リモート接続がダウンしている場合、またはリモート サーバーが存在しない場合、またはリモート プリンターが存在しない場合、関数は RPC がタイムアウトするのを待機し、 OpenPrinter 呼び出しに失敗する必要があります。 これには、しばらく時間がかかる場合があります。 PRINTER_INFO_4構造体を渡すと、アプリケーションは最低限必要な情報を取得できます。より詳細な情報が必要な場合は、後続の EnumPrinters レベル 2 呼び出しを行うことができます。

Windows Vista:EnumPrinters によって返されるプリンター データは、Level の値が 4 の場合にローカル キャッシュから取得されます。

次の表は、Level パラメーターが 1 に設定されている場合の、さまざまな Flags 値の EnumPrinters 出力を示しています。

テーブルの Name パラメーター列で、印刷プロバイダー、ドメイン、およびコンピューターに適切な名前を置き換える必要があります。 たとえば、"印刷プロバイダー" の場合は、ネットワーク印刷プロバイダーの名前またはローカル印刷プロバイダーの名前を使用できます。 印刷プロバイダー名を取得するには、名前が NULL に設定された EnumPrinters呼び出します。

Flags パラメーター Name パラメーター 結果
PRINTER_ENUM_LOCAL (PRINTER_ENUM_NAMEではなく) Name パラメーターは無視されます。
すべてのローカル プリンター。
PRINTER_ENUM_NAME "印刷プロバイダー"
すべてのドメイン名
PRINTER_ENUM_NAME "印刷プロバイダー!ドメイン"
コンピューターのドメイン内のすべてのプリンターとプリント サーバー
PRINTER_ENUM_NAME "印刷プロバイダー!!\\Machine"
\\Machine で共有されているすべてのプリンター
PRINTER_ENUM_NAME 空の文字列 ""
すべてのローカル プリンター。
PRINTER_ENUM_NAME NULL
コンピューターのドメイン内のすべての印刷プロバイダー
PRINTER_ENUM_CONNECTIONS Name パラメーターは無視されます。
接続されているすべてのリモート プリンター
PRINTER_ENUM_NETWORK Name パラメーターは無視されます。
コンピューターのドメイン内のすべてのプリンター
PRINTER_ENUM_REMOTE 空の文字列 ""
コンピューターのドメイン内のすべてのプリンターとプリント サーバー
PRINTER_ENUM_REMOTE "印刷プロバイダー"
PRINTER_ENUM_NAMEと同じ
PRINTER_ENUM_REMOTE "印刷プロバイダー!ドメイン"
指定されたドメインに関係なく、コンピューターのドメイン内のすべてのプリンターとプリント サーバー。
PRINTER_ENUM_CATEGORY_3D Name パラメーターは無視されます。
3D プリンターのみが列挙されます。
PRINTER_ENUM_CATEGORY_ALL Name パラメーターは無視されます。
3D プリンターは、他のすべてのプリンターと共に列挙されます。

必要条件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Winspool.h (Windows.h を含む)
ライブラリ
Winspool.lib
[DLL]
Winspool.drv
Unicode 名と ANSI 名
EnumPrintersW (Unicode) と EnumPrintersA (ANSI)

関連項目

印刷

印刷スプーラー API 関数

AddPrinter

DeletePrinter

GetPrinter

PRINTER_INFO_1

PRINTER_INFO_2

PRINTER_INFO_4

PRINTER_INFO_5

SetPrinter