ManagementEventWatcher를 사용하여 변경 사항이있을 때마다 Win32_PrintJob WMI 클래스에 쿼리 할 때 문서, HostPrintQueue, JobId, JobStatus, TotalPages 등과 같은 데이터를 가져 왔습니다. . TotalPages가 실제 페이지 번호 인을 표시하지 않고 있습니다.이 데이터를 얻기 위해 순간적으로 인쇄 작업이 처리되지 않고 그 순간에 인쇄 할 여러 페이지를 양도하지만 실제 총계는 다른 것입니다. 번호, 처리가 끝나면 실제 인쇄 작업 수를 얻는 방법?PrintJob의 총 실제 페이지 수 (Win32_PrintJob)
ManagementEventWatcher createPrintJobWatcher;
String strComputerName = ".";
// Create event query to be notified within 1 milli second of a change in a service
WqlEventQuery createPrintJobQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 0.001 WHERE TargetInstance ISA \"Win32_PrintJob\"");
createPrintJobWatcher = new ManagementEventWatcher();
createPrintJobWatcher.Scope = new ManagementScope("\\\\" + strComputerName + "\\root\\CIMV2");
createPrintJobWatcher.Query = createPrintJobQuery;
// times out watcher.WaitForNextEvent in 1 seconds
createPrintJobWatcher.Options.Timeout = new TimeSpan(0, 0, 1);
//set the print event handler
createPrintJobWatcher.EventArrived += new EventArrivedEventHandler(createPrintJobListener);
createPrintJobWatcher.Start();
Console.WriteLine("Listening...");
Console.ReadLine();
createPrintJobListener 방법 :
static void createPrintJobListener(object sender, EventArrivedEventArgs e)
{
SelectQuery query = new SelectQuery("Win32_PrintJob");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection printJobs = searcher.Get())
foreach (ManagementObject printJob in printJobs)
{
Console.WriteLine("c1:", printJob);
Console.WriteLine("ID: {0}", printJob.GetPropertyValue("JobId").ToString());
Console.WriteLine("name: {0}", printJob.GetPropertyValue("name").ToString());
Console.WriteLine("status: {0}", printJob.GetPropertyValue("status").ToString());
if (printJob.GetPropertyValue("JobStatus") != null)
{
Console.WriteLine("JobStatus: {0}", printJob.GetPropertyValue("JobStatus").ToString());
}
else
{
Console.WriteLine("JobStatus: NULLLLLL");
}
Console.WriteLine("PC: {0}", printJob.GetPropertyValue("HostPrintQueue").ToString());
Console.WriteLine("TOTOAL PAGES: {0}", printJob.GetPropertyValue("TotalPages").ToString());
}
}
답변 해 주셔서 감사합니다. 나는이 문제에 대한 해결책을 이미 찾았는데, 문제는 잘못된 순간에 인쇄 작업의 총 페이지 수를 묻는 것이 었습니다. 인쇄 작업 상태가 "인쇄 중"인 경우이 값을 얻는 순간입니다. 적어도 그것이 저에게 효과적이었습니다. 이제 문제는 dmCopies 값으로 풍경에있는 단어 문서를 인쇄 할 때 항상 1을 표시하는 것입니다. 그런데 C#으로 프린터의 총 기록 개수를 얻는 방법이 있습니까? – karelp90
Windows는 기록 페이지 수 정보를 보관하지 않습니다. 하이 엔드 프린터는 [SNMP] (https://tools.ietf.org/html/rfc3805)로 게임을하고 싶습니다. –