プリンタ ドライバ、スプーラ コンポーネントの WDK サンプル
こんにちは、A尾です。前回の予告通り、今回はとりあえず WDK に付属するプリンタ ドライバやスプーラ コンポーネント等のサンプルについて紹介させていただきます。これらのサンプルは %BASEDIR%\src\print にありますが、実際に見ていただくとわかる通り、様々なサンプルがおいてあります。今回はとりあえずサブディレクトリ毎に(アルファベット順に)説明していきます。
ただ、利用頻度が低いと思われるサンプル コードの説明は割愛させていただきます。
asyncnotify %BASEDIR%\src\print\asyncnotify
Windows Vista より、Spooler Notification という機能が実装され、スプーラ サービスのコンポーネントとアプリケーションとの間で非同期による通信機能ができるようになりました。asyncnotify はこの機能を使用したサンプルとなっています。asyncnotify をビルドすると、クライアント(アプリケーション)となる ddkasyncnotify.exe と、サーバー(スプーラサービス)にて使用される ServerSampleLib.lib が生成されます。(lib のほうはポート モニタやプリント プロセッサにリンクして呼び出す必要があります。)
クライアントは通信を受け取るために RegisterForPrintAsyncNotifications を使用して通信チャネルを登録し、サーバーは RouterCreatePrintAsyncNotificationChannel を使用して IPrintAsyncNotifyChannel オブジェクトを生成し、通信を開始しています。
autoconfig %BASEDIR%\src\print\autoconfig
ネットワーク接続されたプリンタからプリンタ構成情報を取得し、プリンタプロパティの設定へ自動的に反映させるための GDL ファイルを提供しています。現状では、ネットワーク プリンタからプリンタ構成情報を取得する処理は Standard TCP/IP port ポートモニタと WSD ポートモニタにてサポートされています。また、プリンタプロパティへの自動反映は UniDrv もしくは PScript ベースのドライバであることが前提です。
cpsuisam %BASEDIR%\src\print\cpsuisam
CPSUI は、プリンタ プロパティやドキュメント プロパティを表示したり、これらプロパティシートをハンドリングするための機構を提供しています。このサンプル自体をビルドすると cpsuisam.exe が生成されますが、プリンタ ドライバ(インタフェース DLL)にて独自のプロパティシートを実現する際に、どのような処理が必要となるのかがこのサンプルの実装からわかります。
emf %BASEDIR%\src\print\emf
Windows Vista から、プリンタ サーバの負荷を低減させる等の目的で、Client Side Rendering という機能が追加されました。これまでのポイント アンド プリントによるネットワーク印刷では、クライアント上で NT EMF スプール ファイルを生成し、これをサーバー側でレンダリングする方法が取られていましたが、この機能によりサーバー側ではなくクライアント側でレンダリングさせることが可能となりました。
このサンプルでは、アプリケーションからこの設定を強制的に有効にする方法を提供しています。(プリンタプロパティの共有タブ上にある [クライアント コンピュータで印刷ジョブのレンダリングをする] を ON にするのと同じ動作となります。)
genprint %BASEDIR%\src\print\genprint
プリントプロセッサのサンプルとなります。プリントプロセッサでは、印刷時にアプリケーション プロセスにて生成されたスプール データを受け取り、そのデータ タイプに合わせて処理していきます。Windows OS 標準の WinPrint プリント プロセッサとほぼ同等の動作をする、とても参考になるサンプルです。
infs %BASEDIR%\src\print\infs
プリンタ ドライバ用の INF ファイルのサンプルです。
driver5
Windows 2000 以降の UniDrv や PScript ドライバを使用する際の INF ファイルです。
Include, Needs, DataSection ディレクティブにて、Windows OS が提供する NTPRINT.INF の内容を参照するようになっています。
mfp
プリンタやスキャナ等、複数の Setup クラスを持つ場合の INF ファイルです。
multios
ひとつの INF ファイルに、XP と Vista 等の異なる OS バージョンのインストール情報を記載した INF ファイルです。
packageaware
Vista よりサポートされた Package Aware というプリンタ ドライバのパッケージを OS にインストールする機能に対応した INF ファイルです。
prevista
Windows 2000、9x、XP、Server 2003 用のインストール情報を記載した INF ファイルです。
mini %BASEDIR%\src\print\mini
mdw の下には沢山のサブ フォルダが存在しますが、これらはすべて UniDrv や PScript をベースとした、機種依存情報ファイルのみで動作可能なドライバ群です。機種依存情報ファイルには、UniDrv には GPD ファイル、PScript には PPD ファイルが使用されます。ここにあるサンプルはプラグインを使用していないため、UniDrv ドライバや PScript ドライバ自体の、プラグインに依存しない動作を確認したい場合に役に立ちます。
※プラグインについては、下の oemdll を参照してください。
monitors %BASEDIR%\src\print\monitors
スプーラ コンポーネントであるプリント モニタのサンプルです。プリントモニタにはランゲージモニタとポートモニタの2種類がありますが、それぞれのサンプルが含まれています。
localmon
ポートモニタの Server DLL のサンプルです。
localui
ポートモニタの UI DLL のサンプルです。
pjlmon
ランゲージモニタの Server DLL のサンプルです。
(ランゲージモニタには UI DLL を実装することができません。)
msplot %BASEDIR%\src\print\msplot
HPGL/2 プロッタ用のプリンタ ドライバのサンプルです。UniDrv の GPD ファイルや や PScript の PPD ファイルのような機種データファイルを開発するだけで、HPGL/2 プロッタのプリンタドライバを開発することができます。また、コアドライバのソース コードもあるので、モノリシック プリンタ ドライバの動作を知りたい場合や、モノリシック プリンタドライバの開発を検討されている場合に参考になるかと思います。
oemdll %BASEDIR%\src\print\oemdll
UniDrv ドライバや PScript ドライバは、GPD ファイルや PPD ファイル等の機種依存情報ファイルに合わせて動作しますが、機種依存情報ファイルだけでは UniDrv や PScript が持っている機能しか使用することができません。そのため、UniDrv や PScript ドライバでは、ユーザ インタフェース ドライバ用にユーザ インタフェース プラグインを、グラフィックスドライバ用にレンダリング プラグインをサポートし、独自機能を実現する仕組みを提供しています。(UniDrv/PScript ドライバとプラグインモジュールの構成等については追々説明していく予定です。)
oemdll では、そのプラグインのサンプルを紹介しています。また、それぞれはドライバとしてインストールが可能となっています。
bitmap
ビットマップ ファイル データを出力する、Unidrv ドライバのレンダリングプラグインです。
custhlp
Windows OS にて用意されているヘルプではなく、独自のヘルプをサポートするユーザ インタフェースプラグインです。
gdl
IPrintCoreHelperUni::CreateDefaultGDLSnapshot からデフォルトの GDL スナップショットを取得することができます。
このサンプルでは GPD ファイルのバージョンを取得し、デバッグ出力しています。
oemprean
描画処理前にどのような描画データが通知されるかの分析を行うレンダリング プラグインです。
ただ、仕組みが提供されているだけで実際には何も分析をしていません。
oemps
PScript ドライバ用のレンダリング プラグインです。他の PScript ドライバ用レンダリングプラグインのベースとなっています。
oemui
UniDrv ドライバと PScript ドライバの両方で使用可能なユーザインタフェースプラグインです。
oemuni
UniDrv ドライバ用のレンダリング プラグインです。他の UniDrv ドライバ用レンダリングプラグインのベースとなっています。
PSUIRep
UI を完全をリプレイスするためのユーザインタフェース プラグインです。PScript ドライバ用です。
PTPCPlPr
UniDrv のユーザインタフェース ドライバは IPrintTicketProvider インタフェースをサポートして PrintTicket に対応しています。
このサンプルでは、プラグイン用の IPrintOemPrintTicketProvider インタフェースをサポートしています。
SyncSet
異なるプロパティシート上に同じ設定項目が存在する場合の設定同期方法を提供しています。
uniuirep
UI を完全をリプレイスするためのユーザインタフェース プラグインです。UniDrv ドライバ用です。
watermark
UI で設定した Watermark を付加して印刷する PScript ドライバ用のプラグインです。
ユーザインタフェース プラグインで Watermark の設定を行い、レンダリングプラグインにて実際に Watermark 用の PostScript コマンドを出力します。
watermarkuni
UI で設定した Watermark を付加して印刷する UniDrv ドライバ用のプラグインです。
ユーザインタフェースプラグインで Watermark の設定を行い、レンダリング プラグインにて実際に Watermark 用の PCL コマンドを出力します。
SimplePipelineFilter %BASEDIR%\src\print\SimplePipelineFilter
Windows Vista より、これまでの GDI ベースのプリンタ ドライバのほかに XPS ドライバがサポートされました。(XPS ドライバの構成や印刷時の動作等については追々説明していく予定です。)
このサンプルでは、XPS ストリーム データをインタフェースに持つ Filter pipeline モジュール単体を提供しています。
tty %BASEDIR%\src\print\tty
UniDrv ドライバをベースとした、文字列のみをデバイスフォントとして出力するサンプルとなります。このサンプルでは、レンダリングプラグインとユーザ インタフェース プラグインが含まれます。
XPSDrvSmpl %BASEDIR%\src\print\XPSDrvSmpl
先の SimplePipelineFilter は、ストリームをインタフェースとする Filter pipeline モジュールでしたが、このサンプルではドキュメントをインタフェースとする Filter pipeline モジュール(5つ)を提供しています。また、ユーザ インタフェース プラグインや INF ファイルも提供しているため、実際にインストールすることが可能となります。
以上となります。
まだ見たことのないものがありましたら、お時間ある時にでも是非見てみてください。
それでは、また。