C# 获取打印机状态
public
static
string
GetPrinterStatus(
string
PrinterName)
{
int
intValue = GetPrinterStatusInt(PrinterName);
string
strRet =
string
.Empty;
switch
(intValue)
{
case
0:
strRet =
"准备就绪(Ready)"
;
break
;
case
0x00000200:
strRet =
"忙(Busy)"
;
break
;
case
0x00400000:
strRet =
"被打开(Printer Door Open)"
;
break
;
case
0x00000002:
strRet =
"错误(Printer Error)"
;
break
;
case
0x0008000:
strRet =
"初始化(Initializing)"
;
break
;
case
0x00000100:
strRet =
"正在输入,输出(I/O Active)"
;
break
;
case
0x00000020:
strRet =
"手工送纸(Manual Feed)"
;
break
;
case
0x00040000:
strRet =
"无墨粉(No Toner)"
;
break
;
case
0x00001000:
strRet =
"不可用(Not Available)"
;
break
;
case
0x00000080:
strRet =
"脱机(Off Line)"
;
break
;
case
0x00200000:
strRet =
"内存溢出(Out of Memory)"
;
break
;
case
0x00000800:
strRet =
"输出口已满(Output Bin Full)"
;
break
;
case
0x00080000:
strRet =
"当前页无法打印(Page Punt)"
;
break
;
case
0x00000008:
strRet =
"塞纸(Paper Jam)"
;
break
;
case
0x00000010:
strRet =
"打印纸用完(Paper Out)"
;
break
;
case
0x00000040:
strRet =
"纸张问题(Page Problem)"
;
break
;
case
0x00000001:
strRet =
"暂停(Paused)"
;
break
;
case
0x00000004:
strRet =
"正在删除(Pending Deletion)"
;
break
;
case
0x00000400:
strRet =
"正在打印(Printing)"
;
break
;
case
0x00004000:
strRet =
"正在处理(Processing)"
;
break
;
case
0x00020000:
strRet =
"墨粉不足(Toner Low)"
;
break
;
case
0x00100000:
strRet =
"需要用户干预(User Intervention)"
;
break
;
case
0x20000000:
strRet =
"等待(Waiting)"
;
break
;
case
0x00010000:
strRet =
"热机中(Warming Up)"
;
break
;
default
:
strRet =
"未知状态(Unknown Status)"
;
break
;
}
return
strRet;
}
internal
static
int
GetPrinterStatusInt(
string
PrinterName)
{
int
intRet = 0;
IntPtr hPrinter;
structPrinterDefaults defaults =
new
structPrinterDefaults();
if
(OpenPrinter(PrinterName,
out
hPrinter,
ref
defaults))
{
int
cbNeeded = 0;
bool
bolRet = GetPrinter(hPrinter, 2, IntPtr.Zero, 0,
out
cbNeeded);
if
(cbNeeded > 0)
{
IntPtr pAddr = Marshal.AllocHGlobal((
int
)cbNeeded);
bolRet = GetPrinter(hPrinter, 2, pAddr, cbNeeded,
out
cbNeeded);
if
(bolRet)
{
PRINTER_INFO_2 Info2 =
new
PRINTER_INFO_2();
Info2 = (PRINTER_INFO_2)Marshal.PtrToStructure(pAddr,
typeof
(PRINTER_INFO_2));
intRet = System.Convert.ToInt32(Info2.Status);
}
Marshal.FreeHGlobal(pAddr);
}
ClosePrinter(hPrinter);
}
return
intRet;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal
struct
structPrinterDefaults
{
[MarshalAs(UnmanagedType.LPTStr)]
public
String pDatatype;
public
IntPtr pDevMode;
[MarshalAs(UnmanagedType.I4)]
public
int
DesiredAccess;
};
状态枚举
[FlagsAttribute]
internal
enum
PrinterStatus
{
PRINTER_STATUS_BUSY = 0x00000200,
PRINTER_STATUS_DOOR_OPEN = 0x00400000,
PRINTER_STATUS_ERROR = 0x00000002,
PRINTER_STATUS_INITIALIZING = 0x00008000,
PRINTER_STATUS_IO_ACTIVE = 0x00000100,
PRINTER_STATUS_MANUAL_FEED = 0x00000020,
PRINTER_STATUS_NO_TONER = 0x00040000,
PRINTER_STATUS_NOT_AVAILABLE = 0x00001000,
PRINTER_STATUS_OFFLINE = 0x00000080,
PRINTER_STATUS_OUT_OF_MEMORY = 0x00200000,
PRINTER_STATUS_OUTPUT_BIN_FULL = 0x00000800,
PRINTER_STATUS_PAGE_PUNT = 0x00080000,
PRINTER_STATUS_PAPER_JAM = 0x00000008,
PRINTER_STATUS_PAPER_OUT = 0x00000010,
PRINTER_STATUS_PAPER_PROBLEM = 0x00000040,
PRINTER_STATUS_PAUSED = 0x00000001,
PRINTER_STATUS_PENDING_DELETION = 0x00000004,
PRINTER_STATUS_PRINTING = 0x00000400,
PRINTER_STATUS_PROCESSING = 0x00004000,
PRINTER_STATUS_TONER_LOW = 0x00020000,
PRINTER_STATUS_USER_INTERVENTION = 0x00100000,
PRINTER_STATUS_WAITING = 0x20000000,
PRINTER_STATUS_WARMING_UP = 0x00010000
}
C# 获取打印机状态的更多相关文章
- LODOP获取打印机状态码和状态码含义测试
由于打印机千差万别,打印机执行的标准也不一样,LODOP获取的打印状态码也可能不同,安装了个打印机驱动实际测试一下,测试的打印机驱动是Brother Color Type3 Class Driver. ...
- .Net中获取打印机的相关信息
原文:.Net中获取打印机的相关信息 新项目中牵涉到对打印机的一些操作,最重要的莫过于获取打印机的状态,IP等信息,代码量不大,但是也是自己花了一点时间总结出来的,希望能帮助需要的朋友. Printe ...
- LODOP获取打印状态码和时间列表
之前有博文介绍获取打印状态码和打印状态码的含义,相关博文:LODOP获取打印机状态码和状态码含义测试.此外 ,也有获取状态码及其变化的方法,可以获取打印状态码的列表,列表包含每个状态和每个状态的时间. ...
- 【VC++技术杂谈003】打印技术之打印机状态监控
在上一篇博文中我主要介绍了如何获取以及设置系统的默认打印机,本文将介绍如何对打印机状态进行实时监控,记录下所打印的文档.打印的份数以及打印时间等打印信息. 1.打印机虚脱机技术 在正式介绍如何对打印机 ...
- iOS 获取网络状态
在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{ UIApplication *app = [UIApplication sharedApplicat ...
- C# 获取时间差状态
/// <summary> /// 根据时间获取时间状态 /// </summary> /// <param name="dt"></pa ...
- Best Practices for Performance_4.Optimizing Battery Life 获取充电状态、电池信息,"sticky"类型的广播
http://developer.android.com/training/monitoring-device-state/index.htmlhttp://developer.android.com ...
- Android 通过广播获取网络状态
Android系统网络连接状态的改变会发一个广播,注册一个广播接收者,实时动态的检测网络状态,及时提醒用户,优化用户体验. 本文仅提供WIFI 状态的检测作为参考,其他网络连接方式请 ...
- C# 获取打印机列表以及串口
C# 获取打印机列表以及默认打印机.串口列表. /// <summary> /// 获取本地已安装的打印机 /// </summary> /// <returns> ...
随机推荐
- Effective Java总结
规则1. 用静态工厂方法代替构造器 例子: public class Example { } public class StaticFactory { //valueOf/Of/getInstance ...
- win8 修改msconfig 里面的"引导高级选项" 最大内存后 BSOD的解决方案
最近由于本人的电脑一直非常卡,于11.4日通过win8任务管理器分析发现 Peer Name Resolution Protocol Peer Networking Grouping Peer Net ...
- Silverlight编程模型
Silverlight支持Javascript API编程模型和托管API编程模型这两种编程模型,它们的基本作用都是用于XAML界面文件中的XAML对象,基于托管API编程的XAML应用程序是通过x: ...
- Sqli-labs less 21
Less-21 本关对cookie进行了base64的处理,其他的处理流程和less20是一样的. 我们这里可以利用less20同样的方法,但是需要将payload进行base64编码处理(注意这里对 ...
- 一套名企WEB前端面试题,不提供答案
1.说说你对Doctype的理解 2.web产品开发的流程 3.说说你对盒子模型的理解 4.前端页面有哪三层构成,分别是什么?作用是什么? 5.行内元素有哪些?块级元素有哪些?他们如何相互转化? 6. ...
- D3D Deferred Shading
在3D图形计算中,deferred shading是一个基于屏幕空间的着色技术.之所以被称为deferred shading,是因为我们将场景的光照计算与渲染"deferred"到 ...
- -高级Javascript编程学习笔记----Javascript编程及架构设计最应该注意的基本点
最小全局变量 JavaScript通过函数管理作用域.在函数内部生命的变量只在这个函数内部,别的地方不可用.全局变量是指在函数外或是未声明直接简单使用的.每个Javascipt环境有一个全局对象,当你 ...
- POJ 1986 Distance Queries (最近公共祖先,tarjan)
本题目输入格式同1984,这里的数据范围坑死我了!!!1984上的题目说边数m的范围40000,因为双向边,我开了80000+的大小,却RE.后来果断尝试下开了400000的大小,AC.题意:给出n个 ...
- HDU 3642 Get The Treasury (线段树扫描线,求体积并)
参考链接 : http://blog.csdn.net/zxy_snow/article/details/6870127 题意:给你n个立方体,求覆盖三次以上(包括三次)的区域的体积 思路:先将z坐标 ...
- HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)
做这道题之前,建议先做POJ 1151 Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...