ファイルへの印刷時に、プリント ドライバが PCL、PostScript、または XPS 形式で印刷するかどうかを .Net (または WMI) で判断する方法はありますか?
2 に答える
ターゲット OS が Windows の場合、もう 1 つの方法は、ドライバーと印刷キューで何らかのロジックを実行することです。WMI/.NET API を使用して、ドライバー DLL 名を取得できます。unidrv.dll の場合、ドライバーは PCL ドライバーであり、pscript.dll の場合、PS ドライバーです。もちろん、これは MS Unidrv/PScript ドライバー フレームワークに基づくドライバー用ですが、インストールされたベースのドライバーの大部分がこのフレームワークに基づいていることがわかります。
この情報は、WMI 経由で収集できるはずです。Win32_Printer.DefaultLanguage は、この値を返すと想定されています。過去にこれを試したことを思い出すと、多くのプリンター ドライバーは値を返しません。
ここをチェックしてください: http://msdn.microsoft.com/en-us/library/aa394363%28VS.85%29.aspx
このようなものは、トリックを行う必要があります:
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
ManagementObjectSearcher mos = new ManagementObjectSearcher(oq);
ManagementObjectCollection moc = mos.Get();
foreach( ManagementObject mo in moc )
{
string name = mo["Name"].ToString();
string language = mo["DefaultLanguage"].ToString();
MessageBox.Show(String.Format("Printer: {0} -- Language: {1}", name, language);
}
これはUInt16を返します。「デフォルト言語」の英語への翻訳、つまりPCL、Postscript、HPGLなどのリンクを確認してください。
出力がどうなるかを事前に決定しようとしている理由をお聞きしてもよろしいですか? ファイルへの出力プロセスの場合は、単に出力を見て、それが何であるかを判断します。最近のプリンタ ドライバのほとんどは、ジョブの先頭に次のように PJL ステートメントを挿入します。
@PJL ENTER LANUGAGE = "PCL"
または、PCL の場合や Postscript の場合の %PS などの明確なインジケータのコード自体を単純に見てください。