他们以任何方式阻止Windows进程打印另一个进程吗?
基本上我们正在努力降低办公室的成本,我们希望阻止人们打印他们的电子邮件。所以我被问到是否可以编写一个程序来阻止或取消从Outlook中提交的任何打印作业。
可以使用任何语言或API的解决方案,无论有效。
我们有Win XP和Win 7用户。
答案 0 :(得分:1)
您使用的是网络打印机吗?如果是这样,您只需审核打印机的日志(或打印服务器)并相应地“教育”您的用户,它将为您节省编写此类程序的麻烦并将其部署在每台PC上(并确保没有用户可以覆盖它。)
答案 1 :(得分:1)
在Windows上实际上没有一种好方法。
此外,这似乎不是技术问题。
每月为打印机提供一张纸。让每个人都知道纸张供应是有限的。
明显的工作是用户会自带纸张,但这会大大降低运营成本,所以这不是一个真正的问题。
答案 2 :(得分:1)
基本上,这是我能找到的最接近的。如果基本上等待打印作业显示特定的作业名称,然后取消该作业。
从技术上讲,我认为我的任务的答案是否定的,因为我问我是否可以按流程执行此操作。虽然下面的内容很接近。它只打印出正在发生的作业,并取消任何在其标题中显示MS Outlook的打印作业。字典的事情就是让它不会多次列出相同的工作。
Imports System.Printing
Module Module1
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 Module