Windows XP / Windows Server 2003 の場合
コマンド ラインから Windows Picture and Fax Viewer (shimgvw.dll) を使用して、EMF (または WMF) ファイル形式を仮想プリンター "Microsoft XPS Document Writer" に印刷しようとしています。結果の XPS を、WMF/EMF のようにベクター形式にしたいと考えています。
WMF と EMF を除くすべての画像形式で動作します。XPS プリンターの保存ダイアログが表示されますが、保存された XPS ファイルは空です。
WMF をロードし、Windows Picture and FaxViewer の GUI から [ファイル] > [印刷] をクリックすれば実行できますが、コマンド ラインからは実行できません。また、Windows エクスプローラーで WMF ファイルを右クリックして [印刷] をクリックしても、選択した WMF ファイルを印刷できません (リストから WMF ファイルと EMF ファイルを除外します)。
コード:
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = @"C:\WINDOWS\System32\rundll32.exe";
info.Arguments = @"C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt ""c:\vectorImage.emf"" ""Microsoft XPS Document Writer""";
Process.Start(info);
しばらく前に WMF エクスプロイトについてよく読んだことがありますが、これらのファイルの直接印刷が削除されたとしか思えませんか? しかし、これらの WMF ファイルを GUI から印刷できたとしても、どのようにして悪用を回避したのかわかりません。
私がやりたいことは、ユーザーの操作を必要とせずに、プログラムで WMF/EMF ファイルから XPS ベクター ファイルを作成することです。関連するすべての形式がマイクロソフトに属しているため、これを行うことができるはずだと思います。