Win32API プリンタ情報を取得する
プリンタ情報を取得するためには、GetPrinter関数を用いる。
GetPrinter関数でプリンタ情報を取得するためには、以下の3つの手順が必要となる
また、OpenPrinter関数、GetPrinter関数、ClosePrinter関数を使用するためには、「winspool.h」をインクルードし、「winspool.lib」をリンクする必要がある。
GetPrinter関数のプロトタイプは、以下のようになっている
BOOL GetPrinter( HANDLE hPrinter, // 調査対象のプリンタを識別するハンドル DWORD Level, // プリンタ情報データ構造体のバージョン LPBYTE pPrinter, // プリンタ情報構造体を受け取るバイト配列へのポインタ DWORD cbBuf, // pPrinter が指すバッファのサイズ (バイト数) LPDWORD pcbNeeded // 取得した (必要な) バイト数を受け取る変数へのポインタ );
第二引数のLevelは、プリンタ情報データ構造体のバージョンであり、「winspool.h」にPRINTER_INFO_1からPRINTER_INFO_7の7つのバージョン(Visual Studio 2005の場合)がある。また、各バージョンの構造体には、ANSIバージョンとUNICODEバージョンがある。
第三引数のpPrinterには、第二引数で指定した構造体のバージョンに対するプリンタ情報構造体へのポインタを指定する。例えば、Levelに「1」を指定した場合は、pPrinterには「PRINTER_INFO_1構造体」へのポインタを指定することになる。
例として、PRINTER_INFO_1W構造体の定義をwinspool.hより抜粋する
typedef struct _PRINTER_INFO_1W { DWORD Flags; LPWSTR pDescription; LPWSTR pName; LPWSTR pComment; } PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
ここでは、Windows Vista上で「Microsoft XPS Document Writer」の情報をPRINTER_INFO1構造体に取得している。
#include <windows.h> #include <stdio.h> #include <winspool.h> #pragma comment(lib, "winspool.lib") int main() { HANDLE hPrinter; LPBYTE pPrinter; DWORD dwNeeded; PRINTER_INFO_1W *pInfo; if (!OpenPrinter(TEXT("Microsoft XPS Document Writer"), &hPrinter, NULL)) { return 1; } GetPrinter(hPrinter, 1, NULL, 0, &dwNeeded); pPrinter = (LPBYTE)LocalAlloc(LPTR, dwNeeded); if (pPrinter == NULL) { ClosePrinter(hPrinter); return 1; } GetPrinter(hPrinter, 1, pPrinter, dwNeeded, &dwNeeded); pInfo = (PRINTER_INFO_1W *)pPrinter; wprintf(L"Name: %s\n", pInfo->pName); wprintf(L"Description: %s\n", pInfo->pDescription); wprintf(L"Comment: %s\n", pInfo->pComment); ClosePrinter(hPrinter); LocalFree(pPrinter); return 0; }
Name: Microsoft XPS Document Writer Description: Microsoft XPS Document Writer,Microsoft XPS Document Writer, Comment:
参考
http://msdn.microsoft.com/ja-jp/library/cc410486.aspx OpenPrinter
http://msdn.microsoft.com/ja-jp/library/cc410413.aspx GetPrinter
http://msdn.microsoft.com/ja-jp/library/cc428316.aspx ClosePrinter
http://msdn.microsoft.com/en-us/library/dd162844.aspx PRINTER_INFO_1