ポートモニター(PDFへの印刷用)を備えたポストスクリプトベースの仮想プリンターをインストールするためのコードがいくつかあります。このコードは、PScript5 ファイル セットが「ルート」ドライバー フォルダーにない限り、WinXP から Win7 までの x86 および x64 プラットフォームで正常に動作します。いくつかのテスト PC ではファイルが既に存在していましたが、新しい Win7 PC ではファイルがまだ存在していませんでした。
たとえば、Windows XP 32 ビットでは、上記の内容が泥のように明らかであることはわかっているため、次のファイルの場合:
ps5ui.dll
pscript5.dll
pscript.hlp
pscript.ntf
c:\windows\system32\spool\drivers\w32x86\ にある場合、私のコードは機能します。そうでない場合、私のコードは失敗します。ファイルは常に c:\windows\system32\spool\drivers\w32x86\3\ にあり、結果は同じです (明らかに、Windows は "3" サブフォルダーを検索しません)。
それらを 3 サブフォルダーからコピーする必要がありますか? これは他の人が行っていることですか? 何らかの理由で「良い習慣」のようには見えません。this on MSDNによると、おそらくファイルを再配布できますが、Microsoft に連絡する必要があると思いますが、その方法がわかりません (リンクは奇妙で典型的です)。
これは、Win7 64 ビット (32 ビットでは "Windows x64" の代わりに "Windows NT x86" を使用するだけ) で実行される私の (クリーンアップされた) コードです。
DRIVER_INFO_3 di;
memset(&di,0,sizeof(di));
di.cVersion = 3;
di.pName = "My PDF Printer";
di.pEnvironment = "Windows x64";
di.pDriverPath = "pscript5.dll";
di.pDataFile = "mypdf.ppd";
di.pConfigFile = "ps5ui.dll";
di.pHelpFile = "pscript.hlp";
di.pDependentFiles = "pscript.ntf\0\0";
di.pMonitorName = NULL;
di.pDefaultDataType = "RAW";
if(!AddPrinterDriverEx(NULL,3,(BYTE*)&di,APD_COPY_ALL_FILES|APD_INSTALL_WARNED_DRIVER))
{
char err[1024];
sprintf(err,"Error adding printer driver: 0x%08X",GetLastError());
Prompt(err);
return;
}
上記のファイルのいずれかがルート フォルダーにない場合、AddPrinterDriverEx はエラー コード 2、ファイルが見つかりませんで失敗します。「3」サブフォルダーからファイルをコピーして、正確なコードを再度実行すると、機能します。APD_COPY_ALL_FILES フラグも使用せずに試してみました。ファイルが見つからない場合は同じエラー (2)、ファイルが存在する場合はその他のエラーです (ファイルが既に存在することを意味するエラー コードを想定していますが、実際の問題とは関係がないため問題ではありません) )。