문제

Standard PrintDialog에는 선택한 프린터와 관련된 네 가지 값, 즉 상태, 유형, 위치 및 주석이 있습니다.

프린터 이름을 알고 있다면 C# 2.0 에서이 값을 어떻게 얻을 수 있습니까?

도움이 되었습니까?

해결책

처럼 Dowski가 제안했다, WMI를 사용하여 프린터 속성을 얻을 수 있습니다. 다음 코드는 주어진 프린터 이름의 모든 속성을 표시합니다. 그중에서도 PrinterStatus, 댓글, 위치, DriverName, PortName 등을 찾을 수 있습니다.

using System.Management;

...

string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
    try
    {
        foreach (ManagementObject printer in coll)
        {
            foreach (PropertyData property in printer.Properties)
            {
                Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
            }
        }
    }
    catch (ManagementException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

다른 팁

이것 ~해야 한다 일하다.

using System.Drawing.Printing;

...

PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting

그 후, 다양한 속성 프린터 세트를 읽을 수 있습니다.

주목하십시오 ps.isValid() 프린터가 실제로 존재하는지 확인할 수 있습니다.

편집 : 하나의 추가 의견. Microsoft는 귀하가 사용하는 것이 좋습니다 인쇄 문서 프린터 세트를 직접 작성하지 않고 프린터 세팅을 수정하십시오.

그 기사를 주목하십시오 Dowski 그리고 파노스 (MSDN Win32_Printer) 조금 오도 할 수 있습니다.

대부분의 배열의 첫 번째 값을 참조하고 있습니다. 일부는 1로 시작하고 일부는 0으로 시작합니다. 예를 들어, "예를 들어,"ExtendedPrinterstatus"테이블의 첫 번째 값은 1이므로 배열은 다음과 같습니다.

string[] arrExtendedPrinterStatus = { 
    "","Other", "Unknown", "Idle", "Printing", "Warming Up",
    "Stopped Printing", "Offline", "Paused", "Error", "Busy",
    "Not Available", "Waiting", "Processing", "Initialization",
    "Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};

반면에, "ErrorState"테이블의 첫 번째 값은 0이므로 배열은 다음과 같습니다.

string[] arrErrorState = {
    "Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
    "No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
    "Output Bin Full"
};

BTW, "프린터 스테이트"쓸모 없지만 사용할 수 있습니다"프린터 스타 투스".

참조를 위해 여기 프린터 ManagementObject에 사용 가능한 모든 속성 목록입니다.

usage: printer.Properties["PropName"].Value

Windows 환경에서 일한 지 오랜 시간이 지났지 만, 당신이 보는 것이 좋습니다. WMI 사용.

나는 그것이 오래된 게시물이라는 것을 알고 있지만, 요즘 더 쉬운/더 빠른 옵션은 WPF 프레임 워크 (WPF 프레임 워크가 제공 할 수 있음)가 제공하는 향상된 인쇄 서비스를 사용하는 것입니다.

http://msdn.microsoft.com/en-us/library/system.printing(v=vs.110).aspx

프린터 큐의 상태와 첫 번째 작업의 상태를 검색하는 예 ..

var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus

WMI의 대안으로 winspool.drv (IE Windows API)를 활용하여 빠른 정확한 결과를 얻을 수 있습니다 - pinvoke.net의 인터페이스, 스트러크 및 상수에 대한 모든 세부 사항을 얻거나 코드를 함께 넣을 수 있습니다. ~에 http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top