您的位置:首页 > 理论基础 > 计算机网络

spooler API研究——获取所有本地和网络打印机

2016-12-13 13:36 701 查看
直接上代码:

需包含头文件

#include "Windows.h"
#include <WinSpool.h>    
#pragma comment(lib, "Winspool.lib")  

int findPrint()
{

DWORD i ;
DWORD dwSize;
DWORD dwPrinters;
LPHANDLE  phPrinter;
DWORD  dwFlags = PRINTER_ENUM_CONNECTIONS | PRINTER_ENUM_LOCAL  ;

//获取数据长度等信息
EnumPrinters (dwFlags, NULL, 5, NULL, 0, &dwSize,
&dwPrinters);

if (!(pPrinters = (LPPRINTER_INFO_5) LocalAlloc (LPTR, dwSize + 4)))
{//申请存储内存

printf("EnumPrinters:%d\n",GetLastError());

return -1;

}

if (!EnumPrinters (dwFlags, NULL, 5, (LPBYTE) pPrinters,
dwSize, &dwSize, &dwPrinters))
{//枚举所有当地和远程打印机

printf("EnumPrinters:%d\n",GetLastError());

return -1;

}

printf("total prints = %d\n",dwPrinters);

bool blFound = false;

for (i = 0; i < dwPrinters; i++)
{//输出打印机名称
printf("Find Printer #[%d/%d]: %s\n",
i+1,
dwPrinters,
pPrinters->pPrinterName);

if(strstr(pPrinters->pPrinterName,"HP"))
{//根据打印机名称获取指定打印机,比如打印机名称含HP

blFound = true;

break;

}

pPrinters++;
}

return blFound ? 0 : -1 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息