public static extern bool OpenPrinter(string printer, out IntPtr handle, ref StructPrinterDefaults pDefault);
/// <summary> /// /// </summary> /// <returns> /// 0:禁用;1:正常;2:忙;3:离线; /// 10:空闲未装载纸;11:空闲已装载纸,准备就绪 /// </returns> public virtual int GetStatus() { log.Debug("begin"); if (!enabled) { log.DebugFormat("end, return = {0}", StatusCode.Disabled); return(StatusCode.Disabled); } int result = StatusCode.Offline; IntPtr hPrinter; StructPrinterDefaults defaults = new StructPrinterDefaults(); if (!OpenPrinter(name, out hPrinter, ref defaults)) { log.InfoFormat("end, return = {0}", StatusCode.Offline); return(StatusCode.Offline); } uint s = 0x00001000; 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) { PrinterInfo2 Info2 = (PrinterInfo2)Marshal.PtrToStructure(pAddr, typeof(PrinterInfo2)); s = Info2.Status; } Marshal.FreeHGlobal(pAddr); } ClosePrinter(hPrinter); log.InfoFormat("s = {0}", s); if ((uint)PrinterStatus.PRINTER_STATUS_PAPER_OUT == (s & (uint)PrinterStatus.PRINTER_STATUS_PAPER_OUT) || (uint)PrinterStatus.PRINTER_STATUS_DOOR_OPEN == (s & (uint)PrinterStatus.PRINTER_STATUS_DOOR_OPEN) || ((uint)PrinterStatus.PRINTER_STATUS_PAPER_PROBLEM == (s & (uint)PrinterStatus.PRINTER_STATUS_PAPER_PROBLEM))) { result = 10; } else if ((uint)PrinterStatus.PRINTER_STATUS_PRINTING == (s & (uint)PrinterStatus.PRINTER_STATUS_PRINTING)) { result = 2; } else if (0 == s) { result = 11; } else { result = 3; } log.InfoFormat("result = {0}", result); log.Debug("end"); return(result); }