1

XPS フィルター パイプラインを使用して XPS スプール ファイルを別の PDL に変換し、それをディスクに保存する、バージョン 3 の仮想プリンター ドライバーを作成しようとしています。

変換側 (パイプライン フィルターを使用) には問題ありませんが、保存先のパスを選択するためのダイアログをユーザーに提示する場合、何が最適かわかりません。

仮想プリンターを「Print to File」ポート (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
4

2 に答える 2

1

より優れたダイアログを提供する独自のポート モニターを作成します。WDK のサンプル ポート モニターをベースとして使用できます。

于 2012-07-07T19:40:38.900 に答える
0

WDK XPSDrvSample を拡張するニーズを実装し、inf ファイルを別の場所を指すように変更して、プリンターが必要とするすべてのファイルが「最新」であることを確認します。これにより、基本的なダイアログが回避されます。ここで、カスタム ポート モニターを使用するか、パイプライン パスに追加されたストリーム フィルターを使用して、独自の保存ダイアログを実装する必要があります。

幸運を !

PD: redmon を使用して出力を外部アプリにリダイレクトし、出力を管理することもできます。

于 2012-07-10T19:38:16.580 に答える