Win32 API 枚举打印机
主要是使用EnumPrinters函數;
#include <windows.h> #include <Winspool.h>int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {/* TODO: Place code here.*/DWORD dwNeeded, dwReturned ;PRINTER_INFO_4 * pinfo4 ;PRINTER_INFO_5 * pinfo5 ; if (GetVersion () & 0x80000000) // Windows 98{EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, NULL,0, &dwNeeded, &dwReturned) ;pinfo5 = malloc (dwNeeded) ;EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE) pinfo5,dwNeeded, &dwNeeded, &dwReturned) ;MessageBox(NULL,pinfo5->pPrinterName,"打印機枚舉",MB_OK);free (pinfo5) ;}else // Windows NT{EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, NULL,0, &dwNeeded, &dwReturned) ;pinfo4 = malloc (dwNeeded) ;EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pinfo4,dwNeeded, &dwNeeded, &dwReturned) ;MessageBox(NULL,pinfo4->pPrinterName,"打印機枚舉",MB_OK);free (pinfo4) ;}return 0; }構建;在CFree構建,不能連接,出現下列錯誤;
undefined reference to `EnumPrintersA@28'
在VC6構建,可以構建成功,但是運行程序,不會顯示任何內容;
可能此函數在當前操作系統已經失效;
EnumPrinters第一個參數:
PRINTER_ENUM_LOCAL 枚舉本地打印機
PRINTER_ENUM_NAME 枚舉由name參數指定的打印機。其中的名字可以是一個供應商、域或服務器。
PRINTER_ENUM_SHARE 枚舉共享打印機(必須同其他常數組合使用)
PRINTER_ENUM_CONNECTIONS 枚舉網絡連接列表中的打印機
PRINTER_ENUM_NETWORK 枚舉通過網絡連接的打印機。
PRINTER_ENUM_REMOTE 枚舉通過網絡連接的打印機和打印服務器。
?
dwNeeded, dwReturned:結構體需要的字節數,返回的字節數;
函數的調用方式:先調用一次EnumPrinters,獲得需要的字節數;然后用此字節數分配內存給pinfo5;然后再調用EnumPrinters,把返回結果放入pinfo5;
?
PRINTER_INFO_4 和?PRINTER_INFO_5 結構體,用于存放枚舉結果;兩個結構體用于不同的操作系統版本;其?pPrinterName 成員是打印機名字;
?
PRINTER_INFO_4 包含3個成員;
pPrinterName
Pointer to a null-terminated string that specifies the name of the printer (local or remote).
pServerName
Pointer to a null-terminated string that is the name of the server.
Attributes
Specifies information about the returned data.
?
PRINTER_INFO_5多了幾個成員;
typedef struct _PRINTER_INFO_5 {
? LPTSTR pPrinterName;
? LPTSTR pPortName;
? DWORD ?Attributes;
? DWORD ?DeviceNotSelectedTimeout;
? DWORD ?TransmissionRetryTimeout;
} PRINTER_INFO_5, *PPRINTER_INFO_5;
相關結構體和函數的微軟文檔鏈接在此;
https://docs.microsoft.com/en-us/windows/win32/printdocs/printer-info-5
?
總結
以上是生活随笔為你收集整理的Win32 API 枚举打印机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 协处理器学习总结
- 下一篇: Win32 API 获取其他程序剪贴板内