<Return[E]><Top>

EnumPrinters

Declare Function Api_EnumPrinters& Lib "winspool.drv" Alias "EnumPrintersA" (ByVal Flags&, ByVal Name$, ByVal Level&, pPrinterEnum As Any, ByVal cbBuf&, pcbNeeded&, pcReturned&)

Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long

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

パラメータ
Flags
    列挙したいプリントオブジェクトのタイプを指定する。次の値の任意の組み合わせを指定する。

    値                                                   

意味                                                                                                               

    PRINTER_ENUM_LOCAL

Name パラメータを無視し、ローカルにインストールされているプリンタを列挙する。

 

Windows 95:ネットワークプリンタも列挙する。

 

ローカルプリントプロバイダがこれらのプリンタを取り扱うためである。

    PRINTER_ENUM_NAME

Name パラメータで指定されたプリンタを列挙する。

 

この値は、サーバー、ドメイン、プリントプロバイダのいずれかを指定する。Name パラメータに

 

NULL を指定すると、使用可能なプリントプロバイダを列挙する。

    PRINTER_ENUM_SHARED

共有属性を備えているプリンタを列挙する。この値は、単独では使えない。OR 演算子を使って、

 

PRINTER_ENUM のほかのタイプと組み合わせる。

    PRINTER_ENUM_DEFAULT

Windows 95:既定のプリンタ(通常使うプリンタ)に関する情報を返する。

    PRINTER_ENUM_CONNECTIONS

Windows NT/2000:ユーザーが既に接続を確立しているプリンタのリストを列挙する。

    PRINTER_ENUM_NETWORK

Windows NT/2000:コンピュータと同じドメイン内のネットワークプリンタを列挙する。この値は、

 

Level パラメータが 1 のときに限って有効である。

    PRINTER_ENUM_REMOTE

Windows 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_4

    PRINTER_INFO_5 の各データ構造体に対応している。
    Windows 95:1、2、5 のいずれかを指定できる。
    Windows NT/2000:1、2、4、5 のいずれかを指定できる。
pPrinterEnum
    PRINTER_INFO_1、PRINTER_INFO_2、PRINTER_INFO_4、PRINTER_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_1、PRINTER_INFO_2、PRINTER_INFO_4、PRINTER_INFO_5 いずれかの構造体の数が格納される。
 

戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    EnumPrinters 関数が、PRINTER_ENUM_CONTAINER を保持する PRINTER_INFO_1 構造体を返した場合、プリンタオブジェクト

    の階層が存在することを示している。アプリケーションは、PRINTER_INFO_1 構造体の pName メンバと同じ値を Name パラメータに指定

    して EnumPrinters 関数を再び呼び出すと、この階層を列挙できる。
    EnumPrinters 関数は、セキュリティ情報を取得しない。pPrinterEnum パラメータの指す配列に PRINTER_INFO_2 構造体が返され

    た場合、pSecurityDescriptor メンバは NULL に設定されている。
    既定のプリンタ(通常使うプリンタ)に関する情報を取得するには、セクション名を表す文字列に "windows"、キー名を表す文字列

    に "device" を設定して GetProfileString 関数を呼び出す。既定のプリンタの名前、プリンタの DRV ファイルの名前、プリンタの接続ポート

    からなる文字列が返る。
    Windows NT/2000:PRINTER_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 構造体を使うのと似ている。