实例介绍
【实例简介】
C#实现打印机监控
【实例截图】
	
 
【核心代码】
	using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System;
using System.Collections.Generic;
using System.Text;
using System.Printing;
using System.Collections;
using System.IO;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == string.Empty)
                return;
            PrinterStatus ret = 0;
            string path = @"win32_printer.DeviceId='"   @comboBox1.Text   "'";
            ManagementObject printer = new ManagementObject(path);
            printer.Get();
            PropertyDataCollection.PropertyDataEnumerator pde = printer.Properties.GetEnumerator();
            string strRow="";
            while (pde.MoveNext())
            {
                strRow  = pde.Current.Name   " : "   pde.Current.Value   "\r\n";
                //显示的是 属性名 : 属性值 的形式
            }
            string aTmp = printer.Properties["WorkOffline"].Value.ToString();
            if (aTmp == "True")
            {
                label2.Text = "打印机未联机";
                txtStatus.Text = textBox2.Text = "";
            }
            else
            {
                label2.Text = "打印机连接正常";
                ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);
                txtStatus.Text = ret.ToString();
                string strRet = "";
                switch (Convert.ToInt32(printer.Properties["PrinterState"].Value))
                {
                    case 0:
                        strRet = "准备就绪(Ready)";
                        break;
                    case 1:
                        strRet = "暂停(Paused)";
                        break;
                    case 2:
                        strRet = "错误(Printer Error)";
                        break;
                    case 4:
                        strRet = "正在删除(Pending Deletion)";
                        break;
                    case 8:
                        strRet = "塞纸(Paper Jam)";
                        break;
                    case 16:
                        strRet = "打印纸用完(Paper Out)";
                        break;
                    case 32:
                        strRet = "手工送纸(Manual Feed)";
                        break;
                    case 64:
                        strRet = "纸张问题(Page Problem)";
                        break;
                    case 128:
                        strRet = "脱机(Off Line)";
                        break;
                    case 256:
                        strRet = "正在输入,输出(I/O Active)";
                        break;
                    case 512:
                        strRet = "忙(Busy)";
                        break;
                    case 1024:
                        strRet = "正在打印(Printing)";
                        break;
                    case 2048:
                        strRet = "输出口已满(Output Bin Full)";
                        break;
                    case 4096:
                        strRet = "不可用(Not Available)";
                        break;
                    case 8192:
                        strRet = "等待(Waiting)";
                        break;
                    case 16384:
                        strRet = "正在处理(Processing)";
                        break;
                    case 32768:
                        strRet = "初始化(Initializing)";
                        break;
                    case 65536:
                        strRet = "热机中(Warming Up)";
                        break;
                    case 131072:
                        strRet = "墨粉不足(Toner Low)";
                        break;
                    case 262144:
                        strRet = "无墨粉(No Toner)";
                        break;
                    case 524288:
                        strRet = "当前页无法打印(Page Punt)";
                        break;
                    case 1048576:
                        strRet = "需要用户干预(User Intervention)";
                        break;
                    case 2097152:
                        strRet = "内存溢出(Out of Memory)";
                        break;
                    case 4194304:
                        strRet = "被打开(Printer Door Open)";
                        break;
                    case 536870912:
                        strRet = "等待(Waiting)";
                        break;
                    default:
                        strRet = "未知状态(Unknown Status)";
                        break;
                }
                textBox2.Text = strRet;
            }
            textBox1.Text = strRow;
        }
        internal enum PrinterStatu
        {
            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 
        }
        enum PrinterStatus
        {
            其他状态 = 1,
            未知,
            空闲,
            正在打印,
            预热,
            停止打印,
            打印中,
            离线
        }
        /// <summary>
        /// 打印机属性转换
        /// </summary>
        /// <param name="PrinterDevice">打印机名(DeviceID)</param>
        /// <param name="iCount">当前任务数</param>
        /// <returns>打印机状态名字</returns>
        private PrinterStatus GetPrinterStat(string PrinterDevice, ref int iCount)
        {
 
            PrinterStatus ret = 0;
            string path = @"win32_printer.DeviceId='"   @comboBox1.Text   "'";
            ManagementObject printer = new ManagementObject(path);
            printer.Get();
            ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);
            iCount = Convert.ToInt32(printer.Properties["JobCountSinceLastReset"].Value);
            return ret;
        }
        private void Form1_Load(object sender, System.EventArgs e)
        {
            foreach (string iprt in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
            {
                this.comboBox1.Items.Add(iprt);
            }
            timer1.Interval = 500;
            timer1.Start();
        }
        private void timer1_Tick(object sender, System.EventArgs e)
        {
            button1.PerformClick();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            PrintQueue pq = LocalPrintServer.GetDefaultPrintQueue();
            
            switch (pq.QueueStatus)
            {
                //处于节能状态
                case PrintQueueStatus.PowerSave:
                    break;
                //处于错误状态
                case PrintQueueStatus.ServerUnknown:
                    break;
                //打印机上的门已打开
                case PrintQueueStatus.DoorOpen:
                    break;
                //打印机无可用内存
                case PrintQueueStatus.OutOfMemory:
                    break;
                case PrintQueueStatus.UserIntervention:
                    break;
                case PrintQueueStatus.PagePunt:
                    break;
                //打印机墨粉已用完
                case PrintQueueStatus.NoToner:
                    break;
                case PrintQueueStatus.TonerLow:
                    break;
                case PrintQueueStatus.WarmingUp:
                    break;
                case PrintQueueStatus.Initializing:
                    break;
                case PrintQueueStatus.Processing:
                    break;
                case PrintQueueStatus.Waiting:
                    break;
                case PrintQueueStatus.NotAvailable:
                    break;
                case PrintQueueStatus.OutputBinFull:
                    break;
                case PrintQueueStatus.Busy:
                    break;
                case PrintQueueStatus.IOActive:
                    break;
                case PrintQueueStatus.Offline:
                    break;
                case PrintQueueStatus.PaperProblem:
                    break;
                case PrintQueueStatus.ManualFeed:
                    break;
                //打印机缺纸
                case PrintQueueStatus.PaperOut:
                    break;
                //打印机卡纸
                case PrintQueueStatus.PaperJam:
                    break;
                case PrintQueueStatus.PendingDeletion:
                    break;
                case PrintQueueStatus.Paused:
                    break;
                case PrintQueueStatus.None:
                    break;
                case PrintQueueStatus.Printing:
                    break;
                case PrintQueueStatus.Error:
                    break;
                default:
                    break;
            }
        }
    }
}
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
 - 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
 - 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
 - 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
 
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
                

支持(0) 盖楼(回复)