项目需要判断USB打印机状态,使用GetPrinter得到的打印机状态一直为0。观察操作系统打印机显示,点打印机属性后发现,离线状态的USB打印机硬件tab是空的,也就是说没有检查到打印机硬件信息。因此试想能不能通过硬件信息判断打印机离线状态。查找打印机在注册表中对应的信息,发现SYSTEM\CurrentControlSet\Control\Print\Printers下能看到USB打印机对应的设备InstanceID。于是考虑通过判断注册表对应打印机设备ID是否存在来判断USB打印机的离线状态,最终通过如下方式实现:

```boolean IsPrinterEnable (char * PrinterName)
{unsigned i;CONFIGRET status;HDEVINFO hDevInfo;SP_DEVINFO_DATA DeviceInfoData;char szDeviceInstanceID [MAX_DEVICE_ID_LEN];boolean rs=false;hDevInfo = SetupDiGetClassDevs (NULL, "USBPRINT", NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);if (hDevInfo == INVALID_HANDLE_VALUE)return true;for (i = 0; ; i++)  {DeviceInfoData.cbSize = sizeof (DeviceInfoData);if (!SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData))break;status = CM_Get_Device_ID(DeviceInfoData.DevInst, szDeviceInstanceID , MAX_PATH, 0);if (status != CR_SUCCESS)continue;printf ("InstanceID: \"%s\"\n", szDeviceInstanceID);//HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\HP LaserJet 1020\PnPDataHKEY hKey; DWORD dwDisposition = REG_OPENED_EXISTING_KEY; DWORD dwType=REG_SZ;char regpath[1024]={0};char printerInstanceID[1024]={0};sprintf_s(regpath,"SYSTEM\\CurrentControlSet\\Control\\Print\\Printers\\%s\\PnPData",PrinterName);LONG lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, regpath, NULL, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); if ( ERROR_SUCCESS != lRet) continue;DWORD nsize=1024;lRet=RegQueryValueEx(hKey, "DeviceInstanceId", NULL, &dwType, (LPBYTE)printerInstanceID, &nsize);RegCloseKey(hKey);if ( ERROR_SUCCESS != lRet) {printf ("read reg fail\n");continue;}if(_strcmpi(printerInstanceID,szDeviceInstanceID)==0) //usb printer存在{rs=true;break;}elsecontinue;}return rs;
}

判断USB打印机离线状态相关推荐

  1. vb.net 获取打印机工作状态,是否离线,打印机名称,端口号等打印机属性信息,windows 7下亲测可用

    这是vb.net 版本的,我测试了,没有问题,列出当前计算机系统中所有的打印机,列出其所有属性,网上好多人写的获取打印机状态的字段是不正确的,判断是否脱机或离线,应该选字段WorkOffline才对. ...

  2. Android之判断USB传输模式与USB连接状态

    1.监听UsbManager.ACTION_USB_STATE public class UsbManager {private static final String TAG = "Usb ...

  3. 计算机与打印机脱机后怎么共享,我电脑是共享打印机,现在状态显示脱机该怎么办...

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:我电脑是共享打印机,现在状态显示脱机该怎么办?打印机回答:打印器有问题了呗. 参考回答:潭陋纠跳授鳖 /朋友圈里面现在都在用这款.不 ...

  4. Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

    by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在 ...

  5. usb打印机命令_打印机脱机怎么办 打印机脱机解决方法【详解】

    打印机是目前各个 办公室 中较常见的一类办公设备,可以用来打印工作中各种需要的文件与资料.一般情况下,打印机在一天内要被使用好多次,因此出现脱机情况是在所难免的.那么下面这篇文章小编就给大家说说打印机 ...

  6. 刷breed 极路由3_路由器接入usb打印机制作无线打印机服务器

    0. 目标及读者 目标:将一台usb打印机接入路由器(优酷路由宝YK-L1)的usb口上,刷入老毛子固件后,提供无线打印服务器. 读者:有一定IT基础的人员. 1. 准备工作 1.1 硬件环境 PC或 ...

  7. linux判断usb进程命令,一种在Linux系统下审计USB设备历史使用情况的方法与流程...

    本发明涉及计算机审计技术领域,具体涉及一种在Linux系统下审计USB设备历史使用情况的方法. 背景技术: 如今,在linux系统中,对于USB设备的插入拔出事件,系统自身是不带有审计功能的,这使得普 ...

  8. 佳能c3320如何u盘打印_佳能打印机脱机无法打印怎么办 佳能打印机脱机状态如何解除【详解】...

    打印机 是我们日常生活中必不可少的一种办公用具,佳能打印机就是在市场上销售的比较好的品牌之一,在使用过程中难免会遇到打印机出现问题的时候,那么 佳能打印机脱机无法打印怎么处理 呢? 佳能打印机脱机状态 ...

  9. c 语言获取系统时间并打印机,C# 获取打印机当前状态的方法

    C# 获取打印机当前状态的方法 要获得打印机的状态,应该定义一个联合. 复制代码 代码如下: enum PrinterStatus { 其他状态= 1, 未知, 空闲, 正在打印, 预热, 停止打印, ...

  10. 成功将不支持网络的USB打印机变成网络打印机

    环境:公司 设备:一台不支持网络的USB打印机 HP LaserJet M1136 现状:打印机固定连接了一个电脑,这个电脑保持开机,通过网络共享的方式对外提供服务.打印机可以长期保持开启状态,并且不 ...

最新文章

  1. Bruck:一个Web界面布局原型设计框架\n
  2. npm安装bower时报错 我已解决
  3. IOS中UITableView异步加载图片的实现
  4. Spring 3整合Quartz 2实现定时任务--转
  5. TortoiseHg使用(hg mercurial repository management)
  6. storyboard搭建项目_swift项目第五天:swift中storyBoard Reference搭建主界面
  7. 搜狐视频怎么下载到电脑
  8. Tomcat在Linux上的安装
  9. uniapp image图片切换动效_谷歌设计团队发布了一款动效神器,让 UI 和动效无缝打通...
  10. 什么是AsHelper
  11. 在matlab中配置vlfeat,在MATLAB R2018b中配置VLFeat
  12. Python计算机视觉-仿射扭曲简单实例
  13. mysql拼图游戏代码_HTML+Javascript制作拼图小游戏详解(二)
  14. 龙妈苟活还是凉凉,预测算法哪家准?
  15. java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 2 milliseconds, 351400 nanosec
  16. 使用Google reCAPTCHA进行人机验证
  17. 打赢下一场游戏大战!PlayStation能满足玩家一切需求?
  18. 现代办公的新选择,讯飞智能录音笔SR302 Pro
  19. ZOJ 3380 Patchouli's Spell Cards
  20. 新版导航条stacknavigator

热门文章

  1. ctfshow 8神PNG隐写入门(土)赛 WP
  2. 无法打开包括文件: “SDKDDKVer.h”问题解决办法
  3. 频谱泄露、栅栏效应、补零实验
  4. php excel 下拉菜单,Yii2+phpexcel导出二级联动菜单
  5. PPT资源、技巧与设计网站精选【转自paratop】
  6. 控制工程基础学习笔记-第6章 控制系统的误差分析和计算
  7. 卷积码(Convolutional Code)
  8. WEB开发技术 知识点总结
  9. Themida/WinLicense V1.8.2.0 +脱壳 FOR PcShare远程控制会员版本20070826
  10. 机械制图之三棱锥的三视图