读书人

关于c#监控打印机的有关问题(论坛中没

发布时间: 2013-09-11 16:26:28 作者: rapoo

关于c#监控打印机的问题(论坛中没有打印机版块,暂时发这里了)
目前c#去监控本地安装的打印机,包括网络打印机,这块都实现了,调用的winAPI实现的,目的是想要阻止用户打印,用户打印的时候,如果选择其他的打印机,任务将被拦截,并且清空打印任务,提醒用户使用我们提供的虚拟打印机进行打印.

目前我采取的拦截手段是,随机启动一个系统服务程序,实时监控PC机上安装的所有打印机,在打印队列中一旦出现打印任务,立刻清除.
现在的问题是:
在我的电脑上,打印队列中,很奇怪的出现了其他用户的打印任务,打印机是网络打印机,所有用户都是直接连接到网络打印机上的,相互之间并没有共享打印机,而且,网络打印机也无法共享,这就导致,我在拦截的时候,拦到了不是本机发出的打印任务,用户没打印,却会弹出提醒框,比较郁闷,无法区分出来,到底是本机的打印任务还是别人的打印任务.

希望有经验的人指点一下,如果有更好的监控拦截方式,请不吝赐教,小弟感激不尽.
[解决办法]
没有搞过这方面的,高深
不过你可以根据打印队列中打印所有者来进行对比,
看看,当前打印文档的所有者,是否是本机的计算机名,如果则提示,如果不是则不弹出提示
具体没有测试过,
只是提供一个思路,
不知道是是否可行
[解决办法]
共享的打印机你能监控到不?!
\\..\.
[解决办法]
获取打印任务


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;
}
}


[解决办法]
参考http://www.cnblogs.com/luckeryin/archive/2009/07/13/1522775.html
[解决办法]
监控打印机,包括网络的打印机.请问下是怎么实现的,我用了WMI,Win32_Printer 去获取打印机状态的,,无论打印是否连接上,或者卡纸,或者打开盖了,没纸,可是返回的结果总是正常的....你调用的winAPI是什么
[解决办法]
我现在也在做打印机打印,现在要做个监控打印机状态的,卡纸,异常等的所有状态。。。我用了很多方法都没法获取得到打印机的真实状态....有什么方法可以拿到真实的状态吗,求解????
[解决办法]
用网络打印机也要在客户端装驱动的这是无法避免的了。

读书人网 >C#

热点推荐