使用win32API获取打印机是否处于脱机状态
最近在写一个打印服务器的项目,需要获取本地打印机是否脱机的状态,上网查了一下,都是使用的下面的代码
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获取打印机是否处于脱机状态相关推荐
- RICOH处于脱机状态 简单解决
电脑屏幕右下方打印机图标如上显示 打印机处于[脱机]状态,即 没有联网 首先检查[水晶头]是否连接正常 重启打印机 如果不能解决,但是 [打印队列进程]还在[电脑端显示],那么当 打印机 之后处于 正 ...
- windows server上存储提示“由于管理员设置的策略,该磁盘处于脱机状态”
"由于管理员设置的策略,该磁盘处于脱机状态" 解决方案: CMD中依次执行如下命令 1.DISKPART.exe2.DISKPART> san 3.DISKPART> ...
- 邮件服务器(eas)找不到服务器,Exchange ActiveSync 无法访问邮箱服务器上的邮箱,因为邮箱服务器处于脱机状态...
上一次修改主题: 2015-03-08 Microsoft Operations Manager 的 Microsoft Exchange Server 2007 管理包可以监视运行 Exchange ...
- 此应用程序当前处于脱机状态
此应用程序当前处于脱机状态 简介:此应用程序当前处于脱机状态.要启用该应用程序,请从应用程序根目录 删除 app_offline.htm 文件.如图: 解决方案:从应用程序根目录 删除 app_off ...
- 磁盘处于脱机状态解决办法
由于管理员设置的策略,该磁盘处于脱机状态"解决办法 1.运行:cmd 2.输入:DISKPART.exe 3.DISKPART> san 4.DISKPART> san poli ...
- 计算机网络中常用设备处于脱机状态,你的设备处于脱机状态请使用上次的密码登录...
设备修改器2.0v2.0.6 安卓版 类型:系统工具大小:1.6M语言:中文 评分:10.0 标签: 立即下载 电脑使用中用户操作不当等会碰到各种问题,有小伙伴打开电脑输入密码后提示你的设备处于脱机状 ...
- 计算机网络中常用设备处于脱机状态,win7 64位系统网络正常网页提示处于脱机状态的解决方法...
据了解,win7系统用户平时使用电脑过程中花费时间最多是浏览网页.在浏览网页时有时候会时不时的弹出脱机提示:请求的网页在脱机状态下无法使用.要查看该页请单击"连接".可是我们的网络 ...
- windows2008R2新增磁盘处于脱机状态解决办法
windows2008R2新增磁盘处于脱机状态解决办法 cmd命令行: diskpart工具: diskpart list disk select disk 1 online disk attribu ...
- 计算机管理 硬盘 设置脱机,win10系统提示磁盘处于脱机状态的设置教程
win10系统使用久了,好多网友反馈说win10系统提示磁盘处于脱机状态的问题,非常不方便.有什么办法可以永久解决win10系统提示磁盘处于脱机状态的问题,面对win10系统提示磁盘处于脱机状态的图文 ...
最新文章
- [Django 3.2.8] SimpleUI的分页问题
- CAD公差表以及如何算
- MySQL学习笔记7:基本查询
- DEDECMS全版本gotopage变量XSS ROOTKIT 0DAY
- java 轻量数据库_DBTree是一个springboot2 + vue-element-template实现的轻量数据库表结构查看及管理工具...
- 信息系统项目管理收尾
- 对网页渲染的初步认识
- 扣丁三国 - 技术支持
- 用python解决搬砖问题_如何像要饭一般”用“python (一)(非编程类工作/科研搬砖工)...
- 嵌入式开发中常用的软件设计模式
- Cisco交换机配置VTP
- 1U - 4.445厘米
- java 绝对路径双斜线_路径分隔符:正斜线/、反斜线\、双反斜线\\的区别
- 分享个碧蓝航线脚本,自律捞船神器
- unity3d Daikon GUI 图片查看器 Demo 说明
- 微星GE62 NVIDIA960m 双系统ubuntu16.04 配置caffe-ssd
- MODBUS通讯协议和RS232以及RS485通讯协议有什么区别
- Zetore Jasminum插件 报错:文件名识别出错,请检查文件名识别模板与实际抓取文件名
- PMP项目管理证书有用么?什么人可以考呢?
- OceanBase Developer Center
热门文章
- Vue - 网站首屏加载等待动画(极简解决方案)
- Rust更适合经验较少的程序员?
- Spring Cloud 如何统一异常处理?写得太好了!
- MJUPC-022_编程挑战系列赛第二十二场(以梦为“码“ “数“说未来)题解(C/C++代码)
- DBeaver改成英语
- /给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[
- 假期培训日记(数论)
- Revisiting Pixel-Wise Supervision for Face Anti-Spoofing
- 递归回溯法求数独全部解
- COleDateTime SYSTEMTIME CTime