Справочная информация:
Я пишу приложение на C #, используя .NET 4.0. Он печатает кучу документов в определенном порядке. Документы бывают разных типов и фактически печатаются с использованием ShellExecute с глаголом «печать».
Чтобы убедиться, что заказ не перепутан, я хотел бы изучить очередь печати для используемого принтера. Мой основной цикл будет выглядеть так:
- Вызвать действие «печать» на документе
- Подождите, пока документ появится в очереди на печать
- Повторите, пока не будет сделано
Как контролировать очередь печати с помощью управляемого кода?
Я нашел несколько замечательных примеров выполнения аналогичных действий с помощью неуправляемых вызовов (например: http://blogs.msdn.com/b/martijnh/archive/2009/08/05/printmonitor-a-c-print-spooler-monitor.aspx).. Кроме того, я знаю, как смотреть на буферные файлы в c: \ windows \ system32 \ spool ... и вычислять вещи таким образом.
Как бы то ни было, ни одно из этих решений не очень удовлетворяет ... с количеством неуправляемой трески, которую я звоню, я чувствую, что должен просто написать приложение на C ++. (И не иметь .NET зависимость / накладные расходы.)
Основной вопрос: неужели нет способа отслеживать очередь печати, используя только управляемые вызовы?
Более общий вопрос: я родом из мира java и обычно использую языки .NET только тогда, когда я хочу сделать что-то для конкретной ОС или что-то, что должно взаимодействовать с другими вещами в мире MS. (Например, компоненты служб SSIS.)
Кажется, что каждый раз, когда я запускаю проект, я оказываюсь в одном и том же беспорядке: всевозможные вызовы собственных функций, COM-компоненты и т. Д. И т. Д.
Вторичный вопрос: Есть ли что-то, чего мне не хватает в философии или реализации .NET? (Я просто недостаточно стараюсь, чтобы управляемые библиотеки могли что-то делать? Является ли .NET неправильным выбором для всего, что нужно для Windows-специфических вещей, таких как манипулирование очередью печати?) Я получаю (или думаю, что получаю) это Теоретически предполагается, что .NET не зависит от ОС, но, безусловно, в большинстве современных операционных систем есть принтеры, очереди печати и тому подобное. (Таким образом, если бы у вас были общие вызовы для выполнения подобных вещей, они могли бы быть реализованы в версии платформы каждой платформы ..)