Windows, заблокировать процесс от печати - PullRequest
2 голосов
/ 11 марта 2011

Может ли процесс Windows заблокировать печать другого процесса?

По сути, мы пытаемся сократить расходы в офисе и хотим, чтобы люди не печатали свои электронные письма. Поэтому меня спросили, можно ли написать программу для блокировки или отмены любых заданий на печать, поступающих из Outlook.

Может использовать решение на любом языке или API, независимо от того, что работает.

У нас есть пользователи Win XP и Win 7.

Ответы [ 3 ]

1 голос
/ 12 марта 2011

На самом деле нет хорошего способа сделать это в Windows.

Кроме того, это не похоже на технологическую проблему.

Поставьте в принтер только одну стопку бумагив месяц.Пусть все знают, что запас бумаги ограничен.

Очевидный обходной путь - пользователи приносят свою бумагу, но это значительно снижает эксплуатационные расходы, так что это не проблема.

1 голос
/ 14 марта 2011

По сути, это самое близкое, что я мог найти для этого. Если, в основном, требуется, чтобы задание на печать появилось с определенным именем задания, а затем отмените это задание.

Технически, хотя, я думаю, что ответ на мой квест - нет, так как я спросил, могу ли я сделать это по процессу. Хотя ниже подходит близко. Он просто распечатывает задания, которые выполняются, и отменяет любое задание на печать, в заголовке которого указано 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
1 голос
/ 11 марта 2011

Вы используете сетевой принтер? Если это так, вы можете просто проверить журнал принтера (или сервера печати) и, соответственно, «обучить» своих пользователей, это избавит вас от необходимости писать такую ​​программу и развернет ее на каждом компьютере (и убедитесь, что никто не сможет переопределить его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...