CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

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

楼主guoxinwei()2005-09-26 20:47:17 在 .NET技术 / C# 提问

各位高手,我想获取打印机的状态信息,在网上已经搜索一天了,有说用MScomm的,有用WINIO.DLL的,可是我一个也不会,各位高手帮帮我啊,谢谢!! 问题点数:100、回复次数:32Top

1 楼guoxinwei()回复于 2005-09-26 20:48:21 得分 0

在线等!Top

2 楼guoxinwei()回复于 2005-09-26 20:51:28 得分 0

大家帮帮我啊,领导催的很急!Top

3 楼guoxinwei()回复于 2005-09-26 20:57:32 得分 0

没有人知道吗?是Winform的,给点思路也行,我坐了一天,脖子疼的受不了!Top

4 楼usepc(usepc)回复于 2005-09-26 21:31:58 得分 5

http://community.csdn.net/Expert/topic/4138/4138007.xml?temp=.1959345Top

5 楼tslkfyh(TSL)回复于 2005-09-26 21:35:31 得分 0

UPTop

6 楼guoxinwei()回复于 2005-09-26 21:47:16 得分 0

谢谢usepc(usepc),可以给我一个更详细的说明吗?谢谢!!Top

7 楼guoxinwei()回复于 2005-09-26 21:53:25 得分 0

给点思路也行,最好是C#版的,谢谢了!Top

8 楼rainraid()回复于 2005-09-27 12:46:39 得分 0

帮你顶!Top

9 楼fsdy2000(乡愁)回复于 2005-09-27 13:14:26 得分 0

可以使用WMI进行查询Top

10 楼fsdy2000(乡愁)回复于 2005-09-27 13:24:15 得分 95

如:设置默认打印机  
  using   System.Management;  
   
      private   ManagementObjectSearcher   query;  
      private   ManagementObjectCollection   queryCollection;  
      string   _classname="SELECT   *   FROM   Win32_Printer";  
   
    query=new   ManagementObjectSearcher(_classname);                          
    queryCollection   =   query.Get();  
   
    foreach   (ManagementObject   mo   in   queryCollection)  
    {                  
          if   (string.Compare(mo["Name"].ToString(),PrinterName,true)==0)  
          {  
                  mo.InvokeMethod("SetDefaultPrinter",null);       //调用了其方法,可修改此处获取相关状态属性  
                  break;  
          }  
    }  
  相同的方法,你在得到具体的打印机实例时,可以获取到其相关属性,再显示出来即可。Top

11 楼guoxinwei()回复于 2005-09-27 15:00:22 得分 0

谢谢   fsdy2000(乡愁),你是高手,可否告诉我如何取消当前打印作业啊!我是指通过程序控制,就像VB里的KillDoc的一样Top

12 楼guoxinwei()回复于 2005-09-27 15:24:22 得分 0

各位高手,帮帮我啊,如何通过程序控制取消当前的打印作业,解决了就结贴!Top

13 楼YAOHE(吆喝)回复于 2005-09-27 15:42:56 得分 0

最近一年没有用上过打印控制,呵呵,帮不上忙,只好给你UPTop

14 楼guoxinwei()回复于 2005-09-27 15:46:19 得分 0

谢谢   YAOHE(吆喝),帮顶也谢谢!Top

15 楼guoxinwei()回复于 2005-09-27 16:38:25 得分 0

我刚才考虑是否可以用dos下的取消打印命令cancel,可是如何使用呢?Top

16 楼guoxinwei()回复于 2005-09-27 16:53:55 得分 0

不会没有人知道吧!要不我重新再开一个帖子!Top

17 楼fsdy2000(乡愁)回复于 2005-09-27 17:06:04 得分 0

你可以通过InvokeMethod("CancelAllJobs")取消打印。还有Pause/PrintTestPage/Rest等等Top

18 楼fsdy2000(乡愁)回复于 2005-09-27 17:09:06 得分 0

通过其AvailableJobSheets属性可获取到打印机上活动的打印任务Top

19 楼fsdy2000(乡愁)回复于 2005-09-27 17:13:00 得分 0

最好是使用名字为"Win32_PrintJob"的WMI类来完成你的工作。祝你成功!Top

20 楼guoxinwei()回复于 2005-09-27 17:20:48 得分 0

谢谢fsdy2000(乡愁),我用Win32_PrintJob试试。Top

21 楼guoxinwei()回复于 2005-09-27 17:49:40 得分 0

fsdy2000(乡愁)你好,我是C#新手,可否把InvokeMethod("CancelAllJobs")贴一段代码上来,我不会用,谢谢了!Top

22 楼guoxinwei()回复于 2005-09-27 21:11:18 得分 0

这是我的代码: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);  
  }  
  }  
  错误信息如下:其他信息:   没有任何类别中执行这个方法Top

23 楼fsdy2000(乡愁)回复于 2005-09-28 09:37:12 得分 0

CancelAllJobs是Win32_Printer   WMI类的方法,不是Win32_PrintJob的。如果是要取消某打印机所有的,就用"SELECT   *   FROM   Win32_Printer",即再上面的例子,将其中的mo.InvokeMethod("SetDefaultPrinter",null);   改为mo.InvokeMethod("CancelAllJobs",null);Top

24 楼guoxinwei()回复于 2005-09-28 10:20:14 得分 0

fsdy2000(乡愁)   ,谢谢,我按照上面的作了,可是该程序只能在win   XP下使用,在Win2000下不能使用,该咋办!!2000的提示为:未处理的“System.Management.ManagementException”类型的异常出现在   system.management.dll   中。  
   
  其他信息:   没有任何类别中执行这个方法Top

25 楼fsdy2000(乡愁)回复于 2005-09-28 10:24:11 得分 0

win2000下应该也行,主要注意你在Win2000下WMI的安装,以及打印机驱动。Top

26 楼fsdy2000(乡愁)回复于 2005-09-28 10:27:28 得分 0

不好意思,该方法只能在WinXp以上。Top

27 楼guoxinwei()回复于 2005-09-28 10:27:29 得分 0

这是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  
     
  Top

28 楼guoxinwei()回复于 2005-09-28 10:28:12 得分 0

那该如何是好啊?Top

29 楼fsdy2000(乡愁)回复于 2005-09-28 10:33:23 得分 0

对打印机任务的操作都在WinXP以后才出现。如果你访问打印机状态信息可以使用WMI类。你的问题中只说明要“获取打印机的状态信息”,所以没有细研。你使用API函数来做"如何通过程序控制取消当前的打印作业"Top

30 楼guoxinwei()回复于 2005-09-28 10:36:39 得分 0

是的,都怪我没有说清楚。   fsdy2000(乡愁)   ,你好,可否给我一个如何使用API函数来做取消当前的打印作业的例子吗?谢谢了!  
  Top

31 楼fsdy2000(乡愁)回复于 2005-09-28 10:55:33 得分 0

调gdi32.dll中的AbortDoc函数。或System.Drawing.Printing域下的类可能有帮助。你看看Top

32 楼guoxinwei()回复于 2005-09-28 11:11:52 得分 0

好的,我试试,gdi32.dll中有AbortDoc函数和abortPrinter函数,用哪个好呢?Top

相关问题

  • VB获取打印机状态的方法! 在线等待!
  • 如何获取打印机状态,100分,急,在线等,
  • 怎样获取网络打印机的当前状态?
  • 如何获取系统默认打印机的状态?如是否缺纸等。
  • 打印机状态检测
  • 如何获取选择的打印机
  • 获取打印机信息问题.
  • 怎样判断打印机的状态
  • 在WIN2000下面,并口打印机怎么实现取打印机的状态
  • 如何获取打印机配置信息

关键词

  • c#
  • win2000
  • win32
  • 函数
  • 打印
  • 属性
  • 信息
  • 打印机
  • cancelalljobs
  • fsdy

得分解答快速导航

  • 帖主:guoxinwei
  • usepc
  • fsdy2000

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo