.NET에서 프린터 정보를 얻는 방법?
-
08-07-2019 - |
문제
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