情報処理装置、情報処理方法、及びプログラム
【課題】 アプリケーションと同一プロセスでユーザーインターフェースを表示していたので、プリンタードライバーがクラッシュするとアプリケーションも巻き込まれて終了してしまっていた。
【解決手段】 インストール時にプリンタードライバーとアドバンスドUIアプリケーションを関連づけ、プリンタードライバーが呼び出されると、COMを使ってアドバンスドUIアプリケーションを別プロセスで起動する。
【解決手段】 インストール時にプリンタードライバーとアドバンスドUIアプリケーションを関連づけ、プリンタードライバーが呼び出されると、COMを使ってアドバンスドUIアプリケーションを別プロセスで起動する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アプリケーションが実行するプロセスとは異なるプロセスで、プリンタードライバーのユーザーインターフェースを起動する情報処理装置、情報処理方法、及びプログラムに関するものである。
【背景技術】
【0002】
プリンタードライバーは詳細な印刷設定を行うために、専用のユーザーインターフェースを持っている。アプリケーションはオペレーティングシステムを介してプリンタードライバーのユーザーインターフェースを表示するが、プリンタードライバーはアプリケーションのプロセス内でロードされている。アプリケーションと同一プロセスでユーザーインターフェースを表示するので、印刷設定データの相互通信が容易であり、ユーザーインターフェース操作中はアプリケーションの操作を止めるモーダルダイアログになる。このようにアプリケーションとプリンタードライバーが一体化したように扱うことができるのが、同一プロセス実行のメリットである。しかし、プリンタードライバーのユーザーインターフェースに不具合があってクラッシュした場合、アプリケーションと同一プロセスであるがために、アプリケーションまで巻き込んでクラッシュしてしまう。
プリンタードライバーだけでなくアプリケーションも含めて、同一プロセスの問題に対処するために、サンドボックスと呼ばれる異なるプロセスで動作させるシステムが存在する。複数のウェブページが同時に閲覧できるタブを持ちそれぞれのタブを別プロセスで動作させるブラウザや、ファイルを開くたびに別のプロセスで起動するアプリケーションなどが知られている。また、プリンタードライバーであっても、アプリケーションの描画データをプリンター言語に変換するレンダリング部を別プロセスにしたり、デバイスと双方向通信してステータスを逐次監視するアプリケーションを別プロセスで起動したりするものがある(特許文献1)。
しかし、プリンタードライバーのユーザーインターフェースについては、別プロセスで起動する対策が難しい。オペレーティングシステムがベースとなるユーザーインターフェースを構築し、プリンタードライバーはそのベース上に追加するシステムになっているからである。そこで、アプリケーションがプリンタードライバーのユーザーインターフェースを呼び出す際に別のサービスを起動し、サービスがプリンタードライバーのユーザーインターフェースを表示する方法がある(特許文献2)。また、プリンタードライバーのユーザーインターフェースをダミーで開いたあとにすぐ閉じて、そのあとで別プロセスを起動する方法が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第4661939
【特許文献2】特開平11−143664号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、アプリケーションが別のサービスを起動する方法では、すべてのアプリケーションがこの呼び出し方に対応するように変更を加えなければならない。また、ダミーのユーザーインターフェースを開く方法では、一度ユーザーインターフェースを閉じるという余計な動作が入り、ユーザーにとってはわずらわしい。ほかにも、オペレーティングシステムがユーザーインターフェースを提供し、そこにプリンタードライバーがユーザーインターフェースを後からシートとして追加する場合は、正しく動作しなくなってしまう。
【課題を解決するための手段】
【0005】
上記課題を解決するために本発明の情報処理装置は、
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得手段と、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得手段により取得された識別子を追加する追加手段と、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込み手段と、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定手段と、
前記判定手段によりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動手段と、を備えることを特徴とする。
【発明の効果】
【0006】
本発明により、アプリケーションと別のプロセスでプリンタードライバーのユーザーインターフェースが起動するので、アプリケーションまで巻き込んでクラッシュすることがなくなる。
【図面の簡単な説明】
【0007】
【図1】本発明の一実施形態としての、コンピューターシステムのハードウェアとソフトウェアのブロック構成図である。
【図2】本発明の一実施形態としての、クライアントとサーバー、そしてプリンターが接続されたネットワークの構成図である。
【図3】本発明の一実施形態としての、一般的なコンピューターを用いた印刷処理システムのブロック構成図である。
【図4】本発明の一実施形態としての、XPS印刷処理システムのブロック構成図である。
【図5】本発明の一実施形態としての、印刷設定であるDEVMODE構造体のデータ構造を示したブロック構成図である。
【図6】本発明の一実施形態としての、XPS印刷処理システムで使用される印刷設定であるXML形式のプリントチケットの一例である。
【図7】本発明の一実施形態としての、プリンタードライバーのユーザーインターフェースである。
【図8】本発明の一実施形態としての、アプリケーションプロセスとは異なるアドバンスドUIアプリケーションのプロセスでユーザーインターフェースが動作しているときのブロック構成図である。
【図9】本発明の一実施形態としての、プリンタードライバーにアドバンスドUIアプリケーションのCLSIDが追加された、セットアップインフォメーションファイルの一例である。
【図10】本発明の一実施形態としての、オペレーティングシステムが、プリンタードライバーをインストールするときのフローチャートである。
【図11】本発明の一実施形態としての、アドバンスドUIアプリケーションのインストーラーが、アドバンスドUIアプリケーションをインストールするときのフローチャートである。
【図12】本発明の一実施形態としての、オペレーティングシステムが、プリンタードライバーのユーザーインターフェースを開くときのフローチャートである。
【図13】本発明の一実施形態としての、COMプロキシがCOMスタブを呼び出してプロセス間通信を行うときのフローチャートである。
【図14】本発明の一実施形態としての、COMスタブがCOMプロキシから呼び出されてプロセス間通信を行うときのフローチャートである。
【図15】本発明の一実施形態としての、アドバンスドUIアプリケーションが動作するときのフローチャートである。
【図16】本発明の一実施形態としての、プリントマネージャが、アドバンスドUIアプリケーションを呼び出すときのAPI呼び出しの一例、アドバンスドUIアプリケーションが、プリントマネージャにインターフェースを渡すときのAPI呼び出しの一例である。
【図17】本発明の一実施形態としての、XPS印刷システムにおいて、アドバンスドUIアプリケーションが、フィルタパイプラインマネージャにデータを渡すときのブロック構成図である。
【図18】本発明の一実施形態としての、XPS印刷システムにおいて、アドバンスドUIアプリケーションが、フィルタパイプラインマネージャにデータを渡すときのフローチャートである。
【図19】本発明の一実施形態としての、プリンタードライバーにおいて、共有プリンターを利用するための、オペレーティングシステムのユーザーインターフェースである。
【図20】本発明の一実施形態としての、アドバンスドUIアプリケーションがあるプリンタードライバーにおいて、共有プリンターを禁止するオペレーティングシステムのユーザーインターフェースである。
【図21】本発明の一実施形態としての、オペレーティングシステムが、共有プリンターのユーザーインターフェースを表示するときのフローチャートである。
【図22】本発明の一実施形態としての、アドバンスドUIアプリケーションがあるプリンタードライバーにおいて、ジョブの設定確認を行うときのオペレーティングシステムのユーザーインターフェースである。
【図23】本発明の一実施形態としての、アドバンスドUIアプリケーションがあるプリンタードライバーにおいて、デバイスの設定を行うときのオペレーティングシステムのユーザーインターフェースである。
【図24】本発明の一実施形態としての、オペレーティングシステムが、プリンタードライバーのユーザーインターフェースを表示するときのフローチャートである。
【図25】本発明の一実施形態としての、オペレーティングシステムが、アドバンスドUIアプリケーションを含んだプリンタードライバーをインストールするときのフローチャートである。
【図26】本発明の一実施形態としての、プリンタードライバーにアドバンスドUIアプリケーションが含まれた、セットアップインフォメーションファイルの一例である。
【発明を実施するための形態】
【0008】
[実施例1]
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【0009】
図1は本発明の実施形態を示す一般的なコンピューターを用いたシステムのブロック構成図である。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機能であっても、複数の機器からなるシステムであっても、ネットワークを介して接続がなされ処理が行われるシステムであっても、本発明を適用できることは言うまでもない。
【0010】
CPU101は主記憶装置102のROM1021あるいはRAM1022あるいは補助記憶装置105に格納されたプログラムに従って装置全体の制御を行う。RAM1022はCPU101が各種処理を行う際のワークエリアとしても使用される。補助記憶装置105はオペレーティングシステム(OS)1053やアプリケーションソフト1051等を記録する。キーボード1031やマウス・タッチパネルなどに代表されるポインティングデバイス1032などの入力機器は、入力I/F103を通じて、ユーザーがコンピューターに対して各種指示を与えるためのデバイスである。出力I/F104は、データを外部に出力するためのインターフェースであり、モニタ1041やプリンター1042などの出力機器に対してデータを出力する。プリンター1042とは直接接続されるローカルI/Oのみならず、通信I/F106を通じて接続されるネットワーク1061を通して接続されていてもよい。また、107は共通データシステムバスで、モジュール間でそれぞれのデータのやりとりを行う。
【0011】
図2は本発明の実施の形態におけるネットワーク1061の環境を簡略した図である。印刷を行う文書や画像を作成するクライアントコンピュータ201/202が単体もしくは複数ネットワークに接続されている。また、クライアントのユーザーやプリンターを管理するサーバーコンピュータ203が接続されていることもある。プリンター204/205が単体もしくは複数ネットワークに接続されており、プリンター205のように物理的に接続されていても実際には使用できないオフライン状態であることもある。ネットワークにはPAN(Personal Area Network)、LAN(Local Area Network)、MAN(Metropolitan Area Network)、WAN(WIDe Area Network)などの小規模から大規模までのネットワークがあり、これらの機器がすべてのネットワークに接続されている。クラウドなど、サーバーやプリンターがインターネットを越えて接続されていてもかまわない。
【0012】
図3において、一般的なコンピューターを用いた印刷処理システムを示す。アプリケーション1051と、プリンタードライバー1052、オペレーティングシステム1053は、図1の補助記憶装置105に格納されている。グラフィックスエンジン302、プリントマネージャ306はオペレーティングシステム1053に含まれるモジュールである。ユーザーはキーボード1031やマウス1032などといった入力装置を使用して、出力装置のモニタ1041に映し出されたアプリケーションプログラム1051を使用して作成した文書301の印刷処理を実行する。印刷処理はプリンターの選択、印刷設定の作成、描画データの変換と3つの処理を順番に行うことで実行される。まずは、プリンターの選択として、印刷を実行するプリンター1042に対応したプリンタードライバー1052を選択する。次に印刷設定3012の作成を行う。文書の印刷設定3012はプリンタードライバー1052のコンフィギュレーションモジュール304によって初期値が作成される。作成された印刷設定3012をアプリケーション1051もしくはプリンタードライバー1052のユーザーインターフェースを使用してユーザーが望む最終印刷結果になるように変更して設定を行う。たとえば、出力する用紙サイズを変更したり、両面印刷、白黒印刷を行なうといった設定である。プリンタードライバー1052のユーザーインターフェースは、コンフィギュレーションモジュール304かアドバンスドUIアプリケーション(ユーザーインターフェースアプリケーション)311のどちらかが提供する。印刷設定3012はRAM1022上に確保されるが、保存する形式はバイナリのデータ構造体であったり、マークアップ言語のXMLであったりする。この形態はプリンタードライバー1052やオペレーティングシステム1053の仕様によって異なる。印刷設定3012は文書印刷のたびに作成する。しかしながら、プリンター1042のオプション機器構成や、ユーザーごとの環境設定など設定を保持しておきたいものは、プリンタードライバー1052がオペレーティングシステム1053のレジストリデータベース308に保存する。印刷設定3012のユーザーごとのデフォルト値はオペレーティングシステム1053のプリントマネージャ306が、レジストリデータベース308に保存する。最後に描画データの変換を行う。印刷設定3012が作成し終わったら、ユーザーによって印刷処理が実行され、オペレーティングシステム1053に印刷処理を通知する。オペレーティングシステム1053はグラフィックスエンジン302を通じて、指定されたプリンタードライバー1052への描画を行う。印刷設定3012でレイアウト処理が指定されている場合は、プリンタードライバー1052のレンダリングモジュール303に行く前に一時的なスプールファイル307を作成し、レイアウトモジュール309を起動する。レイアウト処理とは用紙の順番を入れ替えたり、一枚の用紙に複数ページを貼り付けたりする処理を指す。レイアウトモジュール309はレイアウトを変更した後、プリンタードライバー1052への描画を再度行う。描画データが送られてきたプリンタードライバー1052はレンダリングモジュール303によって、プリンターが理解できるデータ言語すなわちプリンター制御言語に変換する。このとき印刷設定3012も、プリンター制御言語として変換する。レンダリングモジュール303、コンフィギュレーションモジュール304はともに複数の種類のプリンター1042に対して共通のモジュールであることが多く、機種ごとの違いは機種依存データファイル305に記述されている。レンダリングモジュール303、コンフィギュレーションモジュール304は適宜、この機種依存データファイル305を参照する。変換されたデータはスプールファイル307として逐次保存していく。プリントマネージャ306はスプールファイル307を取得し、印刷ジョブファイルとして印刷処理のスケジュール管理を行う。プリンターが印刷できる状態になったら、プリントマネージャ306はI/Oモジュール310を介してプリンター1042に印刷ジョブデータを送信する。このようにして、アプリケーションからの印刷データがプリンター言語に変換されて印刷を行う。
【0013】
文書301の印刷設定3012を作成するには、アプリケーションによって印刷設定3012を直接書き換えるか、プリンタードライバー1052のコンフィギュレーションモジュール304もしくはアドバンスドUIアプリケーション311が提供するユーザインタフェース(図7)を使用する。印刷設定3012はMicrosoft(登録商標)Windows(登録商標)オペレーティングシステムでは、DEVMODE構造体と呼ばれる図5の構造をしている。DEVMODE構造体はオペレーティングシステムで公開定義されている標準の設定領域501と、プリンタードライバーが拡張した設定領域502に分けられている。標準の設定領域501には、用紙サイズや給紙段の切り替え、カラー白黒の切り替えなど印刷の基本的な設定の値がある。拡張した設定領域502には、プリンターのオプションに応じた排紙機能や、細かい色調整機能などの値がある。アプリケーションは各プリンタードライバー1052が持つ拡張設定を知ることはできないので、直接印刷設定を書き換えることができるのは、システムで定義されている標準の設定領域501だけとなる。そこで、アプリケーションはプリンタードライバー1052のユーザーインターフェースを表示させて、拡張された印刷設定502をユーザーに行わせるのが一般的である。コンフィギュレーションモジュール304はユーザーインターフェースだけではなく、アプリケーションプログラムインタフェース(API:Application Programming Interface)も提供している。なので、ユーザーインターフェースを表示せずに拡張された印刷設定502を外部から設定することも可能である。しかし、コンフィギュレーションモジュール304のAPIを使用する場合はアプリケーションがプリンタードライバー1052ごとに対応しなければならないので、一般的なアプリケーションは標準の設定領域501のみ変更を行う。
【0014】
もうひとつ、本発明を適用できる別の印刷システムを説明する。図3はGDI印刷システムと呼ばれるのに対し、図4はXPS印刷システムのブロック構成図である。XPS印刷システムはXML Paper Specificationと呼ばれる文書ファイルフォーマットをスプールデータとして使用し、印刷を行うシステムである。XPS印刷システムもGDI印刷システムと同じく、オペレーティングシステム1053上で動作している。プリントマネージャ306、GDItoXPS変換モジュール405、フィルタパイプラインマネージャ409はオペレーティングシステム1053に含まれるモジュールである。プリンタードライバー1052とフィルタパイプラインマネージャ409の各フィルタは、図1の補助記憶装置105にプリンタードライバー1052として格納されている。フィルタパイプラインマネージャ409はオペレーティングシステムに含まれるが、各フィルタはプリンタードライバー1052のモジュールである。GDI印刷アプリケーション401とXPS印刷アプリケーション402は、図1の補助記憶装置105にアプリケーション1051として格納されている。ユーザーはキーボード1031やマウス1032などといった入力装置を使用して、出力装置のモニタ1041に映し出されたGDI印刷アプリケーションプログラム401(以下、GDIアプリと略す)、もしくはXPS印刷アプリケーションプログラム402(以下、XPSアプリと略す)から印刷処理を実行する。印刷処理はプリンターの選択、印刷設定の作成、描画データの変換と3つの処理を順番に行うことで実行する。
【0015】
まずは、印刷したいプリンター1042の選択をする、これは、印刷を実行するプリンター1042に対応したプリンタードライバー1052を選択することと同義である。次に印刷設定を作成する。印刷設定はアプリケーションが印刷設定用のメモリを確保し、アプリケーションかプリンタードライバーのコンフィギュレーションモジュール304が、機種依存ファイル305を利用して設定データを埋めるという形で行われる。GDIアプリ401では印刷設定データとしてバイナリのDEVMODE構造体403を用い、XPSアプリ402ではマークアップ言語のXMLで記載されたプリントチケット404を用いる。DEVMODE構造体403もプリントチケット404も、図5の構造のように、オペレーティングシステムが定義する標準領域とプリンタードライバーが独自で定義する拡張領域を持つ。また、プリントチケット404は、図6にあるようなXML形式で記述された印刷設定情報であるので、標準領域と拡張領域は名前空間によって記載が分かれている。このDEVMODE構造体403もしくはプリントチケット404が印刷設定を保持しており、アプリケーションが直接書き換えることで印刷設定を変更する。プリンター1042に依存した専用の設定は、コンフィギュレーションモジュール304もしくはアドバンスドUIアプリケーション311が持つプリンタードライバー1052のユーザインタフェース(図7)を表示して行う。プリンタードライバー1052は、ユーザーインターフェースの設定に従い、DEVMODE構造体403もしくはプリントチケット404のプリンター1042に依存した設定を変更する。印刷設定とは具体的に、出力する用紙サイズを「A4」にする、両面印刷を行う、カラーと白黒を切り替える、給紙段を指定するなどといった印刷を行うのに必要なデータのことを指す。プリントチケット404は印刷設定がXML形式で記述されているので、XPSアプリ402がすべての設定値を直接変更して書き換えることは容易だが、従来のようにプリンタードライバー1052のユーザーインターフェースを使って設定変更してもかまわない。印刷設定は文書印刷のたびに作成するが、プリンター1042のオプション機器や、ユーザーごとの環境設定など設定を保持しておきたいものは、ユーザーインターフェースがオペレーティングシステムのレジストリデータベース308に保存する。印刷設定のユーザーごとのデフォルト値はオペレーティングシステムのプリントマネージャ306が、レジストリデータベース308に保存する。最後に描画データの変換を行う。印刷設定が確定したら、ユーザーはアプリケーションから印刷処理を実行する。GDIアプリ401から印刷する場合は、プリンタードライバーの形態を取るGDItoXPS変換モジュール405に描画データが送られ、XPSスプールファイル407が作成される。このときGDItoXPS変換モジュール405はコンフィギュレーションモジュール304を呼び出し、印刷設定をDEVMODE構造体403からプリントチケット404に変換する。XPSアプリ402から印刷する場合は、XPSファイルをXPSアプリ自身が生成するのと、オペレーティングシステムがXPSアプリからの描画命令に応じてXPSファイルを生成するのと2通りの方法がある。どちらの方法であっても、印刷の途中でXPSスプールファイル407を生成する。このようにXPS印刷システムは、印刷時に必ずXPSスプールファイル407を生成するのが特徴である。
【0016】
XPSスプールファイル407が生成されたら、プリントフィルタパイプラインプロセスに処理が渡される。プリントフィルタパイプラインプロセスは複数のフィルタを通すことで印刷が行われる仕組みで、フィルタコンフィギュレーションファイル413でフィルタの数や順番を制御する。プリントフィルタパイプラインプロセスで動作するフィルタパイプラインマネージャはフィルタコンフィギュレーションファイル413に従って、この実施例では設定フィルタ410、レイアウトフィルタ411、レンダラフィルタ412の順に処理を行う。フィルタはプリンタードライバー1052の構成によって、数や種類が異なる。印刷処理はXPSスプールファイル407をフィルタに受け渡すことで行われ、フィルタがそれぞれXPSスプールファイル407を加工し次のフィルタに渡していくことで処理が進む。最後にはプリンターが理解できるデータ言語であるプリンター制御言語(以下、PDL(Page Description Language)と略す)となって出力される。もちろんプリンター1042がXPSスプールファイル407を直接読み込んで印刷できるXPSダイレクトプリンタであれば、すべてのフィルタをスルーして印刷してもよい。設定フィルタ410ではプリントチケットを読み込んで印刷に必要なデータをプリントチケットに書き込む処理を行う。レイアウトフィルタ411では倍率の変更や製本の面付けレイアウトやスタンプなどレイアウトに関する処理を行う。レイアウトフィルタ411では、XPSスプールファイル407に含まれる印刷設定プリントチケット404に従って動作する。そのため、たとえば面付けの設定がプリントチケット404に存在しないときは、レイアウトフィルタ411は何も動作せずスルーして、次のフィルタにXPSスプールファイル407をそのまま渡す。最後のレンダラフィルタ412では、XPSスプールファイル407をレンダリングしてPDLに変換する。PDLデータは印刷処理のスケジュール管理を行うプリントマネージャ306で管理され、キュー(待ち行列)に印刷ジョブが次々と登録される。プリンター1042が印刷できる状態になったら、キューに登録した順にPDLデータをI/Oモニタ310を通して送信する。このようにして、アプリケーションからの印刷データをプリンター言語に変換することがプリンタードライバーの主な役目であり、印刷処理が行われる。
【0017】
次にプリンタードライバー1052とアドバンスドUIアプリケーション311の関連付けを説明する。
まずは、プリンタードライバー1052のインストールを図10のフローチャートに従って説明する。プリンタードライバー1052は図9のセットアップインフォメーションファイル(以下、INFファイル)に従ってオペレーティングシステム1053へインストールされる。INFファイルには、プリンターの機種名や構成するファイル、バージョンなどプリンタードライバー1052をインストールするために必要な情報が記載されている。プリンタードライバー1052のインストールセットは、INFファイルとプリンタードライバー1052を構成する各種ファイルが集まって、ひとつのセットになっている。オペレーティングシステム1053は、プリンタードライバー1052のインストールが開始されると(S1001)、指定された機種のプリンタードライバー1052のインストールセットを探す。インストールセットはオペレーティングシステム1053に組み込まれているものを使用するが、ユーザーによって指定されるか、あらかじめ特定された配信サーバーなどから提供されることもある。オペレーティングシステム1053は、インストールセットに含まれるINFファイルを元にファイルをコピーし、レジストリデータベース308に必要なドライバ情報を書き込むことで、通常のプリンタードライバーのインストールが完了する(S1002)。ここで、INFファイルの中に、アドバンスドUIアプリケーション311のCLSIDが記載されているかどうかを確認する(S1003)。CLSIDとはUUID(Universally Unique Identifier)の一種で、16バイトの数値で構成され、世界で一意な識別子である。CLSIDはアドバンスドUIアプリケーション311を識別するために、使用するアドバンスドUIアプリケーション311に割り当てられたCLSIDをセットアップファイルに記載しておく。図9ではAdvancedUICLSIDというキーが、アドバンスドUIアプリケーション311のCLSIDに該当する。アドバンスドUIアプリケーション311のCLSIDが存在すれば、オペレーティングシステム1053はINFファイルからCLSIDを取得する(S1004)。オペレーティングシステム1053は、アドバンスドUIアプリケーション311のCLSIDを、レジストリデータベース308にあるプリンター機種ごとのドライバ情報に、追加して記載しておく(S1005)。これで、プリンタードライバー1052のインストールが完了する。
【0018】
次にアドバンスドUIアプリケーション311のインストールを、図11のフローチャートと図15のフローチャートの一部を使用して説明する。アドバンスドUIアプリケーション311は、プリンタードライバー1052のインストールセットとは別に、インストーラーとアドバンスドUIアプリケーション311の構成ファイルからなるアドバンスドUIアプリケーションのインストールセットが存在する。ユーザーがインストーラーを実行すると、まずインストーラーはアドバンスドUIアプリケーション311と構成ファイルをユーザーに指定されたアプリケーションを格納するフォルダにコピーする(S1101)。次に、インストーラーは、引数として/RegSvrオプションをつけてアドバンスドUIアプリケーション311を起動する(S1102)。起動されたアドバンスドUIアプリケーション311は、/RegSvrオプションをつけて起動されているかどうかを判定する(S1501)。アドバンスドUIアプリケーション311は、/RegSvrオプションがついていれば、COM(Component Object Model)のアウトプロセスサーバーとして、レジストリデータベース308に情報を書き込む(S1502)。COMはMicrosoft社のソフトウェア同士の通信技術で、通信する各ソフトウェアコンポーネントは一意のCLSIDによって識別される。アウトプロセスサーバーとは、呼び出したプロセスと別のプロセスで動作するコンポーネントであり、アドバンスドUIアプリケーション311はアウトプロセスサーバーであることを明示する。レジストリデータベース308に書き込む情報としては、アプリケーション名を含んだフルパスと、アドバンスドUIアプリケーションのCLSID、そしてアウトプロセスサーバーであることを示す“LocalServer32”の文字列である。このCLSIDは図9のINFファイルで指定したCLSIDと同一のものでなければならない。これで、アドバンスドUIアプリケーション311のインストールが完了する。
【0019】
プリンタードライバー1052のインストールによって取得したCLSIDと、アドバンスドUIアプリケーション311のインストールによって記載されたCLSIDが同一であることから、オペレーティングシステム1053は両者を関連付けることができる。
次にアプリケーション1051から、プリンタードライバー1052のユーザーインターフェースを表示するフローを、図8のブロック構成図と、図12、図15のフローチャートで説明する。
オペレーティングシステム1053のモジュールであるプリントマネージャ306は、アプリケーション1051からプリンタードライバー1052のユーザーインターフェースを表示するAPIの呼び出しを受け取る(S1201)。そのとき、プリントマネージャ306は、アプリケーション1051から引数として印刷設定のDEVMODE構造体も受け取る。これは、受け取った印刷設定のDEVMODE構造体に従ってユーザーインターフェースを構築することで、現在の印刷設定をユーザーに見せることができるためである。また、プリントマネージャ306は、アプリケーション1051からどのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。これは、複数のプリンタードライバー1052がオペレーティングシステム1053にインストールされていたときに、どのプリンタードライバー1052を使用するのかを明確にするためである。プリントマネージャ306は、アプリケーション1051から受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、プリントマネージャ306は指定された機種情報に応じたドライバ情報を取得する(S1202)。プリントマネージャ306は取得したドライバ情報の中にアドバンスドUIアプリケーションのCLSIDがあるかどうかを判定する(S1203)。なければ、プリントマネージャ306は、プリンタードライバー1052のコンフィギュレーションモジュール304のユーザーインターフェースを開くために、CPSUI801を呼び出す(S1212)。CPSUI(Common Property Sheet User Interface)801は、プロパティシートのベースとなる土台を作成し、コンフィギュレーションモジュール304にユーザーインターフェースの作成を依頼する。コンフィギュレーションモジュール304は機種依存データファイル305を使用して、プリンターの機種に応じたユーザーインターフェースを表示する。すなわちアプリケーション1051と同一プロセスでユーザーインターフェースモジュールを起動する。アドバンスドUIアプリケーションのCLSIDが存在するときは、プリントマネージャ306はCLSIDとアウトプロセスサーバーで起動することを引数に指定してオペレーティングシステム1053のAPIを呼び出す(図16(1))。プリントマネージャ306はオペレーティングシステム1053のAPIの中で、指定されたCLSIDを検索キーにしてレジストリデータベース308を検索する。プリントマネージャ306はオペレーティングシステム1053のAPIの中で、アドバンスドUIアプリケーション311がすでにインストールされていれば、レジストリデータベース308からアドバンスドUIアプリケーション311のファイル名を含むフルパスを取得できる(S1204)。もし、存在しない場合はCLSIDが存在しなかったときと同じく、プリンタードライバーのユーザーインターフェースを表示する。これは、INFファイルにCLSIDが記載されているのに、アドバンスドUIアプリケーション311がインストールされていない環境で発生する。フルパスを取得したら、プリントマネージャ306はオペレーティングシステム1053のAPIの中から、アドバンスドUIアプリケーション311をアプリケーション1051と異なるプロセスで起動する(S1205)。起動されたアドバンスドUIアプリケーション311は、/RegSvrオプションがついていないので(S1501)、ウィンドウを作成する(S1503)。この時点で作成したウィンドウはまだ表示してはおらず、メッセージループでプリントマネージャ306からの応答を待つために作成しているだけである。アドバンスドUIアプリケーション311は、アドバンスドUIアプリケーション311のインターフェースオブジェクトを作成し、インターフェースオブジェクトを引数に指定してオペレーティングシステム1053のAPIを呼び出す(S1504と図16(2))。すると、プリントマネージャ306は、アドバンスドUIアプリケーション311のインターフェースを受け取ることができる(S1206)。インターフェースを受け取ったプリントマネージャ306は、DEVMODE構造体をプリントチケットに変換する(S1207)。プリントマネージャ306は、コンフィギュレーションモジュール304を呼び出すことで、プリントチケットへの変換を行う。DEVMODE構造体のようなバイナリデータのままでは、異なるプロセス間のデータを送受信するのに不都合なため、テキスト形式のマークアップ言語XMLのプリントチケットへ変換する。プリントマネージャ306は、プリンター機種、CLSIDを元に取得したドライバ情報、プリントチケット、イベント情報を、受け取ったインターフェースの引数として、インターフェースのメソッドを呼び出す(S1208)。イベント情報とは、アプリケーション1051がプリンタードライバー1052に対してどのようなユーザーインターフェースを表示するかの情報である。プリンタードライバーのユーザーインターフェースは1つではなく、印刷設定を行うユーザーインターフェース、デバイス設定を行うユーザーインターフェース、ジョブの印刷設定の確認を行うユーザーインターフェースが存在する。このうち、どのユーザーインターフェースを表示するのかをイベント情報として、アドバンスドUIアプリケーション311に通知する必要があるからである。アドバンスドUIアプリケーション311はインターフェースの呼び出しを受け取り、UIのイベントかどうかを判定する(S1505)。アドバンスドUIアプリケーション311は、UIのイベントであることが確認できたら、呼び出されたインターフェースから、プリンター機種、ドライバ情報、プリントチケットを取得する(S1506)。次にアドバンスドUIアプリケーション311は、UIイベントの種類を判定し、表示するユーザーインターフェースを決定する。アドバンスドUIアプリケーション311はアプリから印刷設定のユーザーインターフェースが呼び出されたときは(S1507)、印刷設定のユーザーインターフェースを表示する(S1508)。アドバンスドUIアプリケーション311はデバイス設定のユーザーインターフェースが呼び出されたときは(S1509)、デバイス設定のユーザーインターフェースを表示する(S1510)。アドバンスドUIアプリケーション311はジョブ設定のユーザーインターフェースが呼び出されたときは(S1511)、ジョブ設定のユーザーインターフェースを表示する(S1512)。アドバンスドUIアプリケーション311は取得したプリンター機種とドライバ情報、プリントチケットに基づいてユーザーインターフェースを表示する。表示に使用する印刷設定の項目や、設定項目同士の禁則などのロジックについては、アドバンスドUIアプリケーション311はプリンタードライバー1052を呼び出してデータの取得や制御を行う。アドバンスドUIアプリケーション311は、プリンタードライバー1052のコンフィギュレーションモジュール304のユーザーインターフェースを表示することもできる。しかしながら、自分でユーザーインターフェースを表示することによって、コンフィギュレーションモジュール304からユーザーインターフェースをなくすことができる。このようにすることで、プリンタードライバー1052のコンフィギュレーションモジュール304は印刷設定のみにすることができ、プリンタードライバー1052を更新することなく、ユーザーインターフェースを自由に組み替えることができるようになる。もちろん、アドバンスドUIアプリケーション311が直接プリンタードライバーを呼び出すのではなく、インターフェースを通じてプリンタードライバーを呼び出すためのドライバーインターフェースを渡してもらうことも可能である。このドライバーインターフェースを通じて、アドバンスドUIアプリケーション311は、印刷設定の項目や、設定項目同士の禁則をすることもできる。ユーザーがユーザーインターフェースで印刷設定を終えたら、アドバンスドUIアプリケーション311は、ユーザーインターフェースを閉じてウィンドウを破棄する(S1513)。アドバンスドUIアプリケーション311は、ユーザーインターフェースの設定を、インターフェースで渡されたプリントチケットに反映する(S1514)。アドバンスドUIアプリケーション311は、プリントチケットに反映できないデータについては、レジストリデータベース308に保存する(S1515)。プリントチケットに反映できないデータは、プリンターのフィニッシャーなどのオプション機器構成や、ユーザー名やパスワードなどの個人情報、お気に入りやスタンプといったユーザーが作成する機能などが存在する。すべての保存が終了したら、アドバンスドUIアプリケーション311は終了して、呼び出し元であるプリントマネージャ306に制御を返す。プリントマネージャ306は、アドバンスドUIアプリケーション311がユーザーインターフェースを表示している間、終了するのを待っている(S1209)。アドバンスドUIアプリケーション311が終了するのが確認できたら、プリントマネージャ306は、アドバンスドUIアプリケーション311によって変更されたプリントチケットを受け取る。そして、DEVMODE構造体に変換するためにプリンタードライバー1052のコンフィギュレーションモジュール304を呼び出す(S1210)。プリントマネージャ306は、アプリケーションに対して変換したDEVMODE構造体を返し、APIを終了する(S1211)。このようにして、アプリケーションとは別のプロセスで、印刷設定に関連するユーザーインターフェースを実行する。
【0020】
アプリケーションのプロセスと、アドバンスドUIアプリケーションのプロセスの間は、インターフェースのメソッドの呼び出しとなっているが、図8のブロック構成図と図13、図14のフローチャートを使用してその中身を説明する。インターフェースが呼び出されると、オペレーティングシステム1053はCOMプロキシ802を呼び出す。COMプロキシ802は、インターフェースのメソッドに入力された引数データをマーシャリングする(S1301)。マーシャリングとは異なる2つのシステムでデータを送受信できるように、オブジェクトデータをストリームに格納することである。COMプロキシ802はRPC(Remote Procedure Call)を使って、アドバンスドUIアプリケーション311のプロセスにあるCOMスタブ803を呼び出す(S1302)。RPCは、離れたシステム同士で手続きを呼び出すことができる機能である。COMプロキシ802は呼び出したCOMスタブ803に、マーシャリングしたストリームデータを送信する。COMスタブ803は、COMプロキシ802から受け取ったストリームをアンマーシャリングし、元のオブジェクトデータであるメソッドの引数に戻す(S1401)。アンマーシャリングとは、ストリームを元のオブジェクトデータに戻すことである。そして、プロセスのメインスレッドであるアドバンスドUIアプリケーション311に対して、メソッドの引数データを引き渡す(S1402)。このようにしてプリントマネージャ306は、別のプロセスであるアドバンスドUIアプリケーション311を起動し、データを送信している。逆にアドバンスドUIアプリケーション311から、プリントマネージャ306に送信するときは、COMプロキシ802がCOMスタブに、COMスタブ803がCOMプロキシになる。したがって、COMプロキシとCOMスタブは同一の機能を持った同じモジュールである。
【0021】
アドバンスドUIアプリケーション311はアプリケーション1051が動作するプロセスと異なるプロセスで動作するので、インターフェースを通じて印刷設定であるプリントチケットでしか情報を伝達することができない。プリントチケットに含まれないレジストリデータベース308に保存されたデータは、印刷時に参照することができなくなるので、プリンター1042にすべてのデータを送信することができなくなってしまう。そこで、XPS印刷システムのプロパティバッグ414を使用することで、レジストリデータベース308に保存されたデータも参照できるようにする。図17のブロック構成図と、図18のフローチャートで伝達方法を説明する。
【0022】
フィルタパイプラインマネージャ409はアプリケーション1051から印刷が開始されると、印刷ジョブであるXPSスプールファイル407を渡される(S1801)。また、フィルタパイプラインマネージャ409は、アプリケーション1051からどのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。フィルタパイプラインマネージャ409は、アプリケーション1051から受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、フィルタパイプラインマネージャ409は指定された機種情報に応じたドライバ情報を取得する。フィルタパイプラインマネージャ409は取得したドライバ情報の中にアドバンスドUIアプリケーション311のCLSIDがあるかどうかを判定する(S1802)。CLSIDがなければ、フィルタを呼び出して印刷処理を行う。アドバンスドUIアプリケーション311のCLSIDが存在するときは、フィルタパイプラインマネージャ409はCLSIDとアウトプロセスサーバーで起動することを引数に指定してオペレーティングシステム1053のAPIを呼び出す(図16(1))。フィルタパイプラインマネージャ409はオペレーティングシステム1053のAPIの中で、指定されたCLSIDを検索キーにしてレジストリデータベース308を検索する。フィルタパイプラインマネージャ409はオペレーティングシステム1053のAPIの中で、アドバンスドUIアプリケーション311がインストールされていれば、レジストリデータベース308からアドバンスドUIアプリケーション311のファイル名を含むフルパスを取得できる(S1803)。もし、存在しない場合はCLSIDが存在しなかったときと同じく、フィルタを呼び出して印刷処理を行う。フルパスを取得したら、フィルタパイプラインマネージャ409はオペレーティングシステム1053のAPIの中から、アドバンスドUIアプリケーション311を起動する(S1804)。起動されたアドバンスドUIアプリケーション311は、/RegSvrオプションがついていないので(S1501)、ウィンドウを作成する(S1503)。この時点で作成するウィンドウは表示のために作成するのではなく、メッセージループでフィルタパイプラインマネージャ409からの応答を待つために作成しているだけである。アドバンスドUIアプリケーション311は、アドバンスドUIアプリケーション311のインターフェースオブジェクトを作成し、インターフェースを指定してオペレーティングシステム1053のAPIを呼び出す(S1504と図16(2))。すると、フィルタパイプラインマネージャ409は、アドバンスドUIアプリケーション311のインターフェースを受け取ることができる(S1805)。インターフェースを受け取ったフィルタパイプラインマネージャ409は、プロパティバッグ414のオブジェクトを作成する。フィルタパイプラインマネージャ409は、作成したプロパティバッグ414をインターフェースの引数として、インターフェースのメソッドを呼び出す(S1806)。アドバンスドUIアプリケーション311はインターフェースの呼び出しを受け取り、UIのイベントかどうかを判定する(S1505)。今回はプロパティバッグ414を引数としてメソッドを呼び出しているのでUIのイベントではないため、アドバンスドUIアプリケーション311は、レジストリから以前に保存した情報を取得する(S1516)。アドバンスドUIアプリケーション311は、インターフェースから引数のプロパティバッグ414を取得し(S1517)、プロパティバッグに値を追加する(S1518)。プロパティバッグ414は名前と値の組み合わせで、自由にデータを追加・削除・参照できる仕組みである。アドバンスドUIアプリケーション311は、プリンターのフィニッシャーなどのオプション機器構成や、ユーザー名やパスワードなどの個人情報、お気に入りやスタンプといったユーザーが作成する機能などをプロパティバッグ414に追加しておく。アドバンスドUIアプリケーション311は、プロパティバッグ414へ値の追加が終了すると、自身も終了する。フィルタパイプラインマネージャ409は、アドバンスドUIアプリケーション311がユーザーインターフェースを表示している間、終了するのを待っている(S1807)。アドバンスドUIアプリケーション311が終了するのが確認できたら、フィルタパイプラインマネージャ409は、アドバンスドUIアプリケーション311によって変更されたプロパティバッグ414を受け取る。そして、従来どおりフィルタを呼び出して印刷処理を行う(S1808)。各フィルタは、必要に応じて、プロパティバッグ414から情報を取得する。フィルタパイプラインマネージャ409は、プロパティバッグ414のオブジェクトは最後のフィルタがPDLを出力し終わったら破棄するので、1回の印刷の間のみ有効である。このようにして、アドバンスドUIアプリケーション311の情報を、フィルタに伝達する。
【0023】
アドバンスドUIアプリケーション311を使用した場合、サーバー203からクライアント201や202にプリンタードライバーをダウンロードして動作するポイントアンドプリント、いわゆる共有プリンターで動作できない。図2のようなネットワーク環境において、共有プリンターではクライアントがプリンタードライバーをサーバー203からダウンロードすることができる。したがって、コンフィギュレーションモジュール304にユーザーインターフェースが入っていれば、クライアント201や202でもユーザーインターフェースを表示できる。しかし、アドバンスドUIアプリケーション311は、プリンタードライバーとは別のものになるので、クライアント201や202にダウンロードできない。また、RPCはサーバー203とクライアント201や202の間を通信することも可能だが、そのままではアドバンスドUIアプリケーション311はサーバー203で起動してしまい、ユーザーがクライアント上でユーザーインターフェースを操作できない。そこで、アドバンスドUIアプリケーション311がインストールされている環境では、共有プリンターが利用できないようにする。以下、図19、図20と図21のフローチャートを使用して、共有プリンターを禁止する仕組みを説明する。
【0024】
オペレーティングシステム1053は、ユーザーからプリンタードライバー1052の共有タブを表示するように呼び出されると(S2101)、どのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。オペレーティングシステム1053は
受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、オペレーティングシステム1053は指定された機種情報に応じたドライバ情報を取得する。オペレーティングシステム1053は取得したドライバ情報の中にアドバンスドUIアプリケーション311のCLSIDがあるかどうかを判定する(S2102)。CLSIDが存在すれば、アドバンスドUIアプリケーション311を使用してユーザーインターフェースを表示することになるので、オペレーティングシステム1053は「共有はサポートされない」メッセージを配置した共有設定が指定できない共有タブを表示する(図20)。なお、図19の画面の共有のためのチェックボックスをグレーアウトさせて表示してもよい。CLSIDが存在しないときは、オペレーティングシステム1053は共有のためのチェックボックスを配置した共有タブを表示する(図19)。
【0025】
アドバンスドUIアプリケーション311を使用するとき、CPSUI801によってプロパティシートの土台を作成しているわけではないので、自由にユーザーインターフェースを作ることができる。しかし、プロパティシートの土台といくつかのタブをオペレーティングシステム1053が追加した後、プリンタードライバー1052のコンフィギュレーションモジュール304がタブをさらに追加するユーザーインターフェースは作成できなくなる。たとえば、デバイス設定のユーザーインターフェースや、ジョブの設定を確認するユーザーインターフェースである。このようなユーザーインターフェースでは、アドバンスドUIアプリケーション311がユーザーインターフェースを生成できない。そこで、図22、図23と図24のフローチャートを使用して、ユーザーインターフェースにボタンを表示する方法を説明する。
【0026】
オペレーティングシステム1053は、ユーザーからデバイス設定やジョブの設定を確認するユーザーインターフェースを表示するように呼び出されると(S2401)、どのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。オペレーティングシステム1053は受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、オペレーティングシステム1053は指定された機種情報に応じたドライバ情報を取得する。オペレーティングシステム1053は取得したドライバ情報の中にアドバンスドUIアプリケーション311のCLSIDがあるかどうかを判定する(S2402)。CLSIDが存在すれば、アドバンスドUIアプリケーション311のユーザーインターフェースを開くためのボタンを配置して、タブを表示する(S2403)。CLSIDが存在しなければ、プリンタードライバー1052のコンフィギュレーションモジュール304を呼び出して、タブを追加してもらうようにする(S2404)。図22はジョブの設定を確認するユーザーインターフェースに、基本設定のボタンを表示して、アドバンスドUIアプリケーション311のジョブ設定のユーザーインターフェースが呼び出せるようにしている。図23はデバイス設定のユーザーインターフェースに、デバイス設定のボタンを表示して、アドバンスドUIアプリケーション311のデバイス設定のユーザーインターフェースを呼び出せるようにしている。
【0027】
以上のようにすることで、プリンタードライバー1052からアドバンスドUIアプリケーション311という形でユーザーインターフェースを切り離すことで、ユーザーインターフェースがクラッシュしても、アプリケーションを巻き込まないようにできる。また、CPSUI801に依存しないシステムになることで、プロパティシートではない自由にユーザーインターフェースを作成することができる。また、名前付きパイプや共有メモリを使用せずにCOMで異なるプロセス間の通信を行うことで、アドバンスドUIアプリケーション311にオペレーティングシステム1053に依存するコードを少なくすることができる。
【0028】
[実施例2]
実施例1では、アドバンスドUIアプリケーション311はプリンタードライバー1052のインストールセットと別にインストールを行ったが、プリンタードライバー1052のインストールセットに含むこともできる。以下、アドバンスドUIアプリケーション311をプリンタードライバー1052のインストールセットに含んだときのプリンタードライバー1052のインストールを、図25のフローと図26を使用して説明する。
プリンタードライバー1052は図26のセットアップインフォメーションファイル(以下、INFファイル)に従ってオペレーティングシステム1053へインストールされる。INFファイルには、実施例1で記載されていたアドバンスドUIアプリケーション311のCLSIDに加えて、アドバンスドUIアプリケーション311のアプリケーションファイル名が記載されている。オペレーティングシステム1053は、プリンタードライバー1052のインストールが開始されると(S2501)、指定された機種のプリンタードライバー1052のインストールセットを探す。インストールセットはオペレーティングシステム1053に組み込まれているものを使用するが、ユーザーによって指定されるか、あらかじめ特定された配信サーバーなどから提供されることもある。オペレーティングシステム1053は、インストールセットに含まれるINFファイルを元にファイルをコピーし、レジストリデータベース308に必要なドライバ情報を書き込むことで、通常のプリンタードライバーのインストールが完了する(S2502)。次に、オペレーティングシステム1053は、プリンタードライバー1052のINFファイルの中にアドバンスドUIアプリケーション311のファイル名があるかどうかを判定する(S2503)。図26ではAdvancedUIというキーが、アドバンスドUIアプリケーション311のファイル名に該当する。ファイル名が存在する場合は、オペレーティングシステム1053が引数として/RegSvrオプションをつけてアドバンスドUIアプリケーション311を起動する(S2504)。オペレーティングシステム1053は、INFファイルの中に、アドバンスドUIアプリケーション311のCLSIDが記載されているかどうかを確認する(S2505)。アドバンスドUIアプリケーション311のCLSIDが存在すれば、オペレーティングシステム1053はINFファイルからCLSIDを取得する(S2506)。オペレーティングシステム1053は、アドバンスドUIアプリケーション311のCLSIDを、レジストリデータベース308にあるドライバ情報に、追加して記載しておく(S2507)。これで、プリンタードライバー1052のインストールとともに、アドバンスドUIアプリケーション311のインストールが完了する。
【0029】
以上のように、プリンタードライバー1052のインストールセットにアドバンスドUIアプリケーション311を追加しておくと、ユーザーが後から別途追加することなく、プリンタードライバー1052をインストールするだけで、別プロセスで起動するユーザーインターフェースを使用することができる。
【0030】
以上説明したように、本発明の実施の形態により,アプリケーションと別のプロセスでプリンタードライバーのユーザーインターフェースが起動するので、アプリケーションまで巻き込んでクラッシュすることがなくなる。また、オペレーティングシステムがベースを用意する必要がなくなるので、プリンタードライバーのユーザーインターフェースは自由にデザインやコントロールを配置することができる。また、UIアプリケーションはプリンタードライバーと別にインストールすることができるので、プリンタードライバーを更新することなくユーザーインターフェースだけを変えることが可能である。また、プロセスごとにメモリ領域が別になるので、より多くのメモリ領域を使用することができ、動画や3Dを使用したリッチなユーザーインターフェースを作成することもできるようになる。
【符号の説明】
【0031】
1042 プリンター
1051 アプリケーション
1052 プリンタードライバー
1053 オペレーティングシステム
201 クライアント
202 クライアント
203 サーバー
304 コンフィギュレーションモジュール
305 機種依存データファイル
306 プリントマネージャ(スプーラ)
308 レジストリデータベース
311 アドバンスドUIアプリケーション
403 DEVMODE構造体
404 プリントチケット
406 DEVMODE−プリントチケット変換モジュール
407 XPSスプールファイル
409 フィルタパイプラインマネージャ
414 プロパティバッグ
801 CPSUI
802 COMプロキシ
803 COMスタブ
【技術分野】
【0001】
本発明は、アプリケーションが実行するプロセスとは異なるプロセスで、プリンタードライバーのユーザーインターフェースを起動する情報処理装置、情報処理方法、及びプログラムに関するものである。
【背景技術】
【0002】
プリンタードライバーは詳細な印刷設定を行うために、専用のユーザーインターフェースを持っている。アプリケーションはオペレーティングシステムを介してプリンタードライバーのユーザーインターフェースを表示するが、プリンタードライバーはアプリケーションのプロセス内でロードされている。アプリケーションと同一プロセスでユーザーインターフェースを表示するので、印刷設定データの相互通信が容易であり、ユーザーインターフェース操作中はアプリケーションの操作を止めるモーダルダイアログになる。このようにアプリケーションとプリンタードライバーが一体化したように扱うことができるのが、同一プロセス実行のメリットである。しかし、プリンタードライバーのユーザーインターフェースに不具合があってクラッシュした場合、アプリケーションと同一プロセスであるがために、アプリケーションまで巻き込んでクラッシュしてしまう。
プリンタードライバーだけでなくアプリケーションも含めて、同一プロセスの問題に対処するために、サンドボックスと呼ばれる異なるプロセスで動作させるシステムが存在する。複数のウェブページが同時に閲覧できるタブを持ちそれぞれのタブを別プロセスで動作させるブラウザや、ファイルを開くたびに別のプロセスで起動するアプリケーションなどが知られている。また、プリンタードライバーであっても、アプリケーションの描画データをプリンター言語に変換するレンダリング部を別プロセスにしたり、デバイスと双方向通信してステータスを逐次監視するアプリケーションを別プロセスで起動したりするものがある(特許文献1)。
しかし、プリンタードライバーのユーザーインターフェースについては、別プロセスで起動する対策が難しい。オペレーティングシステムがベースとなるユーザーインターフェースを構築し、プリンタードライバーはそのベース上に追加するシステムになっているからである。そこで、アプリケーションがプリンタードライバーのユーザーインターフェースを呼び出す際に別のサービスを起動し、サービスがプリンタードライバーのユーザーインターフェースを表示する方法がある(特許文献2)。また、プリンタードライバーのユーザーインターフェースをダミーで開いたあとにすぐ閉じて、そのあとで別プロセスを起動する方法が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第4661939
【特許文献2】特開平11−143664号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、アプリケーションが別のサービスを起動する方法では、すべてのアプリケーションがこの呼び出し方に対応するように変更を加えなければならない。また、ダミーのユーザーインターフェースを開く方法では、一度ユーザーインターフェースを閉じるという余計な動作が入り、ユーザーにとってはわずらわしい。ほかにも、オペレーティングシステムがユーザーインターフェースを提供し、そこにプリンタードライバーがユーザーインターフェースを後からシートとして追加する場合は、正しく動作しなくなってしまう。
【課題を解決するための手段】
【0005】
上記課題を解決するために本発明の情報処理装置は、
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得手段と、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得手段により取得された識別子を追加する追加手段と、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込み手段と、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定手段と、
前記判定手段によりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動手段と、を備えることを特徴とする。
【発明の効果】
【0006】
本発明により、アプリケーションと別のプロセスでプリンタードライバーのユーザーインターフェースが起動するので、アプリケーションまで巻き込んでクラッシュすることがなくなる。
【図面の簡単な説明】
【0007】
【図1】本発明の一実施形態としての、コンピューターシステムのハードウェアとソフトウェアのブロック構成図である。
【図2】本発明の一実施形態としての、クライアントとサーバー、そしてプリンターが接続されたネットワークの構成図である。
【図3】本発明の一実施形態としての、一般的なコンピューターを用いた印刷処理システムのブロック構成図である。
【図4】本発明の一実施形態としての、XPS印刷処理システムのブロック構成図である。
【図5】本発明の一実施形態としての、印刷設定であるDEVMODE構造体のデータ構造を示したブロック構成図である。
【図6】本発明の一実施形態としての、XPS印刷処理システムで使用される印刷設定であるXML形式のプリントチケットの一例である。
【図7】本発明の一実施形態としての、プリンタードライバーのユーザーインターフェースである。
【図8】本発明の一実施形態としての、アプリケーションプロセスとは異なるアドバンスドUIアプリケーションのプロセスでユーザーインターフェースが動作しているときのブロック構成図である。
【図9】本発明の一実施形態としての、プリンタードライバーにアドバンスドUIアプリケーションのCLSIDが追加された、セットアップインフォメーションファイルの一例である。
【図10】本発明の一実施形態としての、オペレーティングシステムが、プリンタードライバーをインストールするときのフローチャートである。
【図11】本発明の一実施形態としての、アドバンスドUIアプリケーションのインストーラーが、アドバンスドUIアプリケーションをインストールするときのフローチャートである。
【図12】本発明の一実施形態としての、オペレーティングシステムが、プリンタードライバーのユーザーインターフェースを開くときのフローチャートである。
【図13】本発明の一実施形態としての、COMプロキシがCOMスタブを呼び出してプロセス間通信を行うときのフローチャートである。
【図14】本発明の一実施形態としての、COMスタブがCOMプロキシから呼び出されてプロセス間通信を行うときのフローチャートである。
【図15】本発明の一実施形態としての、アドバンスドUIアプリケーションが動作するときのフローチャートである。
【図16】本発明の一実施形態としての、プリントマネージャが、アドバンスドUIアプリケーションを呼び出すときのAPI呼び出しの一例、アドバンスドUIアプリケーションが、プリントマネージャにインターフェースを渡すときのAPI呼び出しの一例である。
【図17】本発明の一実施形態としての、XPS印刷システムにおいて、アドバンスドUIアプリケーションが、フィルタパイプラインマネージャにデータを渡すときのブロック構成図である。
【図18】本発明の一実施形態としての、XPS印刷システムにおいて、アドバンスドUIアプリケーションが、フィルタパイプラインマネージャにデータを渡すときのフローチャートである。
【図19】本発明の一実施形態としての、プリンタードライバーにおいて、共有プリンターを利用するための、オペレーティングシステムのユーザーインターフェースである。
【図20】本発明の一実施形態としての、アドバンスドUIアプリケーションがあるプリンタードライバーにおいて、共有プリンターを禁止するオペレーティングシステムのユーザーインターフェースである。
【図21】本発明の一実施形態としての、オペレーティングシステムが、共有プリンターのユーザーインターフェースを表示するときのフローチャートである。
【図22】本発明の一実施形態としての、アドバンスドUIアプリケーションがあるプリンタードライバーにおいて、ジョブの設定確認を行うときのオペレーティングシステムのユーザーインターフェースである。
【図23】本発明の一実施形態としての、アドバンスドUIアプリケーションがあるプリンタードライバーにおいて、デバイスの設定を行うときのオペレーティングシステムのユーザーインターフェースである。
【図24】本発明の一実施形態としての、オペレーティングシステムが、プリンタードライバーのユーザーインターフェースを表示するときのフローチャートである。
【図25】本発明の一実施形態としての、オペレーティングシステムが、アドバンスドUIアプリケーションを含んだプリンタードライバーをインストールするときのフローチャートである。
【図26】本発明の一実施形態としての、プリンタードライバーにアドバンスドUIアプリケーションが含まれた、セットアップインフォメーションファイルの一例である。
【発明を実施するための形態】
【0008】
[実施例1]
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【0009】
図1は本発明の実施形態を示す一般的なコンピューターを用いたシステムのブロック構成図である。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機能であっても、複数の機器からなるシステムであっても、ネットワークを介して接続がなされ処理が行われるシステムであっても、本発明を適用できることは言うまでもない。
【0010】
CPU101は主記憶装置102のROM1021あるいはRAM1022あるいは補助記憶装置105に格納されたプログラムに従って装置全体の制御を行う。RAM1022はCPU101が各種処理を行う際のワークエリアとしても使用される。補助記憶装置105はオペレーティングシステム(OS)1053やアプリケーションソフト1051等を記録する。キーボード1031やマウス・タッチパネルなどに代表されるポインティングデバイス1032などの入力機器は、入力I/F103を通じて、ユーザーがコンピューターに対して各種指示を与えるためのデバイスである。出力I/F104は、データを外部に出力するためのインターフェースであり、モニタ1041やプリンター1042などの出力機器に対してデータを出力する。プリンター1042とは直接接続されるローカルI/Oのみならず、通信I/F106を通じて接続されるネットワーク1061を通して接続されていてもよい。また、107は共通データシステムバスで、モジュール間でそれぞれのデータのやりとりを行う。
【0011】
図2は本発明の実施の形態におけるネットワーク1061の環境を簡略した図である。印刷を行う文書や画像を作成するクライアントコンピュータ201/202が単体もしくは複数ネットワークに接続されている。また、クライアントのユーザーやプリンターを管理するサーバーコンピュータ203が接続されていることもある。プリンター204/205が単体もしくは複数ネットワークに接続されており、プリンター205のように物理的に接続されていても実際には使用できないオフライン状態であることもある。ネットワークにはPAN(Personal Area Network)、LAN(Local Area Network)、MAN(Metropolitan Area Network)、WAN(WIDe Area Network)などの小規模から大規模までのネットワークがあり、これらの機器がすべてのネットワークに接続されている。クラウドなど、サーバーやプリンターがインターネットを越えて接続されていてもかまわない。
【0012】
図3において、一般的なコンピューターを用いた印刷処理システムを示す。アプリケーション1051と、プリンタードライバー1052、オペレーティングシステム1053は、図1の補助記憶装置105に格納されている。グラフィックスエンジン302、プリントマネージャ306はオペレーティングシステム1053に含まれるモジュールである。ユーザーはキーボード1031やマウス1032などといった入力装置を使用して、出力装置のモニタ1041に映し出されたアプリケーションプログラム1051を使用して作成した文書301の印刷処理を実行する。印刷処理はプリンターの選択、印刷設定の作成、描画データの変換と3つの処理を順番に行うことで実行される。まずは、プリンターの選択として、印刷を実行するプリンター1042に対応したプリンタードライバー1052を選択する。次に印刷設定3012の作成を行う。文書の印刷設定3012はプリンタードライバー1052のコンフィギュレーションモジュール304によって初期値が作成される。作成された印刷設定3012をアプリケーション1051もしくはプリンタードライバー1052のユーザーインターフェースを使用してユーザーが望む最終印刷結果になるように変更して設定を行う。たとえば、出力する用紙サイズを変更したり、両面印刷、白黒印刷を行なうといった設定である。プリンタードライバー1052のユーザーインターフェースは、コンフィギュレーションモジュール304かアドバンスドUIアプリケーション(ユーザーインターフェースアプリケーション)311のどちらかが提供する。印刷設定3012はRAM1022上に確保されるが、保存する形式はバイナリのデータ構造体であったり、マークアップ言語のXMLであったりする。この形態はプリンタードライバー1052やオペレーティングシステム1053の仕様によって異なる。印刷設定3012は文書印刷のたびに作成する。しかしながら、プリンター1042のオプション機器構成や、ユーザーごとの環境設定など設定を保持しておきたいものは、プリンタードライバー1052がオペレーティングシステム1053のレジストリデータベース308に保存する。印刷設定3012のユーザーごとのデフォルト値はオペレーティングシステム1053のプリントマネージャ306が、レジストリデータベース308に保存する。最後に描画データの変換を行う。印刷設定3012が作成し終わったら、ユーザーによって印刷処理が実行され、オペレーティングシステム1053に印刷処理を通知する。オペレーティングシステム1053はグラフィックスエンジン302を通じて、指定されたプリンタードライバー1052への描画を行う。印刷設定3012でレイアウト処理が指定されている場合は、プリンタードライバー1052のレンダリングモジュール303に行く前に一時的なスプールファイル307を作成し、レイアウトモジュール309を起動する。レイアウト処理とは用紙の順番を入れ替えたり、一枚の用紙に複数ページを貼り付けたりする処理を指す。レイアウトモジュール309はレイアウトを変更した後、プリンタードライバー1052への描画を再度行う。描画データが送られてきたプリンタードライバー1052はレンダリングモジュール303によって、プリンターが理解できるデータ言語すなわちプリンター制御言語に変換する。このとき印刷設定3012も、プリンター制御言語として変換する。レンダリングモジュール303、コンフィギュレーションモジュール304はともに複数の種類のプリンター1042に対して共通のモジュールであることが多く、機種ごとの違いは機種依存データファイル305に記述されている。レンダリングモジュール303、コンフィギュレーションモジュール304は適宜、この機種依存データファイル305を参照する。変換されたデータはスプールファイル307として逐次保存していく。プリントマネージャ306はスプールファイル307を取得し、印刷ジョブファイルとして印刷処理のスケジュール管理を行う。プリンターが印刷できる状態になったら、プリントマネージャ306はI/Oモジュール310を介してプリンター1042に印刷ジョブデータを送信する。このようにして、アプリケーションからの印刷データがプリンター言語に変換されて印刷を行う。
【0013】
文書301の印刷設定3012を作成するには、アプリケーションによって印刷設定3012を直接書き換えるか、プリンタードライバー1052のコンフィギュレーションモジュール304もしくはアドバンスドUIアプリケーション311が提供するユーザインタフェース(図7)を使用する。印刷設定3012はMicrosoft(登録商標)Windows(登録商標)オペレーティングシステムでは、DEVMODE構造体と呼ばれる図5の構造をしている。DEVMODE構造体はオペレーティングシステムで公開定義されている標準の設定領域501と、プリンタードライバーが拡張した設定領域502に分けられている。標準の設定領域501には、用紙サイズや給紙段の切り替え、カラー白黒の切り替えなど印刷の基本的な設定の値がある。拡張した設定領域502には、プリンターのオプションに応じた排紙機能や、細かい色調整機能などの値がある。アプリケーションは各プリンタードライバー1052が持つ拡張設定を知ることはできないので、直接印刷設定を書き換えることができるのは、システムで定義されている標準の設定領域501だけとなる。そこで、アプリケーションはプリンタードライバー1052のユーザーインターフェースを表示させて、拡張された印刷設定502をユーザーに行わせるのが一般的である。コンフィギュレーションモジュール304はユーザーインターフェースだけではなく、アプリケーションプログラムインタフェース(API:Application Programming Interface)も提供している。なので、ユーザーインターフェースを表示せずに拡張された印刷設定502を外部から設定することも可能である。しかし、コンフィギュレーションモジュール304のAPIを使用する場合はアプリケーションがプリンタードライバー1052ごとに対応しなければならないので、一般的なアプリケーションは標準の設定領域501のみ変更を行う。
【0014】
もうひとつ、本発明を適用できる別の印刷システムを説明する。図3はGDI印刷システムと呼ばれるのに対し、図4はXPS印刷システムのブロック構成図である。XPS印刷システムはXML Paper Specificationと呼ばれる文書ファイルフォーマットをスプールデータとして使用し、印刷を行うシステムである。XPS印刷システムもGDI印刷システムと同じく、オペレーティングシステム1053上で動作している。プリントマネージャ306、GDItoXPS変換モジュール405、フィルタパイプラインマネージャ409はオペレーティングシステム1053に含まれるモジュールである。プリンタードライバー1052とフィルタパイプラインマネージャ409の各フィルタは、図1の補助記憶装置105にプリンタードライバー1052として格納されている。フィルタパイプラインマネージャ409はオペレーティングシステムに含まれるが、各フィルタはプリンタードライバー1052のモジュールである。GDI印刷アプリケーション401とXPS印刷アプリケーション402は、図1の補助記憶装置105にアプリケーション1051として格納されている。ユーザーはキーボード1031やマウス1032などといった入力装置を使用して、出力装置のモニタ1041に映し出されたGDI印刷アプリケーションプログラム401(以下、GDIアプリと略す)、もしくはXPS印刷アプリケーションプログラム402(以下、XPSアプリと略す)から印刷処理を実行する。印刷処理はプリンターの選択、印刷設定の作成、描画データの変換と3つの処理を順番に行うことで実行する。
【0015】
まずは、印刷したいプリンター1042の選択をする、これは、印刷を実行するプリンター1042に対応したプリンタードライバー1052を選択することと同義である。次に印刷設定を作成する。印刷設定はアプリケーションが印刷設定用のメモリを確保し、アプリケーションかプリンタードライバーのコンフィギュレーションモジュール304が、機種依存ファイル305を利用して設定データを埋めるという形で行われる。GDIアプリ401では印刷設定データとしてバイナリのDEVMODE構造体403を用い、XPSアプリ402ではマークアップ言語のXMLで記載されたプリントチケット404を用いる。DEVMODE構造体403もプリントチケット404も、図5の構造のように、オペレーティングシステムが定義する標準領域とプリンタードライバーが独自で定義する拡張領域を持つ。また、プリントチケット404は、図6にあるようなXML形式で記述された印刷設定情報であるので、標準領域と拡張領域は名前空間によって記載が分かれている。このDEVMODE構造体403もしくはプリントチケット404が印刷設定を保持しており、アプリケーションが直接書き換えることで印刷設定を変更する。プリンター1042に依存した専用の設定は、コンフィギュレーションモジュール304もしくはアドバンスドUIアプリケーション311が持つプリンタードライバー1052のユーザインタフェース(図7)を表示して行う。プリンタードライバー1052は、ユーザーインターフェースの設定に従い、DEVMODE構造体403もしくはプリントチケット404のプリンター1042に依存した設定を変更する。印刷設定とは具体的に、出力する用紙サイズを「A4」にする、両面印刷を行う、カラーと白黒を切り替える、給紙段を指定するなどといった印刷を行うのに必要なデータのことを指す。プリントチケット404は印刷設定がXML形式で記述されているので、XPSアプリ402がすべての設定値を直接変更して書き換えることは容易だが、従来のようにプリンタードライバー1052のユーザーインターフェースを使って設定変更してもかまわない。印刷設定は文書印刷のたびに作成するが、プリンター1042のオプション機器や、ユーザーごとの環境設定など設定を保持しておきたいものは、ユーザーインターフェースがオペレーティングシステムのレジストリデータベース308に保存する。印刷設定のユーザーごとのデフォルト値はオペレーティングシステムのプリントマネージャ306が、レジストリデータベース308に保存する。最後に描画データの変換を行う。印刷設定が確定したら、ユーザーはアプリケーションから印刷処理を実行する。GDIアプリ401から印刷する場合は、プリンタードライバーの形態を取るGDItoXPS変換モジュール405に描画データが送られ、XPSスプールファイル407が作成される。このときGDItoXPS変換モジュール405はコンフィギュレーションモジュール304を呼び出し、印刷設定をDEVMODE構造体403からプリントチケット404に変換する。XPSアプリ402から印刷する場合は、XPSファイルをXPSアプリ自身が生成するのと、オペレーティングシステムがXPSアプリからの描画命令に応じてXPSファイルを生成するのと2通りの方法がある。どちらの方法であっても、印刷の途中でXPSスプールファイル407を生成する。このようにXPS印刷システムは、印刷時に必ずXPSスプールファイル407を生成するのが特徴である。
【0016】
XPSスプールファイル407が生成されたら、プリントフィルタパイプラインプロセスに処理が渡される。プリントフィルタパイプラインプロセスは複数のフィルタを通すことで印刷が行われる仕組みで、フィルタコンフィギュレーションファイル413でフィルタの数や順番を制御する。プリントフィルタパイプラインプロセスで動作するフィルタパイプラインマネージャはフィルタコンフィギュレーションファイル413に従って、この実施例では設定フィルタ410、レイアウトフィルタ411、レンダラフィルタ412の順に処理を行う。フィルタはプリンタードライバー1052の構成によって、数や種類が異なる。印刷処理はXPSスプールファイル407をフィルタに受け渡すことで行われ、フィルタがそれぞれXPSスプールファイル407を加工し次のフィルタに渡していくことで処理が進む。最後にはプリンターが理解できるデータ言語であるプリンター制御言語(以下、PDL(Page Description Language)と略す)となって出力される。もちろんプリンター1042がXPSスプールファイル407を直接読み込んで印刷できるXPSダイレクトプリンタであれば、すべてのフィルタをスルーして印刷してもよい。設定フィルタ410ではプリントチケットを読み込んで印刷に必要なデータをプリントチケットに書き込む処理を行う。レイアウトフィルタ411では倍率の変更や製本の面付けレイアウトやスタンプなどレイアウトに関する処理を行う。レイアウトフィルタ411では、XPSスプールファイル407に含まれる印刷設定プリントチケット404に従って動作する。そのため、たとえば面付けの設定がプリントチケット404に存在しないときは、レイアウトフィルタ411は何も動作せずスルーして、次のフィルタにXPSスプールファイル407をそのまま渡す。最後のレンダラフィルタ412では、XPSスプールファイル407をレンダリングしてPDLに変換する。PDLデータは印刷処理のスケジュール管理を行うプリントマネージャ306で管理され、キュー(待ち行列)に印刷ジョブが次々と登録される。プリンター1042が印刷できる状態になったら、キューに登録した順にPDLデータをI/Oモニタ310を通して送信する。このようにして、アプリケーションからの印刷データをプリンター言語に変換することがプリンタードライバーの主な役目であり、印刷処理が行われる。
【0017】
次にプリンタードライバー1052とアドバンスドUIアプリケーション311の関連付けを説明する。
まずは、プリンタードライバー1052のインストールを図10のフローチャートに従って説明する。プリンタードライバー1052は図9のセットアップインフォメーションファイル(以下、INFファイル)に従ってオペレーティングシステム1053へインストールされる。INFファイルには、プリンターの機種名や構成するファイル、バージョンなどプリンタードライバー1052をインストールするために必要な情報が記載されている。プリンタードライバー1052のインストールセットは、INFファイルとプリンタードライバー1052を構成する各種ファイルが集まって、ひとつのセットになっている。オペレーティングシステム1053は、プリンタードライバー1052のインストールが開始されると(S1001)、指定された機種のプリンタードライバー1052のインストールセットを探す。インストールセットはオペレーティングシステム1053に組み込まれているものを使用するが、ユーザーによって指定されるか、あらかじめ特定された配信サーバーなどから提供されることもある。オペレーティングシステム1053は、インストールセットに含まれるINFファイルを元にファイルをコピーし、レジストリデータベース308に必要なドライバ情報を書き込むことで、通常のプリンタードライバーのインストールが完了する(S1002)。ここで、INFファイルの中に、アドバンスドUIアプリケーション311のCLSIDが記載されているかどうかを確認する(S1003)。CLSIDとはUUID(Universally Unique Identifier)の一種で、16バイトの数値で構成され、世界で一意な識別子である。CLSIDはアドバンスドUIアプリケーション311を識別するために、使用するアドバンスドUIアプリケーション311に割り当てられたCLSIDをセットアップファイルに記載しておく。図9ではAdvancedUICLSIDというキーが、アドバンスドUIアプリケーション311のCLSIDに該当する。アドバンスドUIアプリケーション311のCLSIDが存在すれば、オペレーティングシステム1053はINFファイルからCLSIDを取得する(S1004)。オペレーティングシステム1053は、アドバンスドUIアプリケーション311のCLSIDを、レジストリデータベース308にあるプリンター機種ごとのドライバ情報に、追加して記載しておく(S1005)。これで、プリンタードライバー1052のインストールが完了する。
【0018】
次にアドバンスドUIアプリケーション311のインストールを、図11のフローチャートと図15のフローチャートの一部を使用して説明する。アドバンスドUIアプリケーション311は、プリンタードライバー1052のインストールセットとは別に、インストーラーとアドバンスドUIアプリケーション311の構成ファイルからなるアドバンスドUIアプリケーションのインストールセットが存在する。ユーザーがインストーラーを実行すると、まずインストーラーはアドバンスドUIアプリケーション311と構成ファイルをユーザーに指定されたアプリケーションを格納するフォルダにコピーする(S1101)。次に、インストーラーは、引数として/RegSvrオプションをつけてアドバンスドUIアプリケーション311を起動する(S1102)。起動されたアドバンスドUIアプリケーション311は、/RegSvrオプションをつけて起動されているかどうかを判定する(S1501)。アドバンスドUIアプリケーション311は、/RegSvrオプションがついていれば、COM(Component Object Model)のアウトプロセスサーバーとして、レジストリデータベース308に情報を書き込む(S1502)。COMはMicrosoft社のソフトウェア同士の通信技術で、通信する各ソフトウェアコンポーネントは一意のCLSIDによって識別される。アウトプロセスサーバーとは、呼び出したプロセスと別のプロセスで動作するコンポーネントであり、アドバンスドUIアプリケーション311はアウトプロセスサーバーであることを明示する。レジストリデータベース308に書き込む情報としては、アプリケーション名を含んだフルパスと、アドバンスドUIアプリケーションのCLSID、そしてアウトプロセスサーバーであることを示す“LocalServer32”の文字列である。このCLSIDは図9のINFファイルで指定したCLSIDと同一のものでなければならない。これで、アドバンスドUIアプリケーション311のインストールが完了する。
【0019】
プリンタードライバー1052のインストールによって取得したCLSIDと、アドバンスドUIアプリケーション311のインストールによって記載されたCLSIDが同一であることから、オペレーティングシステム1053は両者を関連付けることができる。
次にアプリケーション1051から、プリンタードライバー1052のユーザーインターフェースを表示するフローを、図8のブロック構成図と、図12、図15のフローチャートで説明する。
オペレーティングシステム1053のモジュールであるプリントマネージャ306は、アプリケーション1051からプリンタードライバー1052のユーザーインターフェースを表示するAPIの呼び出しを受け取る(S1201)。そのとき、プリントマネージャ306は、アプリケーション1051から引数として印刷設定のDEVMODE構造体も受け取る。これは、受け取った印刷設定のDEVMODE構造体に従ってユーザーインターフェースを構築することで、現在の印刷設定をユーザーに見せることができるためである。また、プリントマネージャ306は、アプリケーション1051からどのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。これは、複数のプリンタードライバー1052がオペレーティングシステム1053にインストールされていたときに、どのプリンタードライバー1052を使用するのかを明確にするためである。プリントマネージャ306は、アプリケーション1051から受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、プリントマネージャ306は指定された機種情報に応じたドライバ情報を取得する(S1202)。プリントマネージャ306は取得したドライバ情報の中にアドバンスドUIアプリケーションのCLSIDがあるかどうかを判定する(S1203)。なければ、プリントマネージャ306は、プリンタードライバー1052のコンフィギュレーションモジュール304のユーザーインターフェースを開くために、CPSUI801を呼び出す(S1212)。CPSUI(Common Property Sheet User Interface)801は、プロパティシートのベースとなる土台を作成し、コンフィギュレーションモジュール304にユーザーインターフェースの作成を依頼する。コンフィギュレーションモジュール304は機種依存データファイル305を使用して、プリンターの機種に応じたユーザーインターフェースを表示する。すなわちアプリケーション1051と同一プロセスでユーザーインターフェースモジュールを起動する。アドバンスドUIアプリケーションのCLSIDが存在するときは、プリントマネージャ306はCLSIDとアウトプロセスサーバーで起動することを引数に指定してオペレーティングシステム1053のAPIを呼び出す(図16(1))。プリントマネージャ306はオペレーティングシステム1053のAPIの中で、指定されたCLSIDを検索キーにしてレジストリデータベース308を検索する。プリントマネージャ306はオペレーティングシステム1053のAPIの中で、アドバンスドUIアプリケーション311がすでにインストールされていれば、レジストリデータベース308からアドバンスドUIアプリケーション311のファイル名を含むフルパスを取得できる(S1204)。もし、存在しない場合はCLSIDが存在しなかったときと同じく、プリンタードライバーのユーザーインターフェースを表示する。これは、INFファイルにCLSIDが記載されているのに、アドバンスドUIアプリケーション311がインストールされていない環境で発生する。フルパスを取得したら、プリントマネージャ306はオペレーティングシステム1053のAPIの中から、アドバンスドUIアプリケーション311をアプリケーション1051と異なるプロセスで起動する(S1205)。起動されたアドバンスドUIアプリケーション311は、/RegSvrオプションがついていないので(S1501)、ウィンドウを作成する(S1503)。この時点で作成したウィンドウはまだ表示してはおらず、メッセージループでプリントマネージャ306からの応答を待つために作成しているだけである。アドバンスドUIアプリケーション311は、アドバンスドUIアプリケーション311のインターフェースオブジェクトを作成し、インターフェースオブジェクトを引数に指定してオペレーティングシステム1053のAPIを呼び出す(S1504と図16(2))。すると、プリントマネージャ306は、アドバンスドUIアプリケーション311のインターフェースを受け取ることができる(S1206)。インターフェースを受け取ったプリントマネージャ306は、DEVMODE構造体をプリントチケットに変換する(S1207)。プリントマネージャ306は、コンフィギュレーションモジュール304を呼び出すことで、プリントチケットへの変換を行う。DEVMODE構造体のようなバイナリデータのままでは、異なるプロセス間のデータを送受信するのに不都合なため、テキスト形式のマークアップ言語XMLのプリントチケットへ変換する。プリントマネージャ306は、プリンター機種、CLSIDを元に取得したドライバ情報、プリントチケット、イベント情報を、受け取ったインターフェースの引数として、インターフェースのメソッドを呼び出す(S1208)。イベント情報とは、アプリケーション1051がプリンタードライバー1052に対してどのようなユーザーインターフェースを表示するかの情報である。プリンタードライバーのユーザーインターフェースは1つではなく、印刷設定を行うユーザーインターフェース、デバイス設定を行うユーザーインターフェース、ジョブの印刷設定の確認を行うユーザーインターフェースが存在する。このうち、どのユーザーインターフェースを表示するのかをイベント情報として、アドバンスドUIアプリケーション311に通知する必要があるからである。アドバンスドUIアプリケーション311はインターフェースの呼び出しを受け取り、UIのイベントかどうかを判定する(S1505)。アドバンスドUIアプリケーション311は、UIのイベントであることが確認できたら、呼び出されたインターフェースから、プリンター機種、ドライバ情報、プリントチケットを取得する(S1506)。次にアドバンスドUIアプリケーション311は、UIイベントの種類を判定し、表示するユーザーインターフェースを決定する。アドバンスドUIアプリケーション311はアプリから印刷設定のユーザーインターフェースが呼び出されたときは(S1507)、印刷設定のユーザーインターフェースを表示する(S1508)。アドバンスドUIアプリケーション311はデバイス設定のユーザーインターフェースが呼び出されたときは(S1509)、デバイス設定のユーザーインターフェースを表示する(S1510)。アドバンスドUIアプリケーション311はジョブ設定のユーザーインターフェースが呼び出されたときは(S1511)、ジョブ設定のユーザーインターフェースを表示する(S1512)。アドバンスドUIアプリケーション311は取得したプリンター機種とドライバ情報、プリントチケットに基づいてユーザーインターフェースを表示する。表示に使用する印刷設定の項目や、設定項目同士の禁則などのロジックについては、アドバンスドUIアプリケーション311はプリンタードライバー1052を呼び出してデータの取得や制御を行う。アドバンスドUIアプリケーション311は、プリンタードライバー1052のコンフィギュレーションモジュール304のユーザーインターフェースを表示することもできる。しかしながら、自分でユーザーインターフェースを表示することによって、コンフィギュレーションモジュール304からユーザーインターフェースをなくすことができる。このようにすることで、プリンタードライバー1052のコンフィギュレーションモジュール304は印刷設定のみにすることができ、プリンタードライバー1052を更新することなく、ユーザーインターフェースを自由に組み替えることができるようになる。もちろん、アドバンスドUIアプリケーション311が直接プリンタードライバーを呼び出すのではなく、インターフェースを通じてプリンタードライバーを呼び出すためのドライバーインターフェースを渡してもらうことも可能である。このドライバーインターフェースを通じて、アドバンスドUIアプリケーション311は、印刷設定の項目や、設定項目同士の禁則をすることもできる。ユーザーがユーザーインターフェースで印刷設定を終えたら、アドバンスドUIアプリケーション311は、ユーザーインターフェースを閉じてウィンドウを破棄する(S1513)。アドバンスドUIアプリケーション311は、ユーザーインターフェースの設定を、インターフェースで渡されたプリントチケットに反映する(S1514)。アドバンスドUIアプリケーション311は、プリントチケットに反映できないデータについては、レジストリデータベース308に保存する(S1515)。プリントチケットに反映できないデータは、プリンターのフィニッシャーなどのオプション機器構成や、ユーザー名やパスワードなどの個人情報、お気に入りやスタンプといったユーザーが作成する機能などが存在する。すべての保存が終了したら、アドバンスドUIアプリケーション311は終了して、呼び出し元であるプリントマネージャ306に制御を返す。プリントマネージャ306は、アドバンスドUIアプリケーション311がユーザーインターフェースを表示している間、終了するのを待っている(S1209)。アドバンスドUIアプリケーション311が終了するのが確認できたら、プリントマネージャ306は、アドバンスドUIアプリケーション311によって変更されたプリントチケットを受け取る。そして、DEVMODE構造体に変換するためにプリンタードライバー1052のコンフィギュレーションモジュール304を呼び出す(S1210)。プリントマネージャ306は、アプリケーションに対して変換したDEVMODE構造体を返し、APIを終了する(S1211)。このようにして、アプリケーションとは別のプロセスで、印刷設定に関連するユーザーインターフェースを実行する。
【0020】
アプリケーションのプロセスと、アドバンスドUIアプリケーションのプロセスの間は、インターフェースのメソッドの呼び出しとなっているが、図8のブロック構成図と図13、図14のフローチャートを使用してその中身を説明する。インターフェースが呼び出されると、オペレーティングシステム1053はCOMプロキシ802を呼び出す。COMプロキシ802は、インターフェースのメソッドに入力された引数データをマーシャリングする(S1301)。マーシャリングとは異なる2つのシステムでデータを送受信できるように、オブジェクトデータをストリームに格納することである。COMプロキシ802はRPC(Remote Procedure Call)を使って、アドバンスドUIアプリケーション311のプロセスにあるCOMスタブ803を呼び出す(S1302)。RPCは、離れたシステム同士で手続きを呼び出すことができる機能である。COMプロキシ802は呼び出したCOMスタブ803に、マーシャリングしたストリームデータを送信する。COMスタブ803は、COMプロキシ802から受け取ったストリームをアンマーシャリングし、元のオブジェクトデータであるメソッドの引数に戻す(S1401)。アンマーシャリングとは、ストリームを元のオブジェクトデータに戻すことである。そして、プロセスのメインスレッドであるアドバンスドUIアプリケーション311に対して、メソッドの引数データを引き渡す(S1402)。このようにしてプリントマネージャ306は、別のプロセスであるアドバンスドUIアプリケーション311を起動し、データを送信している。逆にアドバンスドUIアプリケーション311から、プリントマネージャ306に送信するときは、COMプロキシ802がCOMスタブに、COMスタブ803がCOMプロキシになる。したがって、COMプロキシとCOMスタブは同一の機能を持った同じモジュールである。
【0021】
アドバンスドUIアプリケーション311はアプリケーション1051が動作するプロセスと異なるプロセスで動作するので、インターフェースを通じて印刷設定であるプリントチケットでしか情報を伝達することができない。プリントチケットに含まれないレジストリデータベース308に保存されたデータは、印刷時に参照することができなくなるので、プリンター1042にすべてのデータを送信することができなくなってしまう。そこで、XPS印刷システムのプロパティバッグ414を使用することで、レジストリデータベース308に保存されたデータも参照できるようにする。図17のブロック構成図と、図18のフローチャートで伝達方法を説明する。
【0022】
フィルタパイプラインマネージャ409はアプリケーション1051から印刷が開始されると、印刷ジョブであるXPSスプールファイル407を渡される(S1801)。また、フィルタパイプラインマネージャ409は、アプリケーション1051からどのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。フィルタパイプラインマネージャ409は、アプリケーション1051から受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、フィルタパイプラインマネージャ409は指定された機種情報に応じたドライバ情報を取得する。フィルタパイプラインマネージャ409は取得したドライバ情報の中にアドバンスドUIアプリケーション311のCLSIDがあるかどうかを判定する(S1802)。CLSIDがなければ、フィルタを呼び出して印刷処理を行う。アドバンスドUIアプリケーション311のCLSIDが存在するときは、フィルタパイプラインマネージャ409はCLSIDとアウトプロセスサーバーで起動することを引数に指定してオペレーティングシステム1053のAPIを呼び出す(図16(1))。フィルタパイプラインマネージャ409はオペレーティングシステム1053のAPIの中で、指定されたCLSIDを検索キーにしてレジストリデータベース308を検索する。フィルタパイプラインマネージャ409はオペレーティングシステム1053のAPIの中で、アドバンスドUIアプリケーション311がインストールされていれば、レジストリデータベース308からアドバンスドUIアプリケーション311のファイル名を含むフルパスを取得できる(S1803)。もし、存在しない場合はCLSIDが存在しなかったときと同じく、フィルタを呼び出して印刷処理を行う。フルパスを取得したら、フィルタパイプラインマネージャ409はオペレーティングシステム1053のAPIの中から、アドバンスドUIアプリケーション311を起動する(S1804)。起動されたアドバンスドUIアプリケーション311は、/RegSvrオプションがついていないので(S1501)、ウィンドウを作成する(S1503)。この時点で作成するウィンドウは表示のために作成するのではなく、メッセージループでフィルタパイプラインマネージャ409からの応答を待つために作成しているだけである。アドバンスドUIアプリケーション311は、アドバンスドUIアプリケーション311のインターフェースオブジェクトを作成し、インターフェースを指定してオペレーティングシステム1053のAPIを呼び出す(S1504と図16(2))。すると、フィルタパイプラインマネージャ409は、アドバンスドUIアプリケーション311のインターフェースを受け取ることができる(S1805)。インターフェースを受け取ったフィルタパイプラインマネージャ409は、プロパティバッグ414のオブジェクトを作成する。フィルタパイプラインマネージャ409は、作成したプロパティバッグ414をインターフェースの引数として、インターフェースのメソッドを呼び出す(S1806)。アドバンスドUIアプリケーション311はインターフェースの呼び出しを受け取り、UIのイベントかどうかを判定する(S1505)。今回はプロパティバッグ414を引数としてメソッドを呼び出しているのでUIのイベントではないため、アドバンスドUIアプリケーション311は、レジストリから以前に保存した情報を取得する(S1516)。アドバンスドUIアプリケーション311は、インターフェースから引数のプロパティバッグ414を取得し(S1517)、プロパティバッグに値を追加する(S1518)。プロパティバッグ414は名前と値の組み合わせで、自由にデータを追加・削除・参照できる仕組みである。アドバンスドUIアプリケーション311は、プリンターのフィニッシャーなどのオプション機器構成や、ユーザー名やパスワードなどの個人情報、お気に入りやスタンプといったユーザーが作成する機能などをプロパティバッグ414に追加しておく。アドバンスドUIアプリケーション311は、プロパティバッグ414へ値の追加が終了すると、自身も終了する。フィルタパイプラインマネージャ409は、アドバンスドUIアプリケーション311がユーザーインターフェースを表示している間、終了するのを待っている(S1807)。アドバンスドUIアプリケーション311が終了するのが確認できたら、フィルタパイプラインマネージャ409は、アドバンスドUIアプリケーション311によって変更されたプロパティバッグ414を受け取る。そして、従来どおりフィルタを呼び出して印刷処理を行う(S1808)。各フィルタは、必要に応じて、プロパティバッグ414から情報を取得する。フィルタパイプラインマネージャ409は、プロパティバッグ414のオブジェクトは最後のフィルタがPDLを出力し終わったら破棄するので、1回の印刷の間のみ有効である。このようにして、アドバンスドUIアプリケーション311の情報を、フィルタに伝達する。
【0023】
アドバンスドUIアプリケーション311を使用した場合、サーバー203からクライアント201や202にプリンタードライバーをダウンロードして動作するポイントアンドプリント、いわゆる共有プリンターで動作できない。図2のようなネットワーク環境において、共有プリンターではクライアントがプリンタードライバーをサーバー203からダウンロードすることができる。したがって、コンフィギュレーションモジュール304にユーザーインターフェースが入っていれば、クライアント201や202でもユーザーインターフェースを表示できる。しかし、アドバンスドUIアプリケーション311は、プリンタードライバーとは別のものになるので、クライアント201や202にダウンロードできない。また、RPCはサーバー203とクライアント201や202の間を通信することも可能だが、そのままではアドバンスドUIアプリケーション311はサーバー203で起動してしまい、ユーザーがクライアント上でユーザーインターフェースを操作できない。そこで、アドバンスドUIアプリケーション311がインストールされている環境では、共有プリンターが利用できないようにする。以下、図19、図20と図21のフローチャートを使用して、共有プリンターを禁止する仕組みを説明する。
【0024】
オペレーティングシステム1053は、ユーザーからプリンタードライバー1052の共有タブを表示するように呼び出されると(S2101)、どのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。オペレーティングシステム1053は
受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、オペレーティングシステム1053は指定された機種情報に応じたドライバ情報を取得する。オペレーティングシステム1053は取得したドライバ情報の中にアドバンスドUIアプリケーション311のCLSIDがあるかどうかを判定する(S2102)。CLSIDが存在すれば、アドバンスドUIアプリケーション311を使用してユーザーインターフェースを表示することになるので、オペレーティングシステム1053は「共有はサポートされない」メッセージを配置した共有設定が指定できない共有タブを表示する(図20)。なお、図19の画面の共有のためのチェックボックスをグレーアウトさせて表示してもよい。CLSIDが存在しないときは、オペレーティングシステム1053は共有のためのチェックボックスを配置した共有タブを表示する(図19)。
【0025】
アドバンスドUIアプリケーション311を使用するとき、CPSUI801によってプロパティシートの土台を作成しているわけではないので、自由にユーザーインターフェースを作ることができる。しかし、プロパティシートの土台といくつかのタブをオペレーティングシステム1053が追加した後、プリンタードライバー1052のコンフィギュレーションモジュール304がタブをさらに追加するユーザーインターフェースは作成できなくなる。たとえば、デバイス設定のユーザーインターフェースや、ジョブの設定を確認するユーザーインターフェースである。このようなユーザーインターフェースでは、アドバンスドUIアプリケーション311がユーザーインターフェースを生成できない。そこで、図22、図23と図24のフローチャートを使用して、ユーザーインターフェースにボタンを表示する方法を説明する。
【0026】
オペレーティングシステム1053は、ユーザーからデバイス設定やジョブの設定を確認するユーザーインターフェースを表示するように呼び出されると(S2401)、どのプリンタードライバー1052を使用するのかを指定する機種情報も受け取る。オペレーティングシステム1053は受け取った機種情報を元に、レジストリデータベース308を検索する。レジストリデータベース308にはプリンタードライバー1052のインストール時に記載されたドライバ情報が書き込まれており、オペレーティングシステム1053は指定された機種情報に応じたドライバ情報を取得する。オペレーティングシステム1053は取得したドライバ情報の中にアドバンスドUIアプリケーション311のCLSIDがあるかどうかを判定する(S2402)。CLSIDが存在すれば、アドバンスドUIアプリケーション311のユーザーインターフェースを開くためのボタンを配置して、タブを表示する(S2403)。CLSIDが存在しなければ、プリンタードライバー1052のコンフィギュレーションモジュール304を呼び出して、タブを追加してもらうようにする(S2404)。図22はジョブの設定を確認するユーザーインターフェースに、基本設定のボタンを表示して、アドバンスドUIアプリケーション311のジョブ設定のユーザーインターフェースが呼び出せるようにしている。図23はデバイス設定のユーザーインターフェースに、デバイス設定のボタンを表示して、アドバンスドUIアプリケーション311のデバイス設定のユーザーインターフェースを呼び出せるようにしている。
【0027】
以上のようにすることで、プリンタードライバー1052からアドバンスドUIアプリケーション311という形でユーザーインターフェースを切り離すことで、ユーザーインターフェースがクラッシュしても、アプリケーションを巻き込まないようにできる。また、CPSUI801に依存しないシステムになることで、プロパティシートではない自由にユーザーインターフェースを作成することができる。また、名前付きパイプや共有メモリを使用せずにCOMで異なるプロセス間の通信を行うことで、アドバンスドUIアプリケーション311にオペレーティングシステム1053に依存するコードを少なくすることができる。
【0028】
[実施例2]
実施例1では、アドバンスドUIアプリケーション311はプリンタードライバー1052のインストールセットと別にインストールを行ったが、プリンタードライバー1052のインストールセットに含むこともできる。以下、アドバンスドUIアプリケーション311をプリンタードライバー1052のインストールセットに含んだときのプリンタードライバー1052のインストールを、図25のフローと図26を使用して説明する。
プリンタードライバー1052は図26のセットアップインフォメーションファイル(以下、INFファイル)に従ってオペレーティングシステム1053へインストールされる。INFファイルには、実施例1で記載されていたアドバンスドUIアプリケーション311のCLSIDに加えて、アドバンスドUIアプリケーション311のアプリケーションファイル名が記載されている。オペレーティングシステム1053は、プリンタードライバー1052のインストールが開始されると(S2501)、指定された機種のプリンタードライバー1052のインストールセットを探す。インストールセットはオペレーティングシステム1053に組み込まれているものを使用するが、ユーザーによって指定されるか、あらかじめ特定された配信サーバーなどから提供されることもある。オペレーティングシステム1053は、インストールセットに含まれるINFファイルを元にファイルをコピーし、レジストリデータベース308に必要なドライバ情報を書き込むことで、通常のプリンタードライバーのインストールが完了する(S2502)。次に、オペレーティングシステム1053は、プリンタードライバー1052のINFファイルの中にアドバンスドUIアプリケーション311のファイル名があるかどうかを判定する(S2503)。図26ではAdvancedUIというキーが、アドバンスドUIアプリケーション311のファイル名に該当する。ファイル名が存在する場合は、オペレーティングシステム1053が引数として/RegSvrオプションをつけてアドバンスドUIアプリケーション311を起動する(S2504)。オペレーティングシステム1053は、INFファイルの中に、アドバンスドUIアプリケーション311のCLSIDが記載されているかどうかを確認する(S2505)。アドバンスドUIアプリケーション311のCLSIDが存在すれば、オペレーティングシステム1053はINFファイルからCLSIDを取得する(S2506)。オペレーティングシステム1053は、アドバンスドUIアプリケーション311のCLSIDを、レジストリデータベース308にあるドライバ情報に、追加して記載しておく(S2507)。これで、プリンタードライバー1052のインストールとともに、アドバンスドUIアプリケーション311のインストールが完了する。
【0029】
以上のように、プリンタードライバー1052のインストールセットにアドバンスドUIアプリケーション311を追加しておくと、ユーザーが後から別途追加することなく、プリンタードライバー1052をインストールするだけで、別プロセスで起動するユーザーインターフェースを使用することができる。
【0030】
以上説明したように、本発明の実施の形態により,アプリケーションと別のプロセスでプリンタードライバーのユーザーインターフェースが起動するので、アプリケーションまで巻き込んでクラッシュすることがなくなる。また、オペレーティングシステムがベースを用意する必要がなくなるので、プリンタードライバーのユーザーインターフェースは自由にデザインやコントロールを配置することができる。また、UIアプリケーションはプリンタードライバーと別にインストールすることができるので、プリンタードライバーを更新することなくユーザーインターフェースだけを変えることが可能である。また、プロセスごとにメモリ領域が別になるので、より多くのメモリ領域を使用することができ、動画や3Dを使用したリッチなユーザーインターフェースを作成することもできるようになる。
【符号の説明】
【0031】
1042 プリンター
1051 アプリケーション
1052 プリンタードライバー
1053 オペレーティングシステム
201 クライアント
202 クライアント
203 サーバー
304 コンフィギュレーションモジュール
305 機種依存データファイル
306 プリントマネージャ(スプーラ)
308 レジストリデータベース
311 アドバンスドUIアプリケーション
403 DEVMODE構造体
404 プリントチケット
406 DEVMODE−プリントチケット変換モジュール
407 XPSスプールファイル
409 フィルタパイプラインマネージャ
414 プロパティバッグ
801 CPSUI
802 COMプロキシ
803 COMスタブ
【特許請求の範囲】
【請求項1】
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得手段と、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得手段により取得された識別子を追加する追加手段と、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込み手段と、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定手段と、
前記判定手段によりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動手段とを備えることを特徴とする情報処理装置。
【請求項2】
前記起動手段は、前記判定手段によりデータベースに識別子が登録されていないと判定された場合、アプリケーションと同一プロセスでユーザーインターフェースモジュールを起動することを特徴とする請求項1記載の情報処理装置。
【請求項3】
プリンタードライバーの共有タブを表示するよう呼び出された際に、プリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定し、プリンターの共有が設定できない画面を表示する表示手段を有することを特徴とする請求項1記載の情報処理装置。
【請求項4】
アプリケーションプロセスと別プロセスでユーザーインターフェースアプリケーションが起動される情報処理装置であって、
ユーザーインターフェースの設定をプリントチケットに反映する反映手段と、
プリントチケットに含められない設定をレジストリに保存する保存手段と、
フィルタパイプラインプロセスから起動された際、レジストリから設定を読み込み、読み込まれた設定をプロパティバッグに追加する追加手段とを有し、
前記フィルタはプロパティバッグに追加された設定を受け取り、印刷処理を行うことを特徴とする情報処理装置。
【請求項5】
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得ステップと、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得ステップにより取得された識別子を追加する追加ステップと、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込みステップと、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定ステップと、
前記判定ステップによりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動ステップとを備えることを特徴とする情報処理方法。
【請求項6】
前記起動ステップは、前記判定ステップによりデータベースに識別子が登録されていないと判定された場合、アプリケーションと同一プロセスでユーザーインターフェースモジュールを起動することを特徴とする請求項5記載の情報処理方法。
【請求項7】
プリンタードライバーの共有タブを表示するよう呼び出された際に、プリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定し、プリンターの共有が設定できない画面を表示する表示ステップを有することを特徴とする請求項6記載の情報処理方法。
【請求項8】
アプリケーションプロセスと別プロセスでユーザーインターフェースアプリケーションが起動される情報処理装置であって、
ユーザーインターフェースの設定をプリントチケットに反映する反映ステップと、
プリントチケットに含められない設定をレジストリに保存する保存ステップと、
フィルタパイプラインプロセスから起動された際、レジストリから設定を読み込み、読み込まれた設定をプロパティバッグに追加する追加ステップとを有し、
前記フィルタはプロパティバッグに追加された設定を受け取り、印刷処理を行うことを特徴とする情報処理方法。
【請求項9】
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得ステップと、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得ステップにより取得された識別子を追加する追加ステップと、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込みステップと、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定ステップと、
前記判定ステップによりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動ステップとをコンピューターに実行させるためのプログラム。
【請求項10】
前記起動ステップは、前記判定ステップによりデータベースに識別子が登録されていないと判定された場合、アプリケーションと同一プロセスでユーザーインターフェースモジュールを起動することを特徴とする請求項9記載の情報処理方法。
【請求項11】
プリンタードライバーの共有タブを表示するよう呼び出された際に、プリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定し、プリンターの共有が設定できない画面を表示する表示ステップをコンピューターに実行させることを特徴とする請求項10記載の情報処理方法。
【請求項12】
アプリケーションプロセスと別プロセスでユーザーインターフェースアプリケーションが起動されるコンピューターで実行されるプログラムであって、
ユーザーインターフェースの設定をプリントチケットに反映する反映ステップと、
プリントチケットに含められない設定をレジストリに保存する保存ステップと、
フィルタパイプラインプロセスから起動された際、レジストリから設定を読み込み、読み込まれた設定をプロパティバッグに追加する追加ステップとをコンピューターに実行させ、
前記フィルタはプロパティバッグに追加された設定を受け取り、印刷処理を行うことを特徴とするプログラム。
【請求項1】
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得手段と、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得手段により取得された識別子を追加する追加手段と、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込み手段と、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定手段と、
前記判定手段によりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動手段とを備えることを特徴とする情報処理装置。
【請求項2】
前記起動手段は、前記判定手段によりデータベースに識別子が登録されていないと判定された場合、アプリケーションと同一プロセスでユーザーインターフェースモジュールを起動することを特徴とする請求項1記載の情報処理装置。
【請求項3】
プリンタードライバーの共有タブを表示するよう呼び出された際に、プリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定し、プリンターの共有が設定できない画面を表示する表示手段を有することを特徴とする請求項1記載の情報処理装置。
【請求項4】
アプリケーションプロセスと別プロセスでユーザーインターフェースアプリケーションが起動される情報処理装置であって、
ユーザーインターフェースの設定をプリントチケットに反映する反映手段と、
プリントチケットに含められない設定をレジストリに保存する保存手段と、
フィルタパイプラインプロセスから起動された際、レジストリから設定を読み込み、読み込まれた設定をプロパティバッグに追加する追加手段とを有し、
前記フィルタはプロパティバッグに追加された設定を受け取り、印刷処理を行うことを特徴とする情報処理装置。
【請求項5】
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得ステップと、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得ステップにより取得された識別子を追加する追加ステップと、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込みステップと、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定ステップと、
前記判定ステップによりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動ステップとを備えることを特徴とする情報処理方法。
【請求項6】
前記起動ステップは、前記判定ステップによりデータベースに識別子が登録されていないと判定された場合、アプリケーションと同一プロセスでユーザーインターフェースモジュールを起動することを特徴とする請求項5記載の情報処理方法。
【請求項7】
プリンタードライバーの共有タブを表示するよう呼び出された際に、プリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定し、プリンターの共有が設定できない画面を表示する表示ステップを有することを特徴とする請求項6記載の情報処理方法。
【請求項8】
アプリケーションプロセスと別プロセスでユーザーインターフェースアプリケーションが起動される情報処理装置であって、
ユーザーインターフェースの設定をプリントチケットに反映する反映ステップと、
プリントチケットに含められない設定をレジストリに保存する保存ステップと、
フィルタパイプラインプロセスから起動された際、レジストリから設定を読み込み、読み込まれた設定をプロパティバッグに追加する追加ステップとを有し、
前記フィルタはプロパティバッグに追加された設定を受け取り、印刷処理を行うことを特徴とする情報処理方法。
【請求項9】
プリンタードライバーをインストールする際に、プリンタードライバーのセットアップファイルから識別子を取得する取得ステップと、
データベースにあるインストールされるプリンタードライバーの機種に関連付けられたドライバ情報に前記取得ステップにより取得された識別子を追加する追加ステップと、
ユーザーインターフェースアプリケーションをインストールする際に、データベースにユーザーインターフェースアプリケーションのパスと識別子を書き込む書き込みステップと、
アプリケーションからプリンタードライバーのユーザーインターフェースを表示するように呼び出された際、データベースにある呼び出されたプリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定する判定ステップと、
前記判定ステップによりデータベースに識別子が登録されていると判定された場合、識別子を使用してユーザーインターフェースアプリケーションのパスを取得し、アプリケーションプロセスと別のプロセスでユーザーインターフェースアプリケーションを起動する起動ステップとをコンピューターに実行させるためのプログラム。
【請求項10】
前記起動ステップは、前記判定ステップによりデータベースに識別子が登録されていないと判定された場合、アプリケーションと同一プロセスでユーザーインターフェースモジュールを起動することを特徴とする請求項9記載の情報処理方法。
【請求項11】
プリンタードライバーの共有タブを表示するよう呼び出された際に、プリンタードライバーの機種に関連付けられたドライバ情報に識別子が登録されているかどうかを判定し、プリンターの共有が設定できない画面を表示する表示ステップをコンピューターに実行させることを特徴とする請求項10記載の情報処理方法。
【請求項12】
アプリケーションプロセスと別プロセスでユーザーインターフェースアプリケーションが起動されるコンピューターで実行されるプログラムであって、
ユーザーインターフェースの設定をプリントチケットに反映する反映ステップと、
プリントチケットに含められない設定をレジストリに保存する保存ステップと、
フィルタパイプラインプロセスから起動された際、レジストリから設定を読み込み、読み込まれた設定をプロパティバッグに追加する追加ステップとをコンピューターに実行させ、
前記フィルタはプロパティバッグに追加された設定を受け取り、印刷処理を行うことを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【公開番号】特開2012−234399(P2012−234399A)
【公開日】平成24年11月29日(2012.11.29)
【国際特許分類】
【出願番号】特願2011−103005(P2011−103005)
【出願日】平成23年5月2日(2011.5.2)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成24年11月29日(2012.11.29)
【国際特許分類】
【出願日】平成23年5月2日(2011.5.2)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]