XPS 필터 파이프 라인을 사용하여 XPS 스풀 파일을 다른 PDL로 변환하여 디스크에 저장하는 버전 3 가상 프린터 드라이버를 만들려고합니다.기본 'Print to File'포트의 저장 대화 상자를 어떻게 무시할 수 있습니까?
(파이프 라인 필터를 사용하는) 변환 측면에서는 문제가 없지만 저장할 경로를 선택하라는 대화 상자를 사용자에게 표시 할 때는 무엇이 가장 좋은지 잘 모르겠습니다.
나는 내가 내 가상 프린터를 할당 할 때, 스풀러가 작업이 인쇄 대기열에 도달하기 전에 기본 윈도우 7에 다음과 같은 대화를 저장 표시됩니다 :) 포트 (FILE '을 인쇄 파일로'알고 :
기본값은 너무 조금 기본적인 것입니다. 특정 프린터 드라이버에 대한이 기본 저장 대화 상자를 덮어 쓰고 내 자신의 전체 저장 대화 상자를 제공하는 방법이 있습니까?
고맙습니다. 코멘트
의 이익을 위해
앤디
업데이트이 표시되어 메모장에서 메인 스레드 대화 상자를 저장 무대 Adobe PDF 프린터와에 인쇄의 호출 스택입니다 . 이 호출 스택에 대한 나의 해석은 저장 대화 상자가 표시 될 때 포트 모니터 라이브러리가 스테이지에 포함되어 있지 않다는 것입니다. 내 해석이 맞습니까? 그렇다면 Adobe PDF Printer에 사용자 정의 저장 대화 상자가 표시됩니다.
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 측면은 포트를 추가/제거하기위한 것입니다. 포트 모니터에 저장 대화 상자를 표시하는 것은 내가 읽은 것에서 약간 해킹 된 것처럼 보입니다. – Andy
포트 모니터는 스풀러 프로세스의 일부로 실행됩니다. 포트 모니터의 UI 측면에서 저장 대화 상자를 표시하는 것에 관한 해킹이 전혀 없습니다. 거의 모든 인쇄물 솔루션이 구현되는 방식입니다 (FILE : 포트, Adobe PDF 등). 인쇄 작업에서 출력을 지시해야하는 경우 포트 모니터가 정확하게 수행 할 수 있습니다. Hacky는 프린터 드라이버에서 그런 대화 상자를 표시하려고합니다. –
내가 모르는 뭔가가 있어야합니다 추측 해요,하지만 어도비 PDF 프린터는 (적어도 GDI 인쇄의 경우) StartDocPre 이벤트 기간 동안 대화를 저장의 표시 것 같다. 나는 그들이 IPrintOemUI2 :: 된 DocumentEvent 방법을 구현하고 DOCUMENTEVENT_STARTDOCPOST을 듣고 있었다 추측했다. 나는이 모든 기초를 잘 이해하고 있다고 생각하고 싶습니다하지만 모든 문서는 평균 개발자가없는 사실을 알고 가정합니다. 너무 초조해. – Andy