TASK 사용자가 양식은 양식이 폐쇄되고 작업이 재개 된 입력 클릭 입력 한 후 나타납니다 팝업을 일시 중지, 문서를 인쇄PRINTERNAME과 작업 ID로 Win32_printJob을 일시 정지하는 방법
.
우리는 50 네트워크 프린터, 2000 클라이언트 머신 및 한 인쇄 서버 있습니다. (또는)을 사용 : 사용자가 문서를 인쇄 할 경우
로컬 (PDF 프린터, XPS 문서 작가 EX)
각 클라이언트는 3 또는 4 프린터
문제가 있었다 네트워크 프린터 (CANON, HP) 인쇄 작업이 즉시 일시 중지되었습니다.
MY 시도
인쇄 문서의 이벤트 리스너보고와 인쇄 작업을 반환합니다.
- 는 에서 먼저 작동 때때로 방법을 일시 정지하고 mostof 시간 properly.Because, 그 다음 PrintJob을 검색하지만 이미 인쇄하지 작동하지 않습니다.
- 이벤트 리스너가 Managementbaseobject를 반환하기 때문에 작동하지 않습니다두 번째 일시 정지 방법에
하지만 인쇄 작업을 일시 중지하려면
PRINTJOB을 ManageObject하는 ManageBaseObject 변환하는 방법 ManagementObject 필요 사건 수혜자 코드
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();
MAIN 액션 코드
private void printJobArrived_EventArrived(object sender, EventArrivedEventArgs e)
{
try
{
CurrentprintJob = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
}
catch(Exception ex){
}
}
,658을 일시 중지 PRINTJOB METHOD 1PRINTJOB METHOD 2
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;
}
을 일시
간단한 작업을 수행하기에는 어리석은 양의 코드입니다. Nick Westgate의 답변이 자리하고 있습니다. –