仕事
ユーザーがドキュメントを印刷すると、ポップが表示されて一時停止し、フォームをクリックして入力すると、フォームが閉じられ、ジョブが再開されます。
50 台のネットワーク プリンター、2000 台のクライアント マシン、1 台のプリント サーバーが あります。
各クライアントには3 台または 4 台のプリンターがありました
問題
ユーザーがドキュメントをローカルで印刷する場合(例: PDF PRINTER、XPS DOCUMENT WRITER) (または) ネットワーク プリンター(CANON、HP)を使用すると、印刷ジョブはすぐに一時停止します。
私の試み
ドキュメントのいずれかを印刷すると、イベント リスナーが監視し、印刷ジョブを返します。
最初の一時停止方法では、機能することもあれば、ほとんどの場合、適切に機能しないこともあります。なぜなら、その印刷ジョブを検索しているが、そこには既に印刷されていないからです。
In Second Pause Methodは機能しないため、イベント リスナーは Managementbaseobject を返しますが、印刷ジョブを一時停止するには ManagementObject が必要です ManageBaseObject を ManageObject に変換する方法
PRINTJOB イベント リスナー コード
managementEvent = new ManagementEventWatcher();
managementEvent.Query = new EventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_PrintJob'");
managementEvent.Scope = new ManagementScope(@"\root\cimv2");
managementEvent.EventArrived += new EventArrivedEventHandler(printJobArrived_EventArrived);
managementEvent.Start();
主なアクションコード
private void printJobArrived_EventArrived(object sender, EventArrivedEventArgs e)
{
try
{
CurrentprintJob = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
}
catch(Exception ex){
}
}
PRINTJOB メソッド 1 を一時停止するには
public bool PausePrintJob(string jobname)
{
bool isActionPerformed = false;
try
{
string searchQuery = "SELECT * FROM Win32_PrintJob WHERE Name LIKE '%"+jobname+"%'";
ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(searchQuery);
ManagementObjectCollection prntJobCollection = searchPrintJobs.Get();
foreach (ManagementObject prntJob in prntJobCollection)
{
prntJob.InvokeMethod("Pause", null);
isActionPerformed = true;
}
}
catch (Exception ex)
{
new LogFile().WriteErrorLog(ex.StackTrace, ex.Message);
}
return isActionPerformed;
}
印刷ジョブ方法 2 を一時停止するには
public bool PausePrintJob(ManagementObject currentPrintJob, bool makePause)
{
bool isActionPerformed = false;
try
{
{
if (makePause == true && currentPrintJob != null)
{
currentPrintJob.InvokeMethod("Pause", null);
isActionPerformed = true;
}
else if (makePause == true && currentPrintJob != null)
{
currentPrintJob.InvokeMethod("Resume", null);
isActionPerformed = false;
}
}
}
catch (Exception ex)
{
new LogFile().WriteErrorLog(ex.StackTrace, ex.Message);
}
return isActionPerformed;
}