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 |
|||||||||||||||||||||||||||||||
利用可能なプリンタ、プリントサーバー、ドメイン、プリントプロバイダを列挙する。 |
|||||||||||||||||||||||||||||||
パラメータ
Level パラメータが 4 の場合、PRINTER_ENUM_CONNECTIONS 値と
PRINTER_ENUM_LOCAL 値のみを使える。 Name パラメータは、列挙したいオブジェクトの名前を表す、NULL で終わる文字列へのポインタを指定する。
この文字列は、サーバー名、ドメイン名、プリントプロバイダ名のいずれかになる。
この関数は使用可能なプリントプロバイダを列挙する。
この関数は、ユーザーと同じドメイン内のプリンタを列挙する。
指定する。この文字列が NULL の場合、この関数は、ローカルコンピュータにインストールされているプリンタを列挙する。
合わせを行いる。
ローカルコンピュータに接続されているプリンタに加えて、ネットワーク接続されているリモートプリンタも含まれます。 指定できる値は 1、2、4、5 である。これらの値は、それぞれ PRINTER_INFO_1、PRINTER_INFO_2、PRINTER_INFO_4、
PRINTER_INFO_5 の各データ構造体に対応している。 バッファへのポインタを指定する。この関数から制御が返ると、このバッファに、複数の構造体からなる 1 つの配列が格納される。
各構造体は、使用可能なプリンタオブジェクトに関するデータを表する。 PRINTER_INFO_2 構造体を保持する。Level パラメータが 4 の場合、PRINTER_INFO_4 構造体を保持する。Level パラメータが
5 の場合、PRINTER_INFO_5 構造体を保持する。
ばならない。バッファのサイズが小さすぎる場合、pcdNeeded パラメータは必要なバッファサイズを返する。
cbBuf パラメータが小さすぎる場合、必要なバイト数が格納される。
PRINTER_INFO_1、PRINTER_INFO_2、PRINTER_INFO_4、PRINTER_INFO_5
いずれかの構造体の数が格納される。
戻り値 の階層が存在することを示している。アプリケーションは、PRINTER_INFO_1 構造体の pName メンバと同じ値を Name パラメータに指定
して EnumPrinters 関数を再び呼び出すと、この階層を列挙できる。
た場合、pSecurityDescriptor メンバは NULL に設定されている。 に "device" を設定して GetProfileString 関数を呼び出す。既定のプリンタの名前、プリンタの DRV ファイルの名前、プリンタの接続ポート
からなる文字列が返る。 続を確立したリモート接続の名前を簡単かつ迅速に取得できる。Level パラメータに 4 を指定し、PRINTER_INFO_4 データ構造体を要求 して EnumPrinters 関数を呼び出すと、この関数はレジストリへ指定の情報を問い合わせてすぐに制御を返する。これは、他のデータ構造 体を要求した場合とは異なる挙動である。特に、Level パラメータで 2 を指定して PRINTER_INFO_2 データ構造体を要求した場合は、リ モート接続ごとに OpenPrinter 関数を使うので、違いは大きくなります。たとえば、リモート接続がダウンして(失われて)いる場合や、リ モートサーバーが存在しなくなっている場合、またはリモートプリンタサーバーが存在しなくなっている場合、Level パラメータに 2 を指定する と、EnumPrinter 関数は RPC がタイムアウトになるのを待たなければならない。その後、OpenPrinter 関数の呼び出しの失敗が確定 する。この動作には、多少の時間がかかります。一方、PRINTER_INFO_4 構造体を渡すと、アプリケーションは、最小限の必要な情
報をそのまま取得できる。さらに詳しい情報を取得するには、Level パラメータに 2 を指定して EnumPrinters 関数を呼び出する。 EnumPrinters 関数はリモートコールを行う代わりに、レジストリへの問い合わせを行う。これは、上記のように Windows NT/2000 で PRINTER_INFO_4 構造体を使うのと似ている。 |