C#当前打印队列问题

问题描述

C#如何获取当前打印队列如果打印队列有多个任务,如何获取当前打印的队列我现在只能获取所有的队列stringprintName=bus.GetAttrValueByUserName("选择打印机",Business.userName);PrintServerps=newPrintServer(PrintSystemDesiredAccess.AdministrateServer);PrintQueuepq=newPrintQueue(ps,printName,PrintSystemDesiredAccess.AdministratePrinter);PrintSystemJobInfojobInfo=null;PrintSystemJobInfopreJobInfo=null;while(jobInfo==null){pq.Refresh();varprintJobs=pq.GetPrintJobInfoCollection();foreach(varprintJobinprintJobs){}}

解决方案

解决方案二:
没人吗,自己顶
解决方案三:
c#获取和取消本地打印队列Dictionary<string,int>GetAllPrinterQueues(){RaiseLog("Gettingprintqueuecounts");Dictionary<string,int>TempDict=newDictionary<string,int>();PrintServermyPrintServer=newPrintServer();//GetalltheprintersinstalledonthisPC//Listtheprintserver'squeuesPrintQueueCollectionmyPrintQueues=myPrintServer.GetPrintQueues();StringprintQueueNames="MyPrintQueues:nn";foreach(PrintQueuepqinmyPrintQueues){Saint.StCommon.Wait((decimal)2000);//2secondsof"Application.DoEvents(),notthreadsleepif(GotPingBack(pq.Name)){intPGcount=0;try{if(pq.NumberOfJobs>0){//Weknowtherearejobs.Sowe*have*tobeabletogetthecollectionatsomepointDateTimeBailout=DateTime.Now.AddSeconds(10);//Keeptryingfor10secondsoruntilIgetavalidresponsestringErrMsg="notyetretreived";while(Bailout>DateTime.Now&&ErrMsg!=string.Empty){try{varJobs=pq.GetPrintJobInfoCollection();Saint.StCommon.Wait((int)2);foreach(PrintSystemJobInfoJobinJobs){PGcount+=Job.NumberOfPages;ErrMsg=string.Empty;}}catch(Exceptionk){ErrMsg=k.Message;Console.WriteLine(string.Format("{0}:{1}",pq.Name,k.Message));}}}}catch{Console.WriteLine("Exceptiondork");}Console.WriteLine(string.Format("{2}t{0}t{1}",pq.Name,PGcount,DateTime.Now.ToString("HH:mm:ss.fff")));TempDict.Add(pq.Name,PGcount);}}returnTempDict;}publicboolCancelPrintJob(intprintJobID){//Variabledeclarations.boolisActionPerformed=false;stringsearchQuery;StringjobName;char[]splitArr;intprntJobID;ManagementObjectSearchersearchPrintJobs;ManagementObjectCollectionprntJobCollection;try{//Querytogetallthequeuedprinterjobs.searchQuery="SELECT*FROMWin32_PrintJob";//Createanobjectusingtheabovequery.searchPrintJobs=newManagementObjectSearcher(searchQuery);//Firethequerytogetthecollectionoftheprinterjobs.prntJobCollection=searchPrintJobs.Get();//Lookforthejobyouwanttodelete/cancel.foreach(ManagementObjectprntJobinprntJobCollection){jobName=prntJob.Properties["Name"].Value.ToString();//Jobnamewouldbeoftheformat[Printername],[JobID]splitArr=newchar[1];splitArr[0]=Convert.ToChar(",");//GetthejobID.prntJobID=Convert.ToInt32(jobName.Split(splitArr)[1]);//IftheJobIdequalstheinputjobId,thencancelthejob.if(prntJobID==printJobID){//Performsaactionsimilartothecancel//operationofwindowsprintconsoleprntJob.Delete();isActionPerformed=true;break;}}returnisActionPerformed;}catch(ExceptionsysException){//Logtheexception.returnfalse;}}

解决方案四:
引用2楼hefeng_aspnet的回复:

c#获取和取消本地打印队列Dictionary<string,int>GetAllPrinterQueues(){RaiseLog("Gettingprintqueuecounts");Dictionary<string,int>TempDict=newDictionary<string,int>();PrintServermyPrintServer=newPrintServer();//GetalltheprintersinstalledonthisPC//Listtheprintserver'squeuesPrintQueueCollectionmyPrintQueues=myPrintServer.GetPrintQueues();StringprintQueueNames="MyPrintQueues:nn";foreach(PrintQueuepqinmyPrintQueues){Saint.StCommon.Wait((decimal)2000);//2secondsof"Application.DoEvents(),notthreadsleepif(GotPingBack(pq.Name)){intPGcount=0;try{if(pq.NumberOfJobs>0){//Weknowtherearejobs.Sowe*have*tobeabletogetthecollectionatsomepointDateTimeBailout=DateTime.Now.AddSeconds(10);//Keeptryingfor10secondsoruntilIgetavalidresponsestringErrMsg="notyetretreived";while(Bailout>DateTime.Now&&ErrMsg!=string.Empty){try{varJobs=pq.GetPrintJobInfoCollection();Saint.StCommon.Wait((int)2);foreach(PrintSystemJobInfoJobinJobs){PGcount+=Job.NumberOfPages;ErrMsg=string.Empty;}}catch(Exceptionk){ErrMsg=k.Message;Console.WriteLine(string.Format("{0}:{1}",pq.Name,k.Message));}}}}catch{Console.WriteLine("Exceptiondork");}Console.WriteLine(string.Format("{2}t{0}t{1}",pq.Name,PGcount,DateTime.Now.ToString("HH:mm:ss.fff")));TempDict.Add(pq.Name,PGcount);}}returnTempDict;}publicboolCancelPrintJob(intprintJobID){//Variabledeclarations.boolisActionPerformed=false;stringsearchQuery;StringjobName;char[]splitArr;intprntJobID;ManagementObjectSearchersearchPrintJobs;ManagementObjectCollectionprntJobCollection;try{//Querytogetallthequeuedprinterjobs.searchQuery="SELECT*FROMWin32_PrintJob";//Createanobjectusingtheabovequery.searchPrintJobs=newManagementObjectSearcher(searchQuery);//Firethequerytogetthecollectionoftheprinterjobs.prntJobCollection=searchPrintJobs.Get();//Lookforthejobyouwanttodelete/cancel.foreach(ManagementObjectprntJobinprntJobCollection){jobName=prntJob.Properties["Name"].Value.ToString();//Jobnamewouldbeoftheformat[Printername],[JobID]splitArr=newchar[1];splitArr[0]=Convert.ToChar(",");//GetthejobID.prntJobID=Convert.ToInt32(jobName.Split(splitArr)[1]);//IftheJobIdequalstheinputjobId,thencancelthejob.if(prntJobID==printJobID){//Performsaactionsimilartothecancel//operationofwindowsprintconsoleprntJob.Delete();isActionPerformed=true;break;}}returnisActionPerformed;}catch(ExceptionsysException){//Logtheexception.returnfalse;}}

获取所有队列我能获取到,我想获取的是当前打印的那个队列,请问有办法吗

时间: 2024-12-27 04:43:20

C#当前打印队列问题的相关文章

打印队列里的打印任务清除方法

  在使用打印时有时会发生故障,无法打印.我们想清除打印队列里的打印任务,却无法删除,可以采取以下方法: 依次点击"开始"→"运行"→"services.msc"→"打开服务窗口,找到"Print Spooler"服务,点击左侧 "停止此服务" ,停止打印机服务. 依次点击"开始"→"运行"→"spool",在"spool&qu

打印队列-PrintQueue.Purge()报Win32错误:拒绝访问

问题描述 PrintQueue.Purge()报Win32错误:拒绝访问 我在C#里获取打印队列PrintQueue时,调用暂停打印Pause.恢复打印Resume.取消打印Purge时,报了Win32错误:拒绝访问的错误,请问这是什么原因呢? 示例代码如下: using (PrintServer ps = new PrintServer()) { using (PrintQueue pq = new PrintQueue(ps, "打印机名称", PrintSystemDesired

C# 打印时 如何获取发送到打印队列里的jobid

问题描述 C#打印时如何获取打印队列里指定的jobid我已经能获取到打印队列里所有的jobid,代码如下:publicstaticStringCollectionGetPrintJobsCollection(stringprinterName){StringCollectionprintJobCollection=newStringCollection();stringsearchQuery="SELECT*FROMWin32_PrintJob";/*searchQuerycanals

Winform 打印PDF顺序混乱,获取打印队列

原文:Winform 打印PDF顺序混乱,获取打印队列 工作中PDF打印顺序混乱着实让我疼痛了好久,其实决绝方法非常简单,但没有想到这个点子的时候确实让我走了很多弯路 这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享出来而已,同时也做个记录,方便以后查找 开始正文 既然要解决打印顺序混乱,那么必须先要实现打印PDF功能,实现PDF打印的方法很多,网上随便一搜就可以找到,这里我贴上自己的打印方法,其实也是网上找到的,稍稍做了修改 Process proc = new Process()

清除打印队列堵塞.bat

复制以下内容,保存到文本文档,文本文档扩展名txt改为"清除.bat" 道理很简单其实就是禁用打印服务然后清除内容,重新启用打印服务. net stop spooler del %SystemRoot%system32spoolPRINTERS*.* /q net start spooler

数据结构――栈、队列和树(Java)

数据|数据结构 数据结构――栈.队列和树 开发者可以使用数组与链表的变体来建立更为复杂的数据结构.本节探究三种这样的数据结构:栈.队列与树.当给出算法时,出于简练,直接用Java代码. 栈 栈是这样一个数据结构,其数据项的插入和删除(获取)都只能在称为栈顶的一端完成.因为最后插入的数据项就是最先要删除的数据项,开发者往往将栈称为LILO(last-in, first-out)数据结构. 数据项压入(插入)或者弹出(删除或取得)栈顶.图13示例了一个有三个String数据项的栈,每个数据项压入栈顶

大话数据结构九:队列的链式存储结构(链队列)

1. 链队列的特点: 链队列其实就是单链表,只不过它是先进先出的单链表,为了实现方便,程序中设置了队头(front),队尾(rear)两个指针. 2. Java使用链表实现队列: //结点类,包含结点的数据和指向下一个节点的引用 public class Node<E> { private E data; // 数据域 private Node<E> next; // 指针域保存着下一节点的引用 public Node() { } public Node(E data) { thi

PB中数据窗口的精确页面打印技术

1.引言 自PowerBuild4.0问世以来,以其简洁高效的集成开发环境.强大的数据窗口技术.(几乎)无所不能的数据库访问能力,越来越受到编程人员的青睐.据Sybase自己的统计,目前全球有60万程序员和系统分析人员在使用他们的Powerbuilder和S-designer,进行各种类型的应用程序开发.最新发布的PowerBuilder6.0族系列开发工具,直接支持ActiveX技术.ServerPush技术,对分布式计算模型的定义更加明确,实现更为简便,并可以利用数据窗口直接生成HTML格式

强化Windows Server 2008下的打印管理

打印管理从来都是Windows Server服务管理的重要方面,在Windows Server 2008中针对打印管理做了很多改进,也提供了不少新功能.本文将与大家分享笔者在利用Windows Server 2008进行打印管理方面的三个技巧,希望对大家有所帮助. 1.添加打印机或打印服务器到打印管理控制台 打印管理控制台是我们在Windows Server 2008下管理打印机和打印服务器的首选工具.当我们在Windows Server 2008中安装完打印服务后,就可以利用打印管理控制台进行