c# 프린터 상태 조회 및 인쇄 차단

winform을 사용하여 자동 인쇄 서비스를 작성하는 과정에서 인쇄 명령을 호출하면 문서가 인쇄 대기 대기열에 들어가고 프린터가 정상적으로 작동하지 않으면 관련 업무 데이터의 정확한 전환에 영향을 미칠 수 있으므로 프린터의 상태를 검사하여 매번 인쇄할 때 프린터가 비어 있는 상태를 확보해야 합니다. 인쇄할 때 대기열에 문서가 하나만 있을 수 있습니다. 본고는 시스템을 인용합니다.프린터 상태 조회를 위한 관리

프린터 상태 가져오기


enum PrinterStatus
        {
              = 1,
              = 2,
              = 3,
              = 4,
              = 5,
              = 6,
              = 7,
        }

        /// <summary>
        ///  
        /// </summary>
        /// <param name="PrinterDevice"> </param>
        /// <returns> </returns>
        private static PrinterStatus GetPrinterPrinterStatus(string PrinterDevice)
        {
            PrinterStatus ret = 0;
            string path = @"win32_printer.DeviceId='" + PrinterDevice + "'";
            ManagementObject printer = new ManagementObject(path);
            printer.Get();
            ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);
            return ret;
        }

프린터 오프라인 검사


public static bool CheckPrinter(string BindPrintName)
        {
            ManagementScope scope = new ManagementScope(@"\root\cimv2");
            scope.Connect();

            // Select Printers from WMI Object Collections
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");

            string printerName = "";
            foreach (ManagementObject printer in searcher.Get())
            {
                printerName = printer["Name"].ToString().ToLower();
                if (printerName.IndexOf(BindPrintName.ToLower()) > -1)
                {
                    //foreach (var property in printer.Properties)
                    //{
                    //    LogUtil.WriteLog(property.Name + ":" + property.Value);
                    //}
                    if (printer["WorkOffline"].ToString().ToLower().Equals("true"))
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
            }
            return false;
        }

프린터 차단 대기열 구현


이것은 주로while 순환을 통해 프린터의 상태를 끊임없이 가져옵니다. 한가할 때 다음 인쇄를 할 수 있습니다. 두 개의 표지 위치를 통해 윤문의 외부 개입과 함께 종료합니다.
FinishWait 플래그 비트는 작업 내부의 ID이며 프린터에서 오류 상태가 확인되면 폴링 종료
GlobalInfo.IsGlobalExist 로고 위치는 프로그램 전역 표지입니다. 만약에 인터페이스에 사용자 대기 시간이 너무 길면 인공 수동 개입으로 종료할 수 있습니다

// 
                    if (!CheckPrinter(PrintName))
                    {
                        throw new PrintCheckException(" ");
                    }
                    PrinterStatus State = GetPrinterPrinterStatus(PrintName);
                    if (State == PrinterStatus. )
                    {

                    }
                    else if (State == PrinterStatus.  || State == PrinterStatus. )
                    {
                        // / , 
                        while (State != PrinterStatus.  && !FinishWait && !GlobalInfo.IsGlobalExist)
                        {
                            State = GetPrinterPrinterStatus(PrintName);
                            if (!CheckPrinter(PrintName))
                            {
                                FinishWait = true;
                                throw new PrintCheckException(" ");
                            }
                            if (State == PrinterStatus.  || State == PrinterStatus.  || State == PrinterStatus. )
                            {
                                if (State == PrinterStatus. )
                                {

                                    FinishWait = true;
                                }
                            }
                            else
                            {
                                FinishWait = true;
                                throw new PrintCheckException(" , :" + State.ToString());
                            }
                        }
이상은 c#프린터 상태 조회와 차단 인쇄를 실현하는 상세한 내용입니다. c#프린터 상태 조회와 차단 인쇄에 관한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기