Dzwebs.Net

撰写电脑技术杂文十余年

c#获取打印机状态

Admin | 2019-4-9 7:41:16 | 被阅次数 | 5652

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆
  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; 
  }; 

该杂文来自: 网站开发杂文

上一篇:rdpViewer根据屏幕大小自动缩放

下一篇:Nuget不会联网下载安装包的解决办法

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计