最近在写一个打印服务器的项目,需要获取本地打印机是否脱机的状态,上网查了一下,都是使用的下面的代码

 public static int GetPrinterStatusInt(string PrinterName){int intRet = 0;IntPtr hPrinter;PrintAPI.structPrinterDefaults defaults = new PrintAPI.structPrinterDefaults();if (PrintAPI.OpenPrinter(PrinterName, out hPrinter, ref defaults)){int cbNeeded = 0;bool bolRet = PrintAPI.GetPrinter(hPrinter, 2, IntPtr.Zero, 0, out cbNeeded);if (cbNeeded >= 0){IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded);bolRet = PrintAPI.GetPrinter(hPrinter, 2, pAddr, cbNeeded, out cbNeeded);if (bolRet){PrintAPI.PRINTER_INFO_2 info6 = new PrintAPI.PRINTER_INFO_2();info6 = (PrintAPI.PRINTER_INFO_2)Marshal.PtrToStructure(pAddr, typeof(PrintAPI.PRINTER_INFO_2));intRet = System.Convert.ToInt32(info6.Attributes);}Marshal.FreeHGlobal(pAddr);}PrintAPI.ClosePrinter(hPrinter);}return intRet;}

这里有一个误区,网上的都是说使用PRINTER_INFO_2的Status字段获取打印机的状态,但是我发现这个字段没有什么用处一直都是0,反正是获取不了什么状态,最后我又仔细看了一下PRINTER_INFO_2结构中的参数,发现了Attributes这个字段,然后我调试了一下发现只要是脱机的打印机都是返回0x0000440,然后我查了一下API文档发现这个属性的几个常量如下。

#define PRINTER_ATTRIBUTE_WORK_OFFLINE      0x00000400
#define PRINTER_ATTRIBUTE_ENABLE_BIDI       0x00000800
#define PRINTER_ATTRIBUTE_RAW_ONLY          0x00001000
#define PRINTER_ATTRIBUTE_PUBLISHED         0x00002000

到这里我们只需要判断
Attributes & PRINTER_ATTRIBUTE_WORK_OFFLINE
的结果是否大于0就知道是不是脱机了。

使用win32API获取打印机是否处于脱机状态相关推荐

  1. RICOH处于脱机状态 简单解决

    电脑屏幕右下方打印机图标如上显示 打印机处于[脱机]状态,即 没有联网 首先检查[水晶头]是否连接正常 重启打印机 如果不能解决,但是 [打印队列进程]还在[电脑端显示],那么当 打印机 之后处于 正 ...

  2. windows server上存储提示“由于管理员设置的策略,该磁盘处于脱机状态”

    "由于管理员设置的策略,该磁盘处于脱机状态" 解决方案: CMD中依次执行如下命令 1.DISKPART.exe2.DISKPART> san 3.DISKPART> ...

  3. 邮件服务器(eas)找不到服务器,Exchange ActiveSync 无法访问邮箱服务器上的邮箱,因为邮箱服务器处于脱机状态...

    上一次修改主题: 2015-03-08 Microsoft Operations Manager 的 Microsoft Exchange Server 2007 管理包可以监视运行 Exchange ...

  4. 此应用程序当前处于脱机状态

    此应用程序当前处于脱机状态 简介:此应用程序当前处于脱机状态.要启用该应用程序,请从应用程序根目录 删除 app_offline.htm 文件.如图: 解决方案:从应用程序根目录 删除 app_off ...

  5. 磁盘处于脱机状态解决办法

    由于管理员设置的策略,该磁盘处于脱机状态"解决办法 1.运行:cmd 2.输入:DISKPART.exe 3.DISKPART> san 4.DISKPART> san poli ...

  6. 计算机网络中常用设备处于脱机状态,你的设备处于脱机状态请使用上次的密码登录...

    设备修改器2.0v2.0.6 安卓版 类型:系统工具大小:1.6M语言:中文 评分:10.0 标签: 立即下载 电脑使用中用户操作不当等会碰到各种问题,有小伙伴打开电脑输入密码后提示你的设备处于脱机状 ...

  7. 计算机网络中常用设备处于脱机状态,win7 64位系统网络正常网页提示处于脱机状态的解决方法...

    据了解,win7系统用户平时使用电脑过程中花费时间最多是浏览网页.在浏览网页时有时候会时不时的弹出脱机提示:请求的网页在脱机状态下无法使用.要查看该页请单击"连接".可是我们的网络 ...

  8. windows2008R2新增磁盘处于脱机状态解决办法

    windows2008R2新增磁盘处于脱机状态解决办法 cmd命令行: diskpart工具: diskpart list disk select disk 1 online disk attribu ...

  9. 计算机管理 硬盘 设置脱机,win10系统提示磁盘处于脱机状态的设置教程

    win10系统使用久了,好多网友反馈说win10系统提示磁盘处于脱机状态的问题,非常不方便.有什么办法可以永久解决win10系统提示磁盘处于脱机状态的问题,面对win10系统提示磁盘处于脱机状态的图文 ...

最新文章

  1. [Django 3.2.8] SimpleUI的分页问题
  2. CAD公差表以及如何算
  3. MySQL学习笔记7:基本查询
  4. DEDECMS全版本gotopage变量XSS ROOTKIT 0DAY
  5. java 轻量数据库_DBTree是一个springboot2 + vue-element-template实现的轻量数据库表结构查看及管理工具...
  6. 信息系统项目管理收尾
  7. 对网页渲染的初步认识
  8. 扣丁三国 - 技术支持
  9. 用python解决搬砖问题_如何像要饭一般”用“python (一)(非编程类工作/科研搬砖工)...
  10. 嵌入式开发中常用的软件设计模式
  11. Cisco交换机配置VTP
  12. 1U - 4.445厘米
  13. java 绝对路径双斜线_路径分隔符:正斜线/、反斜线\、双反斜线\\的区别
  14. 分享个碧蓝航线脚本,自律捞船神器
  15. unity3d Daikon GUI 图片查看器 Demo 说明
  16. 微星GE62 NVIDIA960m 双系统ubuntu16.04 配置caffe-ssd
  17. MODBUS通讯协议和RS232以及RS485通讯协议有什么区别
  18. Zetore Jasminum插件 报错:文件名识别出错,请检查文件名识别模板与实际抓取文件名
  19. PMP项目管理证书有用么?什么人可以考呢?
  20. OceanBase Developer Center

热门文章

  1. Vue - 网站首屏加载等待动画(极简解决方案)
  2. Rust更适合经验较少的程序员?
  3. Spring Cloud 如何统一异常处理?写得太好了!
  4. MJUPC-022_编程挑战系列赛第二十二场(以梦为“码“ “数“说未来)题解(C/C++代码)
  5. DBeaver改成英语
  6. /给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[
  7. 假期培训日记(数论)
  8. Revisiting Pixel-Wise Supervision for Face Anti-Spoofing
  9. 递归回溯法求数独全部解
  10. COleDateTime SYSTEMTIME CTime