プリンタ ドライバ、スプーラ コンポーネントの 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 20009xXPServer 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 ファイルも提供しているため、実際にインストールすることが可能となります。


 


 


以上となります。


まだ見たことのないものがありましたら、お時間ある時にでも是非見てみてください。


 


 それでは、また。


 

Skip to main content