我之前用这种方法得到ID,但是不正确
LocalPrintServer ps = new LocalPrintServer();
PrintQueueCollection queue = ps.GetPrintQueues();
foreach (PrintQueue pq in queue)
{
pq.Refresh();
if (pq.NumberOfJobs > 0)
{
try
{
PrintJobInfoCollection jobs = pq.GetPrintJobInfoCollection();
if (jobs!=null)
{
foreach (PrintSystemJobInfo job in jobs)
{
job.Refresh();
CancelPrintJob(job.PositionInPrintQueue);
}
}
}
catch (Exception ex)
{
}
}
}
LocalPrintServer ps = new LocalPrintServer();
PrintQueueCollection queue = ps.GetPrintQueues();
foreach (PrintQueue pq in queue)
{
pq.Refresh();
if (pq.NumberOfJobs > 0)
{
try
{
PrintJobInfoCollection jobs = pq.GetPrintJobInfoCollection();
if (jobs!=null)
{
foreach (PrintSystemJobInfo job in jobs)
{
job.Refresh();
CancelPrintJob(job.PositionInPrintQueue);
}
}
}
catch (Exception ex)
{
}
}
}
解决方案 »
- 【高分悬赏】高手进,如何用c#获取这个页面中表格的数据
- 求助:float转换为int,数值发生改变;另求一个算法!
- c# 调用c dll 无法找到入口
- datagridview中下拉框问题。
- 窗体模式下的文本编辑器控件
- .NET下的DLL的引用!
- 父窗体Form2,里面有一个PictureBox1;子窗体Form3,里面有Button1,如何通过按Button1更改PictureBox1图片?
- "通常每个套接字只允许使用一次"出现这个错误怎么办?
- 五十分,最先成功解答请全收下
- 急急,马上给分!WEB应用中文件的读写权限问题!!
- 关于Enumerator<T>的实现,有代码,有图,高手来指点下,一定要给个答案, 不知道这是什么C#鸟语法
- C#连access接数据库,指定记录的密码无法获取,程序如下,请大神们帮忙啊
How to get Printer Submitted Jobs in C# ?#region GetPrintJobsCollection /// <summary>
/// Returns the jobs in printer queue
/// </summary>
/// <param name="printerName">Printer Name.</param>
/// <returns>StringCollection</returns>
public StringCollection GetPrintJobsCollection(string printerName)
{
StringCollection printJobCollection = new StringCollection();
try
{
//Query the printer to get the files waiting to print.
string searchQuery = "SELECT * FROM Win32_PrintJob"; ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(searchQuery);
ManagementObjectCollection prntJobCollection = searchPrintJobs.Get();
foreach (ManagementObject prntJob in prntJobCollection)
{
String jobName = prntJob.Properties["Name"].Value.ToString(); //Job name would be of the format [Printer name], [Job ID]
char[] splitArr = new char[1];
splitArr[0] = Convert.ToChar(",");
string prnName = jobName.Split(splitArr)[0];
string documentName = prntJob.Properties["Document"].Value.ToString();
if (String.Compare(prnName, printerName, true) == 0)
{
printJobCollection.Add(documentName);
}
}
}
catch (Exception ex)
{
// Log the exception.
}
return printJobCollection;
} #endregion GetPrintJobsCollection
How to Cancel Printing in C# ?#region CancelPrintJob /// <summary>
/// Cancel the print job. This functions accepts the job number.
/// An exception will be thrown if access denied.
/// </summary>
/// <param name="printJobID">int: Job number to cancel printing for.</param>
/// <returns>bool: true if cancel successfull, else false.</returns>
public bool CancelPrintJob(int printJobID)
{
// Variable declarations.
bool isActionPerformed = false;
string searchQuery;
String jobName;
char[] splitArr;
int prntJobID;
ManagementObjectSearcher searchPrintJobs;
ManagementObjectCollection prntJobCollection;
try
{
// Query to get all the queued printer jobs.
searchQuery = "SELECT * FROM Win32_PrintJob";
// Create an object using the above query.
searchPrintJobs = new ManagementObjectSearcher(searchQuery);
// Fire the query to get the collection of the printer jobs.
prntJobCollection = searchPrintJobs.Get(); // Look for the job you want to delete/cancel.
foreach (ManagementObject prntJob in prntJobCollection)
{
jobName = prntJob.Properties["Name"].Value.ToString();
// Job name would be of the format [Printer name], [Job ID]
splitArr = new char[1];
splitArr[0] = Convert.ToChar(",");
// Get the job ID.
prntJobID = Convert.ToInt32(jobName.Split(splitArr)[1]);
// If the Job Id equals the input job Id, then cancel the job.
if (prntJobID == printJobID)
{
// Performs a action similar to the cancel
// operation of windows print console
prntJob.Delete();
isActionPerformed = true;
break;
}
}
return isActionPerformed;
}
catch (Exception sysException)
{
// Log the exception.
return false;
}
} #endregion CancelPrintJob