Перехват обращения к принтеру
В моей утилите мне необходимо отследить обращение программ к принтеру (следует подсчитать кол-во распечатанных страниц). Решение этой задачи в Linux/Unix очевидно. Для Windows я не созрел. Пытался отследить это событие с помощью WinSight - не получилось.
Может быть кто-нибудь подскажет решение в Windows? Вопроса собственно два. 1. Что это за событие? 2. Как мне его "потрогать" в моей утилите? Думаю, что можно было бы непрерывно читать события глобальной очереди через PeekMessage(). Но может быть есть более красивое решение - типа перехвата системного вызова (как в Linux/Unix). Заранее благодарен. |
knzsoft
1. Я думаю,это будет сообщение типа WM_PRINT . 2. Не уверен,но возможно получится установить хук на это сообщение и далее попробовать получить информацию "что да как" ... |
Спасибо за отклик. Попытался разобраться. Думаю, что это скорее WM_PAINT на контексте принтера, но только какой из кучи? :(
Установка hook производится на уровне драйвера или в пользовательском постранстве? Читаю MSDN но пока не найду ответа. |
Цитата:
WM_PAINT - это,как я понял,в большинстве случаев простой перерисовки окна,а WM_PRINT в основном используется в контексте принтера. К тому же при перехвате WM_PAINT мы получаем только описатель окна,а в случае с WM_PRINT мы получим дескриптор контекста и какие-то флаги.Правда,я немного не догоняю,как потом по полученному дескриптору контекста вычислить принтер,его использующий?? Хук ставится на пользовательском уровне.С помощью функции SetWindowsHookEx .Но там тоже есть некоторые непонятки в данном случае. |
Я не вижу события WM_PRINT при печати из MS WORD в WinSight :(. Зато в избытке вижу WM_PAINT и WM_NCPAINT. Часть их легко расшифровываются и относятся к перерисовкам на экране. А вот некоторые из них могут оказаться событием рисования на hDC принтера.
В ОС Linux ситуация для меня много проще потому, что я хорошо знаю модель взаимодействия приложения с драйвером. В Windows, я, к сожалению, этого не знаю. Может быть не событие искать надо, а, как в случае с Linux/Unix, системный вызов к драйверу печати? Существуют ли такие понятия в Windows? За SetWindowHookEx отдельное спасибо. Я начинаю понимать, что можно сделать с событиями в Windows :). |
Время: 09:54. |
Время: 09:54.
© OSzone.net 2001-