Форум » [x]Harbour » Узнать что отправлено на принтер ? » Ответить

Узнать что отправлено на принтер ?

Andrey: Можно ли узнать из своей проги что отправлено на печать ? Т.е. нужно вести лог, какие документы из программы отправляли на печать. Соответственно из Харбора напрямую и если из программы подняли Ворд/Эксель - то перехватить была ли печать из них. Нужен учёт распечатанных файлов на принтере ! Сейчас делаю тупо список открытых файлов для печати, а отпечатались они или нет не знаю как сделать.

Ответов - 12

Pasha: Вот пишут, как активировать в windows журнал печати: https://www.white-windows.ru/zhurnal-pechati-i-kak-ego-vklyuchit-v-windows-10/ Вот еще: https://printeru.info/poleznoe/istoria-pechati-printera

Dima: Pasha Опередил :)

Andrey: Не совсем то. Там все события печати, вдобавок принтер могут переставить или админ уберёт эту галочку. Вариантов много, а мне потом разгребать не хочется. И категория - Печать документа вообще ни о чём не говорит. У меня юзера печатают допустим адрес и договор по нему, формируется документ с названием "Moskow,Kirova,d.22a,kv3.doc" Как узнать отпечатался он или нет ? Т.е. в принципе мне нужно просто знать, отправили ли документ в печать или нет. Была ли печать МОЕГО документа или нет ? А бумаги не было в принтере или другое событие, мне не интересно.


Pasha: Не все хотелки можно реализовать, иногда их приходится поумерить. Делать запись в лог при печати из программы как я понимаю проблему не составит. Насчет word/excel - можно перед показом их на экране, т.е. команды "Visible := .t.", выдавать через word/excel команду print с записью в лог Хочется показать документ word/excel юзеру - после печати показать его в режиме preview

Andrey: Для C# какое то решение есть https://stackoverflow.com/questions/4276269/printing-event-on-c-sharp# А как быть для Харбора ?

Dima: Так там через WMI однако а он в Harbour доступен , бери и пробуй.

Pasha: Андрей, как бы это тебе ничего не даст Там создается некий объект для нужного принтера, и в цикле его надо опрашивать пока не надоест Возвращаются события, связанные с принтером, но не указывается приложение, которое вызвало это событие, и что за событие Событие вроде такого: PRINTER_CHANGE_ADD_JOB: A print job was sent to the printer. Кто послал это задание на печать, что за задание - науке это неизвестно В журнале печати думаю информации для анализа будет куда больше. Я его конечно не смотрел, мне такая экзотика на нужна. Включи и посмотри, что там Насчет админа, который отрубит этот журнал: так его можно предупредить, чтобы не отрубал, если это так важно. Проблемы можно решать не только программными, но и административно-организационными методами

PSP: На мой взгляд, свои логи - то, что нужно.

Haz: Dima пишет: Так там через WMI однако а он в Harbour доступен , бери и пробуй Все верно Только анализировать надо win32_printjob. Подключается по wmi и в цикле мониторим очередь после запуска word/excel и до тех пор пока процесс word/excel выполняется . В очереди будет информация о пользователей, имени файла отправленного на печать , время постановки и другая дребедень. Смысл простой, прямые вызовы печати ловим сразу в лог, а запуск word/excel мониторим в очереди. Знаем же какой документ какой пользователь запустил, его и ищем в цикле. Если нашли, значит пользователь нажал кнопку print

Andrey: Haz пишет: Только анализировать надо win32_printjob. Подключается по wmi Дай пожалуйста пример кода. Haz пишет: и в цикле мониторим очередь после запуска word/excel и до тех пор пока процесс word/excel выполняется . А слабенькие компы после такого не повиснут ? Какой период опроса мониторинга нужно ставить ? Кроме Ворда/Экселя использую Calc/Write + FastReport. Пока нужно отлавливать Ворд и FastReport

Haz: Andrey пишет: Дай пожалуйста пример кода. попробуй сам написать. Как с wmi работать примеры есть. PS. Опрашивать можно в потоке. PPS. Мне не до экспериментов сейчас

Dima: Andrey пишет: Дай пожалуйста пример кода. Спроси гугл , примеров как говна мусора Например https://www.cyberforum.ru/vba/thread812050.html https://wutils.com/wmi/root/cimv2/win32_printjob/ ........ Спросить дядю гугл можно так wmi win32_printjob vba Примеры как работать с WMI есть в твоём любимом MiniGui PS Код с VBA довольно уверенно и просто переводится в Harbour



полная версия страницы