2013-05-10 105 views
0

我有一個處理打印請求的系統服務,並且從用戶獲得打印機名稱,將DC附加到該打印機。它開始一個文檔,結束它,並detatches。我可以通過編程方式使用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 2013-05-10 22:34:06

+0

'發送文檔到打印機'等對話框不會出現任何調用失敗,所有返回期望值(並非每個調用都被檢查,但所有的設置 - 拆卸都是)。其中的每一個函數實際上都是這樣調用的:'if(m_DC.EndDoc()<0)LOG(L「無法結束文檔打印」);',但不出現錯誤。 – Rollie 2013-05-10 23:11:32

回答

0

不幸的是,我不得不猜測一些觀點,因爲你似乎避免了錯誤情況的詳細描述。

首先,如果你檢查所有的返回值都是成功的,只是它可能是一個關於onenote本身的問題。使用其他程序打印,檢查onenote的狀況。

其次,你檢查_printerName是否確切嗎?如果某些用戶正在使用其他語言的操作系統,那麼驅動程序名稱「發送到OneNote 2010」將會不同或取決於版本。當然,如果你檢查函數調用的所有返回值,它會記錄在你的日誌文件中。但是,我擔心你使用'EnumPrinters'來使用確切的打印機名稱。

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

我希望這可以幫助你一點。

+0

使用GetDefaultPrinter解決打印機名稱,無論它返回什麼我正在使用(從非服務應用程序調用,傳遞到服務);我沒有更多細節的原因是,我真的不知道與服務代碼編寫完整的最小示例相關的更多內容。如果不作爲服務運行,我可以使用CPrintDialog :: GetDefaults()函數打印到OneNote,但SYSTEM用戶沒有默認打印機,並且模擬不能更正它。 – Rollie 2013-05-11 02:29:58

相關問題