2013-05-10 3 views
0

У меня есть системная служба, которая обрабатывает запросы на печать и дает имя принтера от пользователя, прикрепляет к этому принтеру DC. Он запускает документ, заканчивает его и останавливает.Могу ли я программно использовать драйвер принтера OneNote?

m_PrinterDC.CreateDC (L"WINSPOOL", _printerName.c_str(), NULL, NULL) 
m_DC.Attach(m_hprinter) 
m_DC.StartDoc(...) 
... 
mDc.TextOut(...) 
... 
m_DC.EndDoc() 
m_DC.Detatch() 

Это отлично работает для обычных принтеров, но при использовании «Печать в OneNote» функциональность (имя драйвера «Отправить OneNote 2010») это не похоже на работу. Я хотел бы избежать пользовательской логики только для этой функции; в идеале все принтеры будут работать независимо. Любые мысли, что может пойти не так? Я попытался обновить параметры безопасности принтера, включив права на печать для всех групп; не уверен, что еще попробовать.

+0

«это не работает» - будьте точнее. Какой вызов терпит неудачу? Вы проверяли возвращаемые значения, не так ли? – MSalters

+0

Не появляется диалоговое окно «отправка документа на принтер» и т. Д. Ни один из вызовов не работает, все возвращают ожидаемые значения (не каждый звонок проверяется, но все настройки - это разрывы). Каждая из этих функций на самом деле называется: 'if (m_DC.EndDoc() <0) LOG (L" Не удалось завершить печать документа ");', но ошибка не появляется. – Rollie

ответ

0

К сожалению, я должен угадать некоторые моменты, потому что вы, кажется, избегаете подробного описания состояния ошибки.

Во-первых, если вы проверите все возвращаемые значения, это может быть проблемой самого onenote. Проверьте состояние onenote путем печати с использованием других программ.

Во-вторых, вы проверяли, является ли _printerName точным? Если некоторые пользователи используют ОС другого языка, имя драйвера «Send To OneNote 2010» будет отличаться или зависит от версии. Конечно, если вы проверяете все возвращаемые значения вызовов функций, они записываются в ваш файл журнала. Тем не менее, я беспокоюсь о том, что вы использовали точное имя принтера, используя «EnumPrinters».

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162931(v=vs.85).aspx

Я надеюсь, что это поможет вам немного.

+0

Имя принтера разрешено с использованием GetDefaultPrinter, все, что он возвращает, - это то, что я использую (вызываемый из приложения без обслуживания, переданного службе); причина, по которой у меня нет более подробной информации, я действительно не знаю, что еще будет актуальным, если не написать полный минимальный пример с кодом обслуживания. Я могу печатать в OneNote, используя функцию CPrintDialog :: GetDefaults(), когда не запускается как служба, но пользователь SYSTEM не имеет принтера по умолчанию, а олицетворение не подходит для него. – Rollie

Смежные вопросы