- Когда пользователь выполняет операцию печати (либо с помощью Ctrl+P или какой-либо опции графического интерфейса, например нажатия кнопки печати), прежде чем запрос будет отправлен в спулер Windows, мне нужно отсканировать изображение, чтобы проверить, содержит ли оно какие-либо текстовые данные.
- У меня есть надстройка, внедренная в редакторы изображений, которая отслеживает операции печати.
- Моя задача — сделайте эту надстройку перехватчиком API, который получает растровые/растровые данные из входного файла (файла изображения), затем я могу сбросить их в какой-нибудь временный файл, чтобы мое приложение могло сканировать этот временный файл на наличие текстовых данных.
Введение в печать
На основе этого приложения (редакторы изображений), которые запускают операции печати, преобразуют вводимые данные. данные в формат EMF или XPS, который представляет собой векторный тип файла. Затем спулер Windows выполняет следующий набор операций.
Если я правильно понимаю, то приложения (MSPaint или любые редакторы изображений) отвечают за преобразование растровых данных/данных изображения в EMF или XPS. файлы.
Итак, мой план состоит в том, чтобы перехватить API, который имеет данные растрового изображения в качестве входных данных, и сбросить их в какой-то временный файл для достижения моей цели.
Я попробовал подключиться к BitBlt() API gdi32.dll, но я обнаружил, что этот API слишком общий, он запускается слишком много раз. (Например, если пользователь нажимает на экран ввода, сворачивает экран ввода и т. д.).
Вторая проблема с BitBlt() заключается в том, что API на основе GDI используется только в устаревших приложениях. Когда я зарегистрировался в приложении UWP, таком как Microsoft Photos, они вообще не используют API на основе GDI.
Итак, есть ли способ выполнить это требование? Правильно ли я понимаю архитектуру печати Windows? Какие API я могу использовать для достижения своей цели? Существуют ли какие-либо инструменты, которые могут дать четкое представление об API? До сих пор я пробовал использовать procmon и btrace.
Подробнее здесь: https://stackoverflow.com/questions/793 ... r-like-msp