pint 类吗?不好意思,我是初学者,
.net 类库,是在 msdn 里面找吗!

解决方案 »

  1.   

    获取状态:  par:打印机名称
      private PrintQueue GetPrintQueue(string PrinterName)
            {
                LocalPrintServer pr = new LocalPrintServer();
                pr.Refresh();
                EnumeratedPrintQueueTypes[] enumerationFlags = {EnumeratedPrintQueueTypes.Local,
                                                                EnumeratedPrintQueueTypes.Connections,
                                                               };
                foreach (PrintQueue pq in pr.GetPrintQueues(enumerationFlags))
                {
                    if (pq.Name == PrinterName)
                    {
                        return pq;
                    }
                }
                return null;
            }
    判断状态: if (printQueue.IsBusy)
                        printStateText = "打印机正忙";
                    else if (printQueue.IsDoorOpened)
                        printStateText = "打印机门被打开";
                    else if (printQueue.IsInError)
                        printStateText = "打印机出错";
                    else if (printQueue.IsInitializing)
                        printStateText = "打印机正在初始化";
                    else if (printQueue.IsIOActive)
                        printStateText = "打印机正在与打印服务器交换数据";
                    else if (printQueue.IsManualFeedRequired)
                        printStateText = "打印机出错";
                    else if (printQueue.IsNotAvailable)
                        printStateText = "打印机状态信息不可用";
                    else if (printQueue.IsTonerLow)
                        printStateText = "打印机墨粉用完";
                    else if (printQueue.IsOffline)
                        printStateText = "打印机脱机";
                    else if (printQueue.IsOutOfMemory)
                        printStateText = "打印机无可用内存";
                    else if (printQueue.IsOutputBinFull)
                        printStateText = "打印机输出纸盒已满";
                    else if (printQueue.IsPaperJammed)
                        printStateText = "打印机卡纸";
                    else if (printQueue.IsOutOfPaper)
                        printStateText = "打印机中没有或已用完当前打印作业所需的纸张类型";
                    else if (printQueue.QueueStatus == PrintQueueStatus.PaperProblem)
                        printStateText = "打印机中的纸张导致未指定的错误情况";
                    else if (printQueue.IsPaused)
                        printStateText = "打印队列已暂停";
                    else if (printQueue.IsPendingDeletion)
                        printStateText = "打印队列正在删除打印作业";
                    else if (printQueue.IsPrinting)
                        printStateText = "设备正在打印";
                    else if (printQueue.IsProcessing)
                        printStateText = "设备正在执行某种工作,如果此设备是集打印机、传真机和扫描仪于一体的多功能设备,则不需要打印.";
                    else if (printQueue.IsServerUnknown)
                        printStateText = "打印机处于错误状态";
                    //else if (printQueue.IsWarmingUp)
                    //     printStateText = "打印机正在预热";
      

  2.   

    PrintQueue 是引用 哪个!
      

  3.   

    PrintQueue 是引用system.printing.dll
      

  4.   

    printStateText 是什么意思,我换成 MessageBox.Show("打印机出错");
    结果 这些条件判断都不在里面。
      

  5.   

     /// <summary>
            /// 已解析过的打印任务列表
            /// </summary>
            public static List<UInt32> AnalyzedJobs = new List<uint>();//20141112        /// <summary>
            /// 获取指定打印任务的信息
            /// </summary>
            /// <param name="jobid">打印任务的ID</param>
            /// <param name="level">打印信息的等级(1 or 2)</param>
            public static PRINTED_ITEM_STRU AnalyzePrintJobInfo(string printername, IntPtr hprinter, UInt32 jobid, WinSpool.JOBSTATUS jobstatus, UInt32 level)
            {
                
                if (hprinter == IntPtr.Zero)
                    throw new Exception("No30:打印句柄没有初始化!");            PRINTED_ITEM_STRU cstru = new PRINTED_ITEM_STRU();            if (AnalyzedJobs.Contains(jobid))//已经解析过则不再解析//20141112
                {
                    return cstru;
                }            //防止对同一个打印任务进行重复的解析
                if (jobstatus != WinSpool.JOBSTATUS.JOB_STATUS_PRINTING && jobstatus != 0)
                {
                    //数据不需要分析
                    return cstru;
                }            try
                {                //20141112
                    if (AnalyzedJobs.Count > 100)
                        AnalyzedJobs.RemoveRange(0, 10);
                    AnalyzedJobs.Add(jobid);
                    //20141112 end
                    UInt32 lNeeded = 0;
                    UInt32 lRetrieve = 0;
                    //获取任务信息的字节数
                    bool ret = WinSpool.GetJob(hprinter, jobid, level, IntPtr.Zero, 0, out lNeeded);                //初始化对应的内存空间
                    lRetrieve = lNeeded;
                    IntPtr pData = Marshal.AllocHGlobal((int)lRetrieve);                //获取任务信息
                    ret = WinSpool.GetJob(hprinter, jobid, level, pData, lRetrieve, out lNeeded);
                    if (ret == true)//如果获取成功,则进行分析
                    {
                        //根据level使用对应的结构体
                        int pTemp = pData.ToInt32();//start pointer 
                        switch (level)
                        {
                            case 1:
                                WinSpool.JOB_INFO_1 jobinfo = new WinSpool.JOB_INFO_1();
                                jobinfo = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
                                cstru.file_name = jobinfo.pDocument;
                                cstru.page_num = (int)jobinfo.TotalPages;
                                break;
                            case 2:
                                WinSpool.JOB_INFO_2 jobinfo2 = new WinSpool.JOB_INFO_2();
                                jobinfo2 = (WinSpool.JOB_INFO_2)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_2));
                                cstru.file_name = jobinfo2.pDocument;
                                cstru.page_num = jobinfo2.TotalPages;
                                cstru.time = jobinfo2.StartTime.ToString();
                                break;
                            default:
                                WinSpool.JOB_INFO_1 jobinfod = new WinSpool.JOB_INFO_1();
                                jobinfod = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
                                cstru.file_name = jobinfod.pDocument;
                                cstru.page_num = (int)jobinfod.TotalPages;
                                break;
                        }
                    }
                    //对结构体进行赋值
                    PrintDocument pdoc = new PrintDocument();
                    pdoc.PrinterSettings.PrinterName = printername;                cstru.printer_name = printername;
                    cstru.copy_num = pdoc.PrinterSettings.Copies;
                    cstru.time = string.Empty;
                    cstru.color = pdoc.PrinterSettings.DefaultPageSettings.Color == false ? 0 : 1;
                    cstru.duplex = pdoc.PrinterSettings.Duplex == Duplex.Simplex ? 0 : 1;
                    cstru.paper_type = pdoc.PrinterSettings.DefaultPageSettings.PaperSize.PaperName;                //释放内存空间
                    Marshal.FreeHGlobal(pData);
                    
                }
                catch (Exception ex)
                {                Console.WriteLine(ex.Message);
                }            
                return cstru;        }
      

  6.   

      /// <summary>
            /// 已解析过的打印任务列表
            /// </summary>
            public static List<UInt32> AnalyzedJobs = new List<uint>();//20141112        /// <summary>
            /// 获取指定打印任务的信息
            /// </summary>
            /// <param name="jobid">打印任务的ID</param>
            /// <param name="level">打印信息的等级(1 or 2)</param>
            public static PRINTED_ITEM_STRU AnalyzePrintJobInfo(string printername, IntPtr hprinter, UInt32 jobid, WinSpool.JOBSTATUS jobstatus, UInt32 level)
            {
         if (hprinter == IntPtr.Zero)
                    throw new Exception("No30:打印句柄没有初始化!");            PRINTED_ITEM_STRU cstru = new PRINTED_ITEM_STRU();            if (AnalyzedJobs.Contains(jobid))//已经解析过则不再解析//20141112
                {
                    return cstru;
                }            //防止对同一个打印任务进行重复的解析
                if (jobstatus != WinSpool.JOBSTATUS.JOB_STATUS_PRINTING && jobstatus != 0)
                {
                    //数据不需要分析
                    return cstru;
                }            try
                {
                    //20141112
                    if (AnalyzedJobs.Count > 100)
                        AnalyzedJobs.RemoveRange(0, 10);
                    AnalyzedJobs.Add(jobid);
                    //20141112 end                UInt32 lNeeded = 0;
                    UInt32 lRetrieve = 0;
                    //获取任务信息的字节数
                    bool ret = WinSpool.GetJob(hprinter, jobid, level, IntPtr.Zero, 0, out lNeeded);                //初始化对应的内存空间
                    lRetrieve = lNeeded;
                    IntPtr pData = Marshal.AllocHGlobal((int)lRetrieve);                //获取任务信息
                    ret = WinSpool.GetJob(hprinter, jobid, level, pData, lRetrieve, out lNeeded);
                    if (ret == true)//如果获取成功,则进行分析
                    {
                        //根据level使用对应的结构体
                        int pTemp = pData.ToInt32();//start pointer 
                        WinSpool.JOB_INFO_2 info2 = new WinSpool.JOB_INFO_2();
                        info2 = (WinSpool.JOB_INFO_2)Marshal.PtrToStructure
                            (new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_2));                    int intRet = System.Convert.ToInt32(info2.Status);                    //Marshal.FreeHGlobal(new IntPtr(pTemp));                    //WinSpool.ClosePrinter(hprinter);
                        switch (level)
                        {
                            case 1:
                                WinSpool.JOB_INFO_1 jobinfo = new WinSpool.JOB_INFO_1();
                                jobinfo = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
                                cstru.file_name = jobinfo.pDocument;
                                cstru.page_num = (int)jobinfo.TotalPages;
                                break;
                            case 2:
                                WinSpool.JOB_INFO_2 jobinfo2 = new WinSpool.JOB_INFO_2();
                                jobinfo2 = (WinSpool.JOB_INFO_2)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_2));                            WinSpool.DEVMODE devm = new WinSpool.DEVMODE();
                                devm = (WinSpool.DEVMODE)Marshal.PtrToStructure(jobinfo2.pDevMode, typeof(WinSpool.DEVMODE));                            cstru.copy_num = devm.dmCopies;
                                cstru.color = devm.dmColor;
                                cstru.duplex = devm.dmDuplex;
                                cstru.paper_type = devm.dmPaperSize.ToString();
                                cstru.file_name = jobinfo2.pDocument;
                                cstru.page_num = jobinfo2.TotalPages;
                                cstru.time = jobinfo2.StartTime.ToString();
                                break;
                            default:
                                WinSpool.JOB_INFO_1 jobinfod = new WinSpool.JOB_INFO_1();
                                jobinfod = (WinSpool.JOB_INFO_1)Marshal.PtrToStructure(new IntPtr(pTemp), typeof(WinSpool.JOB_INFO_1));
                                cstru.file_name = jobinfod.pDocument;
                                cstru.page_num = (int)jobinfod.TotalPages;
                                break;
                        }
                    }
                    cstru.printer_name = printername;
                    ////对结构体进行赋值
                    //PrintDocument pdoc = new PrintDocument();
                    //pdoc.PrinterSettings.PrinterName = printername;                //cstru.copy_num = pdoc.PrinterSettings.Copies;
                    //cstru.time = string.Empty;
                    //cstru.color = pdoc.PrinterSettings.DefaultPageSettings.Color == false ? 0 : 1;
                    //cstru.duplex = pdoc.PrinterSettings.Duplex == Duplex.Simplex ? 0 : 1;
                    //cstru.paper_type = pdoc.PrinterSettings.DefaultPageSettings.PaperSize.PaperName;                //释放内存空间
                    Marshal.FreeHGlobal(pData);            }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                return cstru;
    }