他们的任何方式为Windows进程阻止打印另一个进程?
基本上我们正在努力削减办公室的成本,我们想阻止人们打印他们的电子邮件。 所以我被问到是否有可能编写一个程序来阻止或取消来自Outlook的任何打印作业。
无论使用什么语言或API,都可以使用解决scheme。
我们有Win XP和Win 7用户。
真的没有一个好办法在Windows上做到这一点。
此外,这似乎不是一个技术问题。
每个月只能给打印机提供一张纸。 让大家知道纸张供应是有限的。
显而易见的解决办法是用户自带纸张,但这会大大降低运营成本,所以这不是一个真正的问题。
你使用网络打印机吗? 如果是这样,你可以简单地审计打印机的日志(或打印服务器),并相应地“教育”你的用户,这将节省你编写这样一个程序的麻烦,并部署在每台电脑(并确保没有用户可以重写它)。
基本上,这是我能找到的最接近的。 如果基本上等待打印作业显示一个特定的作业名称,然后取消该作业。
不过从技术上讲,我认为我的任务答案是否定的,因为我问我是否可以通过流程来做到这一点。 虽然下面接近。 它只是打印正在发生的作业,并取消任何在其标题中显示MS Outlook的打印作业。 字典的东西只是不让列出相同的工作一堆。
Imports System.Printing modulee modulee1 Sub Main() Using ps As New Printserver("\\server") Using Pq = ps.GetPrintQueue("printer") Dim DetectedJobs As New Dictionary(Of DateTime, String) Do Dim Pj = Pq.GetPrintJobInfoCollection For Each job In Pj If Not (DetectedJobs.ContainsKey(job.TimeJobSubmitted) AndAlso DetectedJobs(job.TimeJobSubmitted) = job.Name) Then DetectedJobs.Add(job.TimeJobSubmitted, job.Name) Console.WriteLine(job.Name & "," & job.JobIdentifier & "," & job.TimeJobSubmitted) End If If job.Name.Contains("Microsoft Office Outlook") Then job.Cancel() Console.WriteLine(job.Name & "," & job.JobIdentifier & "," & job.TimeJobSubmitted & " - Cancelled") End If job.Dispose() Next Pj.Dispose() Threading.Thread.Sleep("200") Loop End Using End Using Console.ReadKey() End Sub End modulee