Windows,阻止打印过程

时间:2011-03-11 20:22:52

标签: windows printing

他们以任何方式阻止Windows进程打印另一个进程吗?

基本上我们正在努力降低办公室的成本,我们希望阻止人们打印他们的电子邮件。所以我被问到是否可以编写一个程序来阻止或取消从Outlook中提交的任何打印作业。

可以使用任何语言或API的解决方案,无论有效。

我们有Win XP和Win 7用户。

3 个答案:

答案 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