VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1520|回复: 2

如何 枚举网络中所有的打印机

[复制链接]
50_avatar_middle
最佳答案
0 
在线会员 发表于 2014-2-24 18:12:53 | 显示全部楼层 |阅读模式
本帖最后由 wxliang 于 2014-2-24 18:46 编辑

家里有两台电脑,一台是台式机,一台是笔记本,台式机(IP:192.168.1.12)上接着一台激光打印机,我把这台打印机共享在网络中。笔记本上可以添加网络打印机,且能打印。
   我把笔记本上的共享打印删除,想用程序来实现这步,可怎么也枚举不出来台式机上的打印机
代码如下:

  1. DWORD dwNeeded, dwReturn;
  2.     BOOL bl = ::EnumPrinters( PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS,NULL,4, NULL, 0,&dwNeeded, &dwReturn);

  3.     PRINTER_INFO_4* p5;
  4.     p5 = (PRINTER_INFO_4*)malloc(dwNeeded);
  5.     ::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL,4, (PBYTE)p5,dwNeeded,&dwNeeded,&dwReturn);
  6.     for(int i=0;i<dwNeeded;i++)
  7.     {
  8.         AfxMessageBox(p5[i].pPrinterName);
  9.     }
复制代码


我的目标是,枚举整个局域网内,所有的打印机,结果,一个都枚举不出来,请高人指点

如果用PRINTER_ENUM_NETWORK,依然,没有反应
  1. DWORD dwSize,dwPrinters;   
  2.         ::EnumPrinters(PRINTER_ENUM_NETWORK,NULL,1,NULL,0,&dwSize,&dwPrinters);   
  3.         BYTE *pBuffer=new BYTE[dwSize];   
  4.         ::EnumPrinters(PRINTER_ENUM_NETWORK,NULL,1,pBuffer,dwSize,&dwSize,&dwPrinters);   
  5.   
  6.         CString sPrinter;  
  7.         if(dwPrinters!=0)   
  8.         {   
  9.                 PRINTER_INFO_1 *pPrnInfo=(PRINTER_INFO_1 *)pBuffer;   
  10.                 for(int i=0;i <dwPrinters;i++)   
  11.                 {   
  12.                 //        sPrinter.Format(_T("%s"),pPrnInfo-> pPrinterName);  
  13.                         sPrinter.Format(_T("%s,%s"),pPrnInfo->pName,pPrnInfo->pComment);  
  14.                         AfxMessageBox(sPrinter);
  15.                         pPrnInfo++;//指针后移   
  16.                 }   
  17.         }   
  18.         delete []pBuffer;
复制代码




上一篇:调用自建lib函数出错,小菜求解
下一篇:网络编程入门看什么书好
51_avatar_middle
最佳答案
79 
online_admins 发表于 2014-2-24 18:19:29 | 显示全部楼层
这个建议参考下 MSDN 网站,关于 EnumPrinters API 函数的解释说明:

BOOL EnumPrinters(
  _In_   DWORD Flags,
  _In_   LPTSTR Name,
  _In_   DWORD Level,
  _Out_  LPBYTE pPrinterEnum,
  _In_   DWORD cbBuf,
  _Out_  LPDWORD pcbNeeded,
  _Out_  LPDWORD pcReturned
);

http://msdn.microsoft.com/en-us/ ... 62692(v=vs.85).aspx

如果枚举网络打印机的话,在第一个参数的 Flags 处是否应该添加 PRINTER_ENUM_NETWORK 标志位,如果添加了这个标志位,那么 Level 参数是否应该传递 1 呢?

楼主具体参考下 MSDN 就知道了!
51_avatar_middle
最佳答案
79 
online_admins 发表于 2014-2-24 19:22:01 | 显示全部楼层
如果还不行的话,判断下 EnumPrinters  函数的返回值,看看该函数调用是否成功,看看错误码是多少?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-8-3 17:20

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表