我使用以下例程来获取打印机队列作业。出于某种原因,他们似乎处于错误的顺序......
常规获取打印机作业列表:
private List<string> GetPrinterQueueJobs(string targetPrinterName)
{
List<string> jobs = new List<string>();
string unc = null;
string printerName = targetPrinterName;
if (printerName.Contains("\\"))
{
string[] printerNameParts = printerName.Split('\\');
unc = printerNameParts[0];
printerName = printerNameParts[1];
}
PrintQueue printQue = null;
if (unc == null)
{
//local printer
printQue = new LocalPrintServer().GetPrintQueue(printerName);
}
else
{
//remote printer
printQue = new PrintServer(unc).GetPrintQueue(printerName);
}
foreach (PrintSystemJobInfo queItem in printQue.GetPrintJobInfoCollection())
{
jobs.Insert(queItem.PositionInPrintQueue - 1, queItem.Name);
}
return jobs;
}
常规用法:
private void cbPrinters_SelectedIndexChanged(object sender, EventArgs e)
{
List<string> printers = GetListOfPrinters();
ComboBox cb = (ComboBox)sender;
string printerName = cb.Text;
if (printers.Contains(printerName))
{
List<string> printerQue = GetPrinterQueueJobs(printerName);
foreach (string queItem in printerQue)
{
ListViewItem lvi = new ListViewItem(queItem);
lvPrintQueue.Items.Add(lvi);
}
}
}
正如你在这种情况下所看到的,它们是倒置的。疯狂的是,当单步执行例程时,我还会检查“PositionInPrintQueue”属性,它似乎认为作业实际上是按照我返回的结果中显示的顺序。
为什么会这样?有没有人对如何以正确的顺序返回它们有任何想法?
谢谢!
答案 0 :(得分:0)
事实证明Windows打印机队列没有按顺序显示项目!默认情况下,它不会显示作业的顺序! Windows打印机队列中没有“队列ID”,“队列索引”或“作业顺序”列的类型。查看作业时,您可以按作业名称,状态,所有者,页面,大小,端口和提交进行排序。
如果您按提交排序,则它们都应与GetPrintJobInfoCollection()
方法中返回的结果相匹配。但最后,不要相信Windows Printer Queue的作业顺序,请相信GetPrintJobInfoCollection()
方法中返回的顺序。