日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Win32 API 枚举打印机

發布時間:2025/4/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 枚举打印机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。