Получить имя файла при печати - PullRequest
1 голос
/ 01 февраля 2011

Есть ли способ определить имя файла, когда пользователь печатает из какого-либо приложения, где-то в событиях принтера? Я ищу Windows API, где я могу определить, какой файл печатается.

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

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

1 голос
/ 28 июня 2014

Нет, нет, по крайней мере, не надежно. Имейте в виду, что имя файла может вообще не быть. Например, я мог бы открыть приложение, такое как блокнот, напечатать что-нибудь и напечатать. Какой файл я печатаю? Никто.

В приведенном выше сценарии большинство приложений предоставляют какое-либо имя файла по умолчанию, например, «без названия», и иногда вы можете найти это имя, проанализировав имя задания на печать. Например, если вы вызываете GetJob, элемент JOB_INFO_1 структуры *1004* будет содержать указатель на имя задания на печать, и это имя часто будет содержать имя файла.

Однако, каждое приложение форматирует его по-своему, а некоторые вообще не предоставляют его. Таким образом, ответ заключается в том, что вы можете найти имя файла, возможно, в 75% случаев, приложив много усилий, но просто не существует 100% решения.

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

Драйвер принтера не имеет внешнего API для поиска имени файла.Я предполагаю, что вы собираетесь создать какое-то приложение-агент типа systray, которое отслеживало бы очереди печати на отправляемые задания.Если это так -

  1. См. http://support.microsoft.com/kb/196805 для инструмента Microsoft, который позволяет отслеживать очереди печати для состояния задания печати
  2. См. http://msdn.microsoft.com/en-us/library/ff562742%28v=vs.85%29.aspx, которыйобъясняет, как Windows поддерживает уведомления о смене принтера.Вы можете создать приложение, которое зарегистрируется для этого и получить дескриптор очереди печати.Получив дескриптор, вы можете вызвать API-интерфейсы GetPrinter и GetJob, чтобы получить доступ к структуре JOB_INFO_2.Имя pDocumentName в структуре JOB_INFO_2 - это имя файла

Надеюсь, это поможет.Если это так, пожалуйста, проголосуйте +1:)

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