我試圖創建一個版本3虛擬打印機驅動程序,它使用XPS過濾器管道將XPS假脫機文件轉換爲另一個PDL並將其保存到磁盤。如何覆蓋默認的「打印到文件」端口的保存對話框?
我很好用事物的轉換端(使用流水線過濾器),但是當提到用戶用對話框選擇要保存的路徑時,我不確定什麼是最好的!
我知道,當我在我的虛擬打印機分配到「打印到文件」端口(FILE :),後臺處理程序會顯示默認的保存對話的工作陷入打印隊列前,像下面的Windows 7:
唯一的問題是,默認只是有點太基本。有什麼方法可以覆蓋我的特定打印機驅動程序的默認保存對話框並提供我自己的完整保存對話框?
非常感謝!
安迪
更新的意見
的好處這是打印到Adobe PDF打印機,並在階段在保存對話框時,在記事本中的主線程調用堆棧顯示。我想我對這個調用堆棧的解釋是,在顯示保存對話框的階段沒有涉及端口監視器庫。我的解釋是否正確?如果是這樣,問題仍然存在,什麼是在Adobe PDF打印機中顯示自定義保存對話框?
ntdll.dll!NtWaitForMultipleObjects+0xa
KERNELBASE.dll!GetCurrentThread+0x36
kernel32.dll!WaitForMultipleObjectsEx+0xb3
USER32.dll!PeekMessageW+0x1cd
DUser.dll+0x14e6
DUser.dll+0x15ef
DUser.dll+0x1565
USER32.dll!TranslateAcceleratorW+0x5e
ntdll.dll!KiUserCallbackDispatcher+0x1f
USER32.dll!WaitMessage+0xa
USER32.dll!MapDialogRect+0x234
USER32.dll!MapDialogRect+0x4c5
USER32.dll!DialogBoxIndirectParamAorW+0x56
USER32.dll!DialogBoxIndirectParamW+0x18
COMDLG32.dll!DllCanUnloadNow+0x590
COMDLG32.dll!Ordinal100+0xb620
COMDLG32.dll!Ordinal100+0xb53f
COMDLG32.dll!Ordinal100+0xb45d
COMDLG32.dll!Ordinal100+0xb31e
COMDLG32.dll!Ordinal100+0xb239
ADUIGP.DLL!DllCanUnloadNow+0x51e
ADUIGP.DLL!DllGetClassObject+0xeef
ADUIGP.DLL!DllCanUnloadNow+0x1441
PS5UI.DLL!DrvDocumentEvent+0xef
WINSPOOL.DRV!Ordinal100+0x20b
WINSPOOL.DRV!DeletePortW+0x2d0
WINSPOOL.DRV!DocumentEvent+0x213
GDI32.dll!ExtFloodFill+0x16b
GDI32.dll!StartDocW+0x58b
notepad.exe+0xa24c
notepad.exe+0x7701
notepad.exe+0x23e8
notepad.exe+0x14eb
USER32.dll!GetSystemMetrics+0x2b1
USER32.dll!GetSystemMetrics+0x4fa
notepad.exe+0x10bc
notepad.exe+0x133c
kernel32.dll!BaseThreadInitThunk+0xd
ntdll.dll!RtlUserThreadStart+0x21
我不認爲它是端口監視器,但對話框來自不過,是不是假脫機系統顯示對話框?就我而言,端口監視器的UI端僅用於添加/刪除端口。在端口監視器中顯示一個保存對話框看起來有點hacky從我讀過的。 – Andy 2012-07-09 07:43:56
端口監視器作爲假脫機程序進程的一部分運行。關於從端口監視器的UI側顯示保存對話,根本就沒什麼好奇。這是幾乎所有印刷到文件解決方案的實施方式(FILE:端口,Adobe PDF等)。如果您需要從打印作業中直接輸出,則端口監視器正是要執行此操作的地方。 Hacky會嘗試從打印驅動程序顯示這樣的對話框。 – 2012-07-09 14:14:58
我猜我一定是失去了一些東西,但它似乎是Adobe PDF打印機顯示它的StartDocPre事件(至少GDI打印)中保存對話。我猜測他們正在實施IPrintOemUI2 :: DocumentEvent方法並正在偵聽DOCUMENTEVENT_STARTDOCPOST。我想我認爲我對這一切的基礎知識有很好的理解,但是每篇文檔都假設普通開發人員沒有這方面的知識。太令人沮喪了。 – Andy 2012-07-09 15:07:23