Win32API プリンタの構成要素を列挙する EnumPrinterData
プリンタの構成要素を列挙するためには、EnumePrinterData関数を用いる。
DWORD EnumPrinterData( HANDLE hPrinter, // 操作対象のプリンタを識別するハンドル DWORD dwIndex, // 取得する値のインデックス LPTSTR pValueName, // 値の名前を受け取るバッファへのポインタ DWORD cbValueName, // 値の名前を受け取るバッファのサイズ (バイト数) LPDWORD pcbValueName, // バッファ pValueName に格納された名前のバイト数を // 受け取る変数へのポインタ LPDWORD pType, // 値のタイプコードを受け取る変数へのポインタ LPBYTE pData, // 値のデータを受け取るバッファへのポインタ DWORD cbData, // 値のデータを受け取るバッファのサイズ (バイト数) LPDWORD pcbData // バッファ pData に格納されたデータのバイト数を // 受け取る変数へのポインタ );
#include <windows.h> #include <stdio.h> #include <winspool.h> #pragma comment(lib, "winspool.lib") int main() { HANDLE hPrinter; DWORD i; DWORD dwRet; LPTSTR pValueName; DWORD dwMaxValueNameSize; DWORD dwType; DWORD dwMaxDataSize; LPBYTE lpData; DWORD dwValueNameSize; DWORD dwDataSize; if (OpenPrinter(TEXT("Microsoft XPS Document Writer"), &hPrinter, NULL) == FALSE) { puts("OpenPrinter failed"); return 1; } i = 0; dwRet = EnumPrinterData(hPrinter, i, NULL, 0, &dwMaxValueNameSize, &dwType, NULL, 0, &dwMaxDataSize); pValueName = (LPTSTR)LocalAlloc(LPTR, dwMaxValueNameSize); if (pValueName == NULL) { goto EXIT_FUNC; } lpData = (LPBYTE)LocalAlloc(LPTR, dwMaxDataSize); if (lpData == NULL) { goto EXIT_FUNC; } while (true) { dwValueNameSize = dwMaxValueNameSize; dwDataSize = dwMaxDataSize; dwRet = EnumPrinterData(hPrinter, i++, pValueName, dwValueNameSize, &dwValueNameSize, &dwType, (LPBYTE)lpData, dwDataSize, &dwDataSize); if (dwRet == ERROR_NO_MORE_ITEMS || dwRet != ERROR_SUCCESS) { break; } switch (dwType) { case REG_SZ: wprintf(L"REG_SZ - ValueName: %s, Data: %s\n", pValueName, lpData); break; case REG_DWORD: DWORD n; memcpy(&n, lpData, sizeof(n)); wprintf(L"REG_DWORD - ValueName: %s, Data: %u\n", pValueName, n); break; case REG_MULTI_SZ: wprintf(L"REG_MULTI_SZ - ValueName: %s\n", pValueName); break; case REG_BINARY: wprintf(L"REG_BINARY - ValueName: %s\n", pValueName); break; case REG_DWORD_BIG_ENDIAN: wprintf(L"REG_DWORD_BIG_ENDIAN - ValueName: %s\n", pValueName); break; case REG_EXPAND_SZ: wprintf(L"REG_EXPAND_SZ - ValueName: %s\n", pValueName); break; case REG_LINK: wprintf(L"REG_LINK - ValueName: %s\n", pValueName); break; case REG_NONE: wprintf(L"REG_NONE - ValueName: %s\n", pValueName); break; case REG_RESOURCE_LIST: wprintf(L"REG_RESOURCE_LIST - ValueName: %s\n", pValueName); break; default: wprintf(L"Default: %s\n", pValueName); break; } } EXIT_FUNC: LocalFree(pValueName); LocalFree(lpData); ClosePrinter(hPrinter); return 0; }
REG_DWORD - ValueName: InitDriverVersion, Data: 1536 REG_SZ - ValueName: Model, Data: Microsoft XPS Document Writer REG_DWORD - ValueName: PrinterDataSize, Data: 560 REG_BINARY - ValueName: PrinterData REG_DWORD - ValueName: FeatureKeywordSize, Data: 2 REG_BINARY - ValueName: FeatureKeyword REG_DWORD - ValueName: Forms?, Data: 1928778442
REG_DWORD - ValueName: InitDriverVersion, Data: 1536 REG_DWORD - ValueName: FreeMem, Data: 4096 REG_DWORD - ValueName: JobTimeOut, Data: 600 REG_DWORD - ValueName: Protocol, Data: 0 REG_DWORD - ValueName: PrinterDataSize, Data: 560 REG_BINARY - ValueName: PrinterData REG_DWORD - ValueName: FeatureKeywordSize, Data: 24 REG_BINARY - ValueName: FeatureKeyword REG_DWORD - ValueName: Forms?, Data: 582377160 REG_MULTI_SZ - ValueName: DependentFiles REG_BINARY - ValueName: HostFontExceptFonts REG_BINARY - ValueName: HostFontExceptCIDFonts REG_DWORD - ValueName: DistillerHostFontHasMostFonts, Data: 1 REG_DWORD - ValueName: ViewPrintOutput, Data: 1 REG_DWORD - ValueName: PromptForFileName, Data: 1 REG_DWORD - ValueName: DeleteLogFiles, Data: 1 REG_DWORD - ValueName: AddDocInfo, Data: 1 REG_DWORD - ValueName: AskToReplacePDF, Data: 0