关于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); //调用了其方法,可修改此处获取相关状态属性