111,125
社区成员
发帖
与我相关
我的任务
分享
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);
}
}
}
}
}
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);
这里是怎么调用的,请解释一下??
}
}
}