using System;using System.Collections.Generic;using System.Text;using System.Management;using System.Net;namespace testPrintJobArrival{public delegate void PrintJobArrived(object sender, ManagementBaseObject printProperties);public class WMIPrinter{ConnectionOptions _co = new ConnectionOptions();internal static System.Management.ManagementScope _ms = null;private const string PRINTERJOBS = "SELECT * FROM Win32_PrintJob";private const string PRINTERS = "SELECT * FROM Win32_Printer";private const int QUERYINTERVAL = 1;public PrintJobArrived OnPrintJobArrived = null;private System.Management.ManagementEventWatcher _printEventWatcher = null;private ManagementObjectSearcher _moSearchPrintJobs = null;public WMIPrinter(){ //Point to machine_co.EnablePrivileges = true;_co.Impersonation = ImpersonationLevel.Delegate;_ms = new System.Management.ManagementScope("\\\\localhost\\root\\cimv2", _co);_moSearchPrintJobs = new ManagementObjectSearcher(PRINTERJOBS);}public void StartPrintWatcher(){_printEventWatcher = new System.Management.ManagementEventWatcher();_printEventWatcher.Query = new System.Management.EventQuery("SELECT * FROM __InstanceCreationEvent WITHIN " + QUERYINTERVAL + " WHERE TargetInstance ISA \"Win32_PrintJob\"");string hostName = Dns.GetHostName();this._printEventWatcher.Scope = new System.Management.ManagementScope("\\\\" + hostName + "\\root\\CIMV2");_printEventWatcher.EventArrived += new EventArrivedEventHandler(this.Arrived); _printEventWatcher.Start(); //asynchronous//_printEventWatcher.WaitForNextEvent(); //synchronous}public void StopPrintWatcher(){if (_printEventWatcher != null)_printEventWatcher.Stop();}/// <summary>/// new Print Job has Arrived.../// </summary>/// <param name="sender"></param>/// <param name="e"></param>public void Arrived(object sender, EventArrivedEventArgs e){foreach (PropertyData pd in e.NewEvent.Properties){ManagementBaseObject mbo = pd.Value as ManagementBaseObject;if (mbo != null){//mbo.Properties[""]if (OnPrintJobArrived != null)OnPrintJobArrived(this, mbo);}}}}}
上面delegate 的使用有问题!
zgke 做过吗??事件检测不到啊。??
zgke 做过吗?? 打印事件检测不到啊???
_printEventWatcher.EventArrived += new EventArrivedEventHandler(this.Arrived);这句有哪位请解释一下!!
在Arrived函数中
public void Arrived(object sender, EventArrivedEventArgs e){
foreach (PropertyData pd in e.NewEvent.Properties)
{
ManagementBaseObject mbo = pd.Value as ManagementBaseObject;
if (mbo != null)
{
if (OnPrintJobArrived != null)
OnPrintJobArrived(this, mbo);
这里是怎么调用的,请解释一下??
}
}
}
[这里是怎么调用的,请解释一下??