Здравствуйте. Столкнулся с задачей мониторинга печати по организации. В мониторинг входят: кол-во страниц, цветность,имя документа,имя пользователя,принтер. Пробывал различные подходы, но не один не устроил. 1. PrintNotifications - вешь хорошая, отлично работает для локальных принтеров - можно получить сколько было напречатано привязываясь к событию SetJob. Увы, но для сетевых принтеров это нормально не роботает. Одним словом, события о печати в этом случае не накапливаются в очереди и все зависит от того, насколько вы быстро возвращаетесь к ожиданию на WaitForSingleObject(hPrinterNotification) - т.е., если вы печатаете документ из 20 страниц на сетевой принтер, вы можете получить любое число от 0 до 20, т.к. когда вы, скажем получаете событие, вы видите там 8 страниц, записываете это, возвращаетесь к ожиданию, а событие больше не вызовется, т.к. 20-я страница напечаталась пока вы регистрировали 8 страниц. Так что этот путь не надежен. Варианты работать быстрее и прочее - не подходят. 2. Перехват методов в спулере печате spoolsv.exe http://forum.madshi.net/viewtopic.php?f=7&t=5082&start=15 http://forum.madshi.net/viewtopic.php?t=4046 Тут на дельфях описано как это делается и есть полная информация. Но во тело в том, что хочется перехватывать только ф-ии в spoolsv процессе, а не в других. Если посмотреть внимательно на http://msdn.microsoft.com/en-us/library/ff551775(VS.85).aspx, то видно, что все идет в spoolss.dll , и да, это работает для печати из накоторых программ, действительно, можно перехватить SetJobW, но вот при печати через Adobe Acrobat никакие хуки не вызываются. Допустим, что я предпологаю, что Acrobat печатает на более низком уровне, но в итоге в очереди печати я же вижу кол-во страниц, откуда-то же оно берется... Одним словом, не знаю с какой стороны к этому подойти. 3. Драйвер. Это конечно интересно, мощьно, но хочется всеже в UserMode все попробывать сначала. PS: Я полагаю задача эта решенная в узких кругах, т.к. некоторые поставщики принтеров снабжают клиентов таким софтом.
PavPS С первым вариантом и я сталкивался. Перехват происходил неравномерно. Нормального решения так и не нашел. Может гуру что подскажут?