100分求助:各位高手,我想获取打印机的状态信息,该如何处理啊!

guoxinwei 2005-09-26 08:47:17
各位高手,我想获取打印机的状态信息,在网上已经搜索一天了,有说用MScomm的,有用WINIO.DLL的,可是我一个也不会,各位高手帮帮我啊,谢谢!!
...全文
644 点赞 收藏 32
写回复
32 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
guoxinwei 2005-09-28
好的,我试试,gdi32.dll中有AbortDoc函数和abortPrinter函数,用哪个好呢?
回复
fsdy2000 2005-09-28
调gdi32.dll中的AbortDoc函数。或System.Drawing.Printing域下的类可能有帮助。你看看
回复
guoxinwei 2005-09-28
是的,都怪我没有说清楚。 fsdy2000(乡愁) ,你好,可否给我一个如何使用API函数来做取消当前的打印作业的例子吗?谢谢了!
回复
fsdy2000 2005-09-28
对打印机任务的操作都在WinXP以后才出现。如果你访问打印机状态信息可以使用WMI类。你的问题中只说明要“获取打印机的状态信息”,所以没有细研。你使用API函数来做"如何通过程序控制取消当前的打印作业"
回复
guoxinwei 2005-09-28
那该如何是好啊?
回复
guoxinwei 2005-09-28
这是MSDN的提示:CancelAllJobs Method of the Win32_Printer Class
Requirements
Client Requires Windows "Longhorn" or Windows XP.
Server Requires Windows Server "Longhorn" or Windows Server 2003.
MOF Declared in Cimwin32.mof.

DLL Requires Cimwin32.dll.
Namespace Defined in \root\cimv2.
这是网址:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_printer.asp

回复
fsdy2000 2005-09-28
不好意思,该方法只能在WinXp以上。
回复
fsdy2000 2005-09-28
win2000下应该也行,主要注意你在Win2000下WMI的安装,以及打印机驱动。
回复
guoxinwei 2005-09-28
fsdy2000(乡愁) ,谢谢,我按照上面的作了,可是该程序只能在win XP下使用,在Win2000下不能使用,该咋办!!2000的提示为:未处理的“System.Management.ManagementException”类型的异常出现在 system.management.dll 中。

其他信息: 没有任何类别中执行这个方法
回复
fsdy2000 2005-09-28
CancelAllJobs是Win32_Printer WMI类的方法,不是Win32_PrintJob的。如果是要取消某打印机所有的,就用"SELECT * FROM Win32_Printer",即再上面的例子,将其中的mo.InvokeMethod("SetDefaultPrinter",null); 改为mo.InvokeMethod("CancelAllJobs",null);
回复
rainraid 2005-09-27
帮你顶!
回复
guoxinwei 2005-09-27
这是我的代码:public void CancelPrint()
{
ConnectionOptions co = new ConnectionOptions();
co.Impersonation = ImpersonationLevel.Impersonate;
co.EnablePrivileges = true;

ManagementScope mc = new ManagementScope(@"\ROOT\CIMV2", co);
ObjectQuery oQuery = new ObjectQuery("Select * from Win32_PrintJob");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(mc, oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
foreach( ManagementObject oReturn in oReturnCollection )
{
oReturn.InvokeMethod("CancelAllJobs",null);
}
}
错误信息如下:其他信息: 没有任何类别中执行这个方法
回复
guoxinwei 2005-09-27
fsdy2000(乡愁)你好,我是C#新手,可否把InvokeMethod("CancelAllJobs")贴一段代码上来,我不会用,谢谢了!
回复
guoxinwei 2005-09-27
谢谢fsdy2000(乡愁),我用Win32_PrintJob试试。
回复
fsdy2000 2005-09-27
最好是使用名字为"Win32_PrintJob"的WMI类来完成你的工作。祝你成功!
回复
fsdy2000 2005-09-27
通过其AvailableJobSheets属性可获取到打印机上活动的打印任务
回复
fsdy2000 2005-09-27
你可以通过InvokeMethod("CancelAllJobs")取消打印。还有Pause/PrintTestPage/Rest等等
回复
guoxinwei 2005-09-27
不会没有人知道吧!要不我重新再开一个帖子!
回复
guoxinwei 2005-09-27
我刚才考虑是否可以用dos下的取消打印命令cancel,可是如何使用呢?
回复
guoxinwei 2005-09-27
谢谢 YAOHE(吆喝),帮顶也谢谢!
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2005-09-26 08:47
社区公告

让您成为最强悍的C#开发者