(57)【特許請求の範囲】
【請求項１】
通信可能に接続する外部機器を制御するコア手段と、
実現させる機能ごとに異なるプラグインを複数有するプラグイン部と、を備え、
前記コア手段は、前記外部機器を制御する際に、前記外部機器に所定の機能を実現させるプラグインを呼び出す呼出手段を備え、
前記呼出手段は、複数の前記プラグインを順番に呼び出す場合、呼び出し済みのプラグインに基づいて次のプラグインを呼び出すか否かを判定し、
前記プラグインは、前記呼出手段により特定のタイミングで呼び出された場合、前記コア手段による前記外部機器の制御にかかる処理に前記所定の機能にかかる処理を割り込ませること、
を特徴とする情報処理装置。
【請求項２】
前記プラグインは、前記外部機器が出力する画像を生成する機能、前記外部機器の設定にかかる操作入力をユーザから受け付ける機能、入力された設定を保存する機能の中の少なくとも一つの機能を有すること、
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記呼出手段は、複数の前記プラグインへ問い合わせを行い、前記所定の機能を実現するプラグインを特定し、当該プラグインを呼び出すこと、
を特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
複数の前記プラグインそれぞれが実現する機能にかかるプラグイン情報を記憶するプラグイン情報記憶手段を更に備え、
前記呼出手段は、前記プラグイン情報をもとに、前記所定の機能を実現するプラグインを呼び出すこと、
を特徴とする請求項１又は２に記載の情報処理装置。
【請求項５】
前記呼出手段は、呼び出し済みのプラグインがキャンセルされたか否かに基づいて次のプラグインを呼び出すか否かを判定すること、
を特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
複数の前記プラグインそれぞれの優先度を定義した優先度情報を記憶する優先度情報記憶手段を更に備え、
前記呼出手段は、更に、前記優先度情報に基づいて次のプラグインを呼び出すか否かを判定すること、
を特徴とする請求項５に記載の情報処理装置。
【請求項７】
複数の前記プラグインは、前記コア手段による前記外部機器の制御にかかる処理に、呼び出し済みのプラグインによる設定を反映して前記所定の機能にかかる処理を割り込ませること、
を特徴とする請求項１〜６のいずれか１つに記載の情報処理装置。
【請求項８】
複数の前記プラグインそれぞれに、呼び出し済みのプラグインによる設定を反映するかしないかを定義した設定反映情報を記憶する設定反映情報記憶手段を更に備え、
複数の前記プラグインは、前記設定反映情報を参照し、自身のプラグインに反映するが定義されている場合、前記コア手段による前記外部機器の制御にかかる処理に、呼び出し済みのプラグインによる設定を反映して前記所定の機能にかかる処理を割り込ませ、自身のプラグインに反映しないが定義されている場合、前記コア手段による前記外部機器の制御にかかる処理に、呼び出し済みのプラグインによる設定を反映せずに前記所定の機能にかかる処理を割り込ませること、
を特徴とする請求項７に記載の情報処理装置。 
【請求項９】
通信可能に接続する外部機器を制御するコア手段と、
実現させる機能ごとに異なるプラグインを複数有するプラグイン部としてコンピュータを機能させ、
前記コア手段は、前記外部機器を制御する際に、前記外部機器に所定の機能を実現させるプラグインを呼び出す呼出手段を含み、
前記呼出手段は、複数の前記プラグインを順番に呼び出す場合、呼び出し済みのプラグインに基づいて次のプラグインを呼び出すか否かを判定し、
前記プラグインは、前記呼出手段により特定のタイミングで呼び出された場合、前記コア手段による前記外部機器の制御にかかる処理に前記所定の機能にかかる処理を割り込ませること、
を特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
従来、複合機等のプリンタにＰＣ（Personal  Computer）等の情報処理装置を接続し、情報処理装置からの制御の下でプリンタでの印刷を行うシステムが知られている。この情報処理装置は、プリンタドライバ等のプログラムを実行することで、プリンタの制御を行っている。このプリンタドライバは、コア部分とプラグイン部分とに分けられたプラグイン機構を有しており、プラグインを追加・削除することで、インストール後に機能の追加・削除が可能となっている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ところで、プリンタドライバは、印刷シーケンスにおいて、印刷の処理の開始、文書印刷の開始・終了、ページ印刷の開始・終了などの所定のタイミングで処理をフックする機能を有している。例えば、米国マイクロソフト社が開発したＯＳ(Operating  System)であるＷｉｎｄｏｗｓ(登録商標）では、「DocumentEvent」と呼ばれる機能として提供されている。しかしながら、従来のプリンタドライバでは、所定のタイミングで処理をフックする「DocumentEvent」にかかる処理はコア部分でのみ行われている。したがって、「DocumentEvent」にかかる処理に変更・差異がある場合は、プラグイン部分だけでなくコア部分の再開発も必要であり、開発負担が大きかった。
【０００４】
本発明は、上記に鑑みてなされたものであって、開発コストの抑止を可能とする情報処理装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上述した課題を解決し、目的を達成するために、本発明の情報処理装置は、通信可能に接続する外部機器を制御するコア手段と、実現させる機能ごとに異なるプラグインを複数有するプラグイン部と、を備え、前記コア手段は、前記外部機器を制御する際に、前記外部機器に所定の機能を実現させるプラグインを呼び出す呼出手段を備え、前記呼出手段は、複数の前記プラグインを順番に呼び出す場合、呼び出し済みのプラグインに基づいて次のプラグインを呼び出すか否かを判定し、前記プラグインは、前記呼出手段により特定のタイミングで呼び出された場合、前記コア手段による前記外部機器の制御にかかる処理に前記所定の機能にかかる処理を割り込ませること、を特徴とする。
【０００６】
また、本発明のプログラムは、通信可能に接続する外部機器を制御するコア手段と、実現させる機能ごとに異なるプラグインを複数有するプラグイン部としてコンピュータを機能させ、前記コア手段は、前記外部機器を制御する際に、前記外部機器に所定の機能を実現させるプラグインを呼び出す呼出手段を含み、前記呼出手段は、複数の前記プラグインを順番に呼び出す場合、呼び出し済みのプラグインに基づいて次のプラグインを呼び出すか否かを判定し、前記プラグインは、前記呼出手段により特定のタイミングで呼び出された場合、前記コア手段による前記外部機器の制御にかかる処理に前記所定の機能にかかる処理を割り込ませること、を特徴とする。
【発明の効果】
【０００７】
本発明によれば、開発コストの抑止を可能とする、という効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１実施形態のプリンタシステムの全体構成を示すブロック図である。
【図２】図２は、第１実施形態のＰＣの機能的構成を模式的に示すブロック図である。
【図３】図３は、第１実施形態のコアドライバとプラグインとの関係を例示するブロック図である。
【図４】図４は、第１実施形態のプリンタドライバの具体的な構成の一例を示すブロック図である。
【図５】図５は、第１実施形態のプリンタドライバによる動作の一例を示すシーケンス図である。
【図６】図６は、第１実施形態のプリンタドライバの具体的な構成の一例を示すブロック図である。
【図７】図７は、第１実施形態のプリンタドライバによる動作の一例を示すシーケンス図である。
【図８】図８は、第２実施形態のＰＣの機能的構成を模式的に示すブロック図である。
【図９】図９は、第２実施形態の優先度ファイルの一例を示す図である。
【図１０】図１０は、第２実施形態のプリンタドライバによる動作の一例を示すフローチャートである。
【図１１】図１１は、呼び出し済みのプラグインの設定を次のプラグインに反映する例の説明図である。
【図１２】図１２は、呼び出し済みのプラグインの設定を次のプラグインに反映する例の説明図である。
【図１３】図１３は、呼び出し済みのプラグインの設定を次のプラグインに反映する例の説明図である。
【図１４】図１４は、第３実施形態のＰＣの機能的構成を模式的に示すブロック図である。
【図１５】図１５は、第３実施形態の設定ファイルの一例を示す図である。
【図１６】図１６は、第４実施形態のＰＣの機能的構成を模式的に示すブロック図である。
【図１７】図１７は、第４実施形態のプリンタドライバによる動作の一例を示すフローチャートである。
【図１８】図１８は、第５実施形態のＰＣの機能的構成を模式的に示すブロック図である。
【図１９】図１９は、第５実施形態のプリンタドライバによる動作の一例を示すフローチャートである。
【図２０】図２０は、ＰＣのハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、この発明にかかる情報処理装置及びプログラムの一実施形態を詳細に説明する。以下の説明では、情報処理装置にＰＣ（Personal  Computer）を適用し、外部機器にプリンタを適用したプリンタシステムを例示する。
【００１０】
（第１実施形態）
図１は、一実施形態にかかるプリンタシステムの全体構成を示すブロック図である。図１に示すように、プリンタシステムでは、情報処理装置としてのＰＣ１００と、外部機器としてのプリンタ１５０とがネットワーク１６０を介して接続されているものとする。プリンタシステムでは、プリンタ１５０はＰＣ１００の制御の下で動作し、例えばＰＣ１００からの印刷要求に応じてプリンタ１５０が印刷処理を行う。なお、本実施形態では外部機器としてプリンタ１５０を例示するが、外部機器の種別はスキャナなどであってもよく、特に限定しない。
【００１１】
図２は、ＰＣ１００の機能的構成を模式的に示すブロック図である。図２に示すように、ＰＣ１００は、処理部１０１と、記憶部１０２と、通信部１０３とを備えている。具体的には、ＰＣ１００は、キーボードやマウスなどの入力装置やディスプレイなどの表示装置等を備える通常のコンピュータを利用したハードウェア構成を有する（図２０参照）。処理部１０１は、ＣＰＵ（Central  Processing  Unit）と、ＲＯＭ（Read  Only  Memory）及びメインメモリとなるＲＡＭ（Random  Access  Memory）を有するメモリ群と、を含んで構成されている。ＰＣ１００の起動・実行時には、ＲＯＭ及び記憶部１０２からアプリケーション１０４、ＯＳ１０５、及び各種ドライバ（図２においては、プリンタドライバ１０６のみ記載）のプログラムが、メインメモリ上にロードされて展開され、これらがＣＰＵにより実行される。
【００１２】
記憶部１０２は、例えば、ＨＤＤ（Hard  Disk  Drive）などであり、様々な情報を記憶する記憶手段である。記憶部１０２に記憶される情報には、プリンタドライバ１０６のコア部１１１の他、プラグイン部１３０の各プラグイン（図２では、プラグイン１３１〜１３３を例示）が有する所定の機能を実現するための処理に関する情報（処理に用いる設定値や、設定値を変更するための表示情報など、処理に必要なあらゆる情報）を定義した設定情報がある。この設定情報の例としては、機能情報１０２ａ、レイアウト情報１０２ｂ、及びプラグイン情報１０２ｃなどが挙げられる。なお、プラグイン情報１０２ｃは、設定情報に含まなくてもよい。
【００１３】
機能情報１０２ａは、例えば各設定値の設定可能な範囲や、各設定間の禁則など、プリンタドライバ１０６の機能にかかる情報が記述されている。レイアウト情報１０２ｂは、各設定の表示方法や表示位置等が記述されている。具体的には、レイアウト情報１０２ｂには、設定画面に表示されるＧＵＩ（Graphical  User  Interface）コンポーネントのレイアウトが記述されている。プラグイン情報１０２ｃは、各プラグインの名称、各プラグインが提供する機能を示す情報、プラグイン内部の構成情報、プラグイン内で参照する情報など、プラグイン部１３０の各プラグインにかかる情報が記載されている。プラグイン情報１０２ｃには、例えば、「両面印刷プラグイン」、「ユーザＩＤプラグイン」などの名称と、「両面への印刷」、「ユーザＩＤの設定」等の機能を示すコードとが記載されている。
【００１４】
通信部１０３は、図１に示したネットワーク１６０を介して接続されたプリンタ１５０との間で情報の送受信を行う。具体的には、処理部１０１の制御のもと、ＬＡＮ（Local  Area  Network）などのネットワーク１６０を介して所定の通信プロトコルを用いたデータ通信を行う。
【００１５】
アプリケーション１０４は、ユーザが印刷指示をすることができるソフトウェアとする。ユーザは、アプリケーション１０４で編集したデータを印刷したい場合、アプリケーション１０４が、ユーザによる印刷指示を受け付ける。この場合、アプリケーション１０４は、単体でプリンタ１５０に対する印刷データの生成を行わず、上記印刷指示に応じた印刷要求とともに、印刷対象の情報をＯＳ１０５に渡す。
【００１６】
ＯＳ１０５（Operating  System）は、ＰＣ１００のハードウェアとソフトウェアとを管理するソフトウェアである。ＯＳ１０５は、プログラムの起動、情報の読み込みや保存の制御等を行う。ＯＳのうち代表的なものとしては、ＭＳ  Ｗｉｎｄｏｗｓ（登録商標）やＵＮＩＸ（登録商標）等が知られている。本実施形態では、ＯＳ１０５は、米国マイクロソフト社が開発したＷｉｎｄｏｗｓ(登録商標）とする。なお、プリンタドライバ１０６を組み込み可能なＯＳであれば、他のＯＳを用いてもよいことは言うまでもないことである。
【００１７】
プリンタドライバ１０６は、通信部１０３によりネットワーク１６０を介して通信接続するプリンタ１５０を制御するソフトウェアである。プリンタドライバ１０６は、コア部１１１と、プラグイン部１３０とを、備えている。
【００１８】
コア部１１１は、委譲部１２１、描画部１２２、画面部１２３、印刷設定部１２４、及び呼出部１１２を備え、プリンタドライバ１０６としての標準機能を提供する。委譲部１２１、描画部１２２、画面部１２３、及び印刷設定部１２４は、プリンタドライバ１０６としての標準機能を提供するモジュール群である。コア部１１１には、機種・ＰＤＬ（Page  Description  Language）等の相違によって処理の違いが発生しない汎用的な処理が実装される。
【００１９】
呼出部１１２は、プラグイン部１３０のプラグイン１３１、１３２、１３３等の各プラグインを呼び出す。呼出部１１２は、コア部１１１（委譲部１２１、描画部１２２、画面部１２３、又は印刷設定部１２４）の命令に従って、プラグイン１３１、１３２、１３３等の各プラグインに問い合わせを行い、その命令を実現する機能を有するプラグインを特定した後に、特定したプラグインを呼び出してその命令を通知する。具体的には、プラグイン１３１、１３２、１３３がサポートしているインターフェイスから、命令に対応するインターフェイスを有するプラグインを特定し、そのインターフェイスを介して命令を通知している。なお、呼出部１１２は、プラグイン情報１０２ｃを参照して、その命令を実現する機能を有するプラグインを特定し、特定したプラグインを呼び出してその命令を通知してもよい。
【００２０】
プラグイン部１３０のプラグイン１３１、１３２、１３３等の各プラグインは、コア部１１１に対して機能を追加するためのダイナミック・リンク・ライブラリ（ＤＬＬ）などにより実現される。具体的には、記憶部１０２の所定領域にプラグイン用のＤＬＬファイルを格納しておくことでプラグイン部１３０の各プラグインの実現が可能となる。プラグイン１３１、１３２、１３３等の各プラグインは、プリンタ１５０に所定の機能を実現させるために、コア部１１１と同様に一つ以上のモジュールで構成されている。図２では、プラグイン１３１が、割込部１４１、描画部１４２、画面部１４３、及び印刷設定部１４４の４つのモジュールで構成されている場合を例示しており、プラグイン１３２、１３３もいずれか一つ以上のモジュールで構成されているものとする。また、プラグイン部１３０のプラグインがプリンタ１５０に実現させる機能としては、プリンタ１５０に強制的に両面印刷を実行させる機能（図４の両面強制プラグイン１３４参照）及び、プリンタ１５０にユーザＩＤを設定して印刷を実行させる機能（図６のユーザＩＤプラグイン１３５参照）などがある。
【００２１】
プラグイン部１３０は、プラグイン１３１、１３２、１３３の如く、複数のプラグインを有することができる。図２に示す例では、プラグイン部１３０は、プラグイン１３１〜１３３の３つのプラグインを有している。従って、プリンタドライバ１０６は、コア部１１１が有する標準機能に加え、プラグイン１３１〜１３３が有する機能を提供する。すなわち、プリンタドライバ１０６では、記憶部１０２の所定領域にプラグイン用のＤＬＬファイルを追加（例えば、インストール）することでプラグイン部１３０にプラグインを追加でき、コア部１１１が行う汎用的な処理機能以外の機能も提供できる。
【００２２】
ここで、コア部１１１及びプラグイン部１３０に例示したモジュール群（委譲部１２１，割込部１４１、描画部１２２，１４２、画面部１２３，１４３、及び印刷設定部１２４，１４４）の詳細について説明する。
【００２３】
委譲部１２１，割込部１４１は、プラグイン情報１０２ｃなどのデータを元に、プリンタドライバ１０６の処理シーケンス（印刷シーケンス）において、所定のタイミング（印刷の処理の開始、文書印刷の開始・終了、及びページ印刷の開始・終了など）で処理をフックする「DocumentEvent」の処理を行う。具体的には、コア部１１１の委譲部１２１は、呼出部１１２を介してプラグイン１３１の割込部１４１に上述した処理を委譲する。プラグイン１３１の割込部１４１は、コア部１１１の委譲部１２１より呼出部１１２を介して呼び出されると、「DocumentEvent」の処理によりコア部１１１の処理が委譲される。そして割込部１４１は、委譲部１２１より処理が委譲されたタイミングが、プラグイン１３１が提供する機能を実行するタイミング（特定のタイミングの一例）であれば、当該機能に関わる処理を割り込ませる。これにより、プラグイン１３１は、自身が提供する機能をプリンタ１５０に実現させるための処理を実行することができる。
【００２４】
描画部１２２，１４２は、機能情報１０２ａ及びプラグイン情報１０２ｃなどのデータを元に、プリンタドライバ１０６における描画にかかる処理を行う。具体的には、描画部１２２，１４２は、アプリケーション１０４から印刷を要求されたデータをプリンタ１５０が解釈可能な印刷命令に変換し、変換した印刷命令を、通信部１０３を介してプリンタ１５０に送信する。なお、描画部１２２は、例えば、プラグイン１３１が実現する機能に依存する場合は、呼出部１１２を介してプラグイン１３１を呼び出し、描画部１４２に描画にかかる処理を行わせる。描画部１４２は、呼出部１１２から呼び出しを受けたタイミングが、プラグイン１３１が提供する機能を実行するタイミングであれば、描画部１２２と同様な描画にかかる処理を行う。なお、描画部１４２が行う処理には、描画部１４２自身が印刷命令を生成する場合と、描画部１２２に相当するＡＰＩを呼び出して（コールバックして）、描画部１２２が印刷命令を生成する場合とがある。コールバックする例として、例えば線を引きたい場合は、描画部１２２のＬｉｎｅＴｏ関数を実行して文書に線を引くことが可能である。
【００２５】
画面部１２３，１４３は、レイアウト情報１０２ｂ及びプラグイン情報１０２ｃなどのデータを元に、ユーザに対する印刷設定のためのＧＵＩとなる印刷設定画面等を表示する。具体的には、コア部１１１の画面部１２３は、プリンタドライバ１０６における汎用的な機能の設定値を操作するためのＧＵＩを表示する。なお、画面部１２３は、例えば、プラグイン１３１が実現する機能にかかる設定値を操作するＧＵＩを表示する場合は、呼出部１１２を介してプラグイン１３１を呼び出し、画面部１４３にそのＧＵＩの表示を依頼する。画面部１４３は、呼出部１１２からの呼び出しに応じて、ＧＵＩの表示を行う。
【００２６】
印刷設定部１２４，１４４は、機能情報１０２ａ及びプラグイン情報１０２ｃなどのデータを元に、プリンタドライバ１０６がプリンタ１５０に印刷を行わせる際の印刷設定を行う。具体的には、印刷設定部１２４，１４４は、印刷設定の設定値の保存、取り出し、及び禁則処理などを行う。なお、印刷設定部１２４は、コア部１１１でサポートする汎用的な機能の設定値の保存、取り出し、及び禁則処理を行う。また、印刷設定部１２４は、例えば、プラグイン１３１が実現する機能にかかる印刷設定を行う場合は、呼出部１１２を介してプラグイン１３１を呼び出し、印刷設定部１４４に設定を依頼する。印刷設定部１４４は、呼出部１１２からの呼び出しに応じて、プラグイン１３１が実現する機能にかかる印刷設定の設定値の保存、取り出し、及び禁則処理などを行う。
【００２７】
図３は、コア部１１１とプラグイン１３１との関係を例示するブロック図である。図３において、実線の矢印は、コア部１１１から呼出部１１２を介して行われるプラグイン１３１の呼び出しを示している。また、点線の矢印は、コア部１１１の内部の呼び出し、プラグイン１３１からコア部１１１への呼び出しを示している。
【００２８】
図３に示すように、コア部１１１がプリンタ１５０を制御する際には、呼出部１１２を介してプラグイン１３１のモジュール（割込部１４１、描画部１４２、画面部１４３、又は印刷設定部１４４）が呼び出される。また、コア部１１１の印刷設定部１２４は、印刷設定の取得や設定の窓口であるため、ほぼすべてのモジュールからの呼び出しが可能となっている。なお、呼び出しの詳細については上述したとおりである。
【００２９】
ここで、コア部１１１の委譲部１２１は、プラグイン１３１にかかる処理については、割込部１４１を呼び出して処理を委譲するため、印刷設定部１２４への呼び出しを行わない。また、プラグイン１３１の印刷設定部１４４では、プラグイン１３１が提供する機能の禁則処理を行うために、コア部１１１が提供する汎用的な機能の設定値、あるいは他のプラグインの機能の設定値が必要な場合がある。したがって、プラグイン１３１の印刷設定部１４４は、コア部１１１の印刷設定部１２４への呼び出しを行う場合がある。
【００３０】
また、プラグイン１３１内部もコア部１１１と同様に、割込部１４１、描画部１４２、画面部１４３、及び印刷設定部１４４の各モジュールが論理的にそれぞれ独立している。このため、プラグイン１３１内のモジュールであっても、プラグイン１３１の印刷設定部１４４へ直接操作を行うことは望ましくない。このため、プラグイン１３１の全てのモジュールからコア部１１１の印刷設定部１２４を呼び出し可能となっている。プラグイン１３１の各モジュールは、印刷設定の取得及び設定等を行う場合は、プラグイン１３１自身が提供する機能の設定値であっても、コア部１１１の印刷設定部１２４を通して設定値の取得及び設定を行う。
【００３１】
ここで、プリンタドライバ１０６の具体例を説明する。図４は、プリンタドライバ１０６の具体的な構成の一例を示すブロック図である。図４に示すように、プリンタドライバ１０６は、プラグイン部１３０に両面強制プラグイン１３４を有している。ここで、両面強制プラグイン１３４がプリンタ１５０に実現させる機能は次のとおりである。
・強制的に両面で印刷を行う。
・両面印刷がオフの場合は、印刷開始時にユーザへ警告を表示する。
・警告画面でユーザに、両面で印刷を行うか否か、印刷を終了するかを決定させる。
【００３２】
両面強制プラグイン１３４は、上述した機能を実現させるため、少なくともプリンタドライバ１０６の処理をフックするための割込部１４５を有している。
【００３３】
次に、両面強制プラグイン１３４を有するプリンタドライバ１０６の動作を説明する。図５は、プリンタドライバ１０６による動作の一例を示すシーケンス図である。図５に示すように、先ずＯＳ１０５により印刷処理の開始を受けて（Ｓ１０）、コア部１１１が印刷処理を開始する（Ｓ１１）。次いで、ＯＳ１０５より「DocumentEvent」（印刷処理の開始）の通知を受けて（Ｓ２０）、コア部１１１の委譲部１２１は、呼出部１１２を介して「DocumentEvent」（印刷の開始）の処理を両面強制プラグイン１３４に委譲する（Ｓ２１、２２）。これにより、両面強制プラグイン１３４の割込部１４５には、コア部１１１から印刷の開始の処理が委譲されるが、印刷の開始時は、両面強制プラグイン１３４が何らかの処理を行うタイミングでないことから、割込部１４５は、印刷の開始の処理をフックすることなく（印刷の開始の処理に処理を割り込ませることなく）何も処理を行わない（Ｓ２３）。
【００３４】
次いで、ＯＳ１０５より文書印刷の開始を受けて（Ｓ３０）、コア部１１１が文書印刷の開始処理を行う（Ｓ３１）。次いで、ＯＳ１０５より「DocumentEvent」（文書印刷の開始）の通知を受けて（Ｓ４０）、コア部１１１の委譲部１２１は、呼出部１１２を介して「DocumentEvent」（文書印刷の開始）の処理を両面強制プラグイン１３４に委譲する（Ｓ４１、Ｓ４２）。これにより、両面強制プラグイン１３４の割込部１４５に、コア部１１１から文書印刷の開始の処理が委譲され、文書印刷の開始時は、両面強制プラグイン１３４が強制的に両面で印刷を行うための処理を行うタイミングであることから、割込部１４５は、警告ダイアログの表示処理と、両面で印刷を行うか否か、印刷を終了するかの決定をユーザから受け付ける処理とを、割り込ませる（フックする）（Ｓ４３）。ここで、両面で印刷を行わない決定が受け付けられた場合は、割込部１４５によりコア部１１１の印刷設定部１２４が呼び出されて両面印刷がＯＦＦに設定される（Ｓ４４）。
【００３５】
次いで、ＯＳ１０５よりページ印刷の開始を受けて（Ｓ５０）、コア部１１１は、描画処理を描画部１２２で実行し（Ｓ５１）、描画処理により生成された印刷命令（コマンド）をプリンタ１５０に送信する（Ｓ５２）。以下、「DocumentEvent」（ページ印刷の開始）に続くページ印刷処理（Ｓ６０、Ｓ６１、Ｓ６２）が実行されることとなる。
【００３６】
ここで、上述した両面強制プラグイン１３４を有する場合とは別のプリンタドライバ１０６の具体例を説明する。図６は、プリンタドライバ１０６の具体的な構成の一例を示すブロック図である。図６に示すように、プリンタドライバ１０６は、プラグイン部１３０にユーザＩＤプラグイン１３５を有している。ここで、ユーザＩＤプラグイン１３５がプリンタ１５０に実現させる機能は次のとおりである。
・印刷開始時にユーザＩＤの入力を促すダイアログを表示する。
・入力されたユーザＩＤをプリンタ１５０へコマンド（印刷命令）として送信する。
【００３７】
ユーザＩＤプラグイン１３５は、上述した機能を実現させるため、少なくともプリンタドライバ１０６の処理をフックするための割込部１４６を有している。また、ユーザＩＤプラグイン１３５は、割込部１４６の他、描画部１４７及び印刷設定部１４８を有する構成である。
【００３８】
次に、ユーザＩＤプラグイン１３５を有するプリンタドライバ１０６の動作を説明する。図７は、プリンタドライバ１０６による動作の一例を示すシーケンス図である。図７に示すように、先ずＯＳ１０５により印刷処理の開始を受けて（Ｓ１１０）、コア部１１１が印刷処理を開始する（Ｓ１１１）。次いで、ＯＳ１０５より「DocumentEvent」（印刷処理の開始）の通知を受けて（Ｓ１２０）、コア部１１１の委譲部１２１は、呼出部１１２を介して「DocumentEvent」（印刷の開始）の処理をユーザＩＤプラグイン１３５に委譲する（Ｓ１２１、１２２）。これにより、ユーザＩＤプラグイン１３５の割込部１４６には、コア部１１１から印刷の開始の処理が委譲され、印刷の開始時は、ユーザＩＤプラグイン１３５がユーザＩＤにかかる処理を行うタイミングであることから、割込部１４６は、ユーザＩＤ入力のダイアログの表示処理と、ユーザＩＤの入力をユーザから受け付ける処理とを、割り込ませる（フックする）（Ｓ１２４）。
【００３９】
次いで、ユーザＩＤプラグイン１３５の割込部１４６は、コア部１１１の印刷設定部１２４を呼び出してユーザＩＤの設定を依頼する（Ｓ１２５）。次いで、コア部１１１の印刷設定部１２４は、呼出部１１２を介してユーザＩＤプラグイン１３５の印刷設定部１４８を呼び出してユーザＩＤの設定を依頼する（Ｓ１２６）。これにより、ユーザＩＤプラグイン１３５内で直接印刷設定部１４８が呼び出されることを防止している。
【００４０】
次いで、ＯＳ１０５より文書印刷の開始を受けて（Ｓ１３０）、コア部１１１が文書印刷の開始処理を行う（Ｓ１３１）。次いで、コア部１１１の描画部１２２は、呼出部１１２を介して文書印刷の開始処理をユーザＩＤプラグイン１３５に依頼する（Ｓ１３２、Ｓ１３３）。次いで、ユーザＩＤプラグイン１３５の描画部１４７は、コア部１１１の印刷設定部１２４にユーザＩＤの値取得を依頼する（Ｓ１３４）。次いで、コア部１１１の印刷設定部１２４は、呼出部１１２を介してユーザＩＤプラグイン１３５の印刷設定部１４８にユーザＩＤの値取得を依頼する（Ｓ１３５）。これにより、ユーザＩＤプラグイン１３５の描画部１４７は、印刷設定部１４８により取得されたユーザＩＤでユーザＩＤ送信用のコマンドを生成する（Ｓ１３６）。次いで、「DocumentEvent」（文書印刷の開始）に続く印刷処理（Ｓ１４０、Ｓ１４１、Ｓ１４２）が実行される。この文書印刷の開始時は、ユーザＩＤプラグイン１３５が何らかの処理を行うタイミングでないことから、割込部１４６は、文書印刷の開始処理をフックすることなく（文書印刷の開始処理に処理を割り込ませることなく）何も処理を行わない（Ｓ１４４）。
【００４１】
以上のように、ＰＣ１００は、通信可能に接続するプリンタ１５０を制御するコア部１１１を備え、コア部１１１は、プリンタ１５０を制御する際に、プリンタ１５０に所定の機能を実現させるプラグインを呼び出す呼出部１１２を備えている。そして、プラグインは、呼出部１１２により所定のタイミングで呼び出された場合、コア部１１１によるプリンタ１５０の制御にかかる処理に所定の機能にかかる処理を割り込ませる。したがって、プリンタドライバ１０６で「DocumentEvent」にかかる処理に変更・差異がある場合は、プラグインを差し替えるだけでよく、コア部１１１の再開発の手間を省くことができ、開発負担や開発コストを低減できる。
【００４２】
（第２実施形態）
第２実施形態では、複数のプラグインを順番に呼び出して処理をフックする場合に、呼び出し済みのプラグインに基づいて次のプラグインを呼び出すか否かを判定する例について説明する。なお以下では、第１実施形態との相違点の説明を主に行い、第１実施形態と同様の機能を有する構成要素については、第１実施形態と同様の名称・符号を付し、その説明を省略する。
【００４３】
図８は、第２実施形態のＰＣ２００の機能的構成を模式的に示すブロック図である。図８に示すように、第２実施形態のＰＣ２００は、処理部２０１のプリンタドライバ２０６及び記憶部２０２が第１実施形態のＰＣ１００と相違する。
【００４４】
プリンタドライバ２０６は、コア部２１１と、プラグイン部２３０とを、備えている。コア部２１１は、委譲部２２１、印刷設定部２２４、呼出部２１２、及び整合部２１３を備える。第２実施形態では、描画部及び画面部の図示を省略しているが、コア部２１１は、描画部及び画面部を備えていてもよい。プラグイン部２３０は、プラグイン２３１〜２３４を有する。但し、プラグイン部２３０が有するプラグインは、プラグイン２３１〜２３４に限定されるものではない。
【００４５】
記憶部２０２には、優先度ファイル２０２ｄ（優先度情報の一例）が更に記憶される。優先度ファイル２０２ｄは、プラグイン部２３０のプラグイン２３１〜２３４それぞれの優先度を定義したファイルである。
【００４６】
図９は、優先度ファイル２０２ｄの一例を示す図である。図９に示す例では、Ｐｌｕｇｉｎ１〜Ｐｌｕｇｉｎ４のｐｒｉｏｒｉｔｙがＪＳＯＮ形式で定義されている。Ｐｌｕｇｉｎ１〜Ｐｌｕｇｉｎ４は、それぞれプラグイン２３１〜２３４を示し、ｐｒｉｏｒｉｔｙの値が大きいほど優先度が高いものとする。
【００４７】
委譲部２２１は、プリンタドライバ２０６の処理シーケンス（印刷シーケンス）において、所定のタイミング（印刷の処理の開始、文書印刷の開始・終了、及びページ印刷の開始・終了など）になると、プラグインの呼出命令を呼出部２１２に送る。そして、委譲部２２１は、呼出部２１２により呼び出されたプラグインに上述した処理を委譲する。
【００４８】
また委譲部２２１は、呼出部２１２からプラグインの呼出命令の完了通知を受け取ると、整合部２１３に印刷設定の反映を指示する。
【００４９】
呼出部２１２は、委譲部２２１からプラグインの呼出命令が送られると、その命令を実現する機能を有するプラグインを特定する。ここでは、呼出部２１２は、プラグイン２３１〜２３４を特定し、更に、プラグイン２３１〜２３４の順番で呼び出すことを特定するものとする。呼出部２１２は、このように、複数のプラグインを順番に呼び出す場合、呼び出し済みのプラグインに基づいて次のプラグインを呼び出すか否かを判定する。
【００５０】
具体的には、呼出部２１２は、呼び出し済みのプラグインがキャンセルされたか否かを示すキャンセル情報及び優先度ファイル２０２ｄの少なくともいずれかに基づいて、次のプラグインを呼び出すか否かを判定する。キャンセル情報は、プラグイン２３１〜２３４によりＲＡＭに保存される情報であり、詳細は後述する。
【００５１】
例えば、次のプラグインの優先度が、キャンセルされた呼び出し済みのプラグインの優先度よりも高ければ、呼出部２１２は、次のプラグインを呼び出すと判定し、呼び出す。一方、次のプラグインの優先度が、キャンセルされた呼び出し済みのプラグインの優先度よりも低ければ、呼出部２１２は、次のプラグインを呼び出さないと判定し、呼び出さない。
【００５２】
ここで、呼出部２１２がプラグイン２３１〜２３４の順番で呼び出す場合において、プラグイン２３２でキャンセルされたとする。この場合、呼出部２１２は、プラグイン２３３については、優先度は“３０”であり、キャンセルされた呼び出し済みのプラグイン２３２の優先度は“５０”であるため（図９参照）、プラグイン２３３を呼び出さないと判定する。一方、呼出部２１２は、プラグイン２３４については、優先度は“７０”であり、キャンセルされた呼び出し済みのプラグイン２３２の優先度は“５０”であるため（図９参照）、プラグイン２３４を呼び出すと判定する。
【００５３】
そして呼出部２１２は、委譲部２２１からのプラグインの呼出命令を完了すると、委譲部２２１に完了通知を送る。
【００５４】
プラグイン２３１〜２３４は、委譲部２２１より呼出部２１２を介して呼び出され、割込処理を行うタイミングであれば、印刷設定に対してＯＫ又はキャンセルの選択が可能な印刷設定画面（例えば、図１１参照）の表示処理と、ユーザによる選択内容（ＯＫ又はキャンセル）に応じた印刷設定を整合部２１３に保持させる処理と、キャンセル情報をＲＡＭに保存する処理とを、割り込ませる（フックする）。キャンセル情報は、ユーザによりＯＫが選択されれば、キャンセルされなかったことを示し、ユーザによりキャンセルが選択されれば、キャンセルされたことを示す。なお、プラグイン２３１〜２３４は、キャンセル情報をＲＡＭに保存するのではなく、戻り値として呼出部２１２に返却するようにしてもよい。
【００５５】
整合部２１３は、プラグイン２３１〜２３４による設定を保持する。そして整合部２１３は、委譲部２２１から印刷設定の反映が指示されると、保持している印刷設定を印刷設定部２２４に反映する。
【００５６】
図１０は、プリンタドライバ２０６による動作の一例を示すフローチャートである。
【００５７】
まず、呼出部２１２は、委譲部２２１からプラグインの呼出命令が送られると、その命令を実現する機能を有するプラグインを特定し、次の呼出対象のプラグインがあるか否かを判定する（ステップＳ２００）。
【００５８】
呼出対象のプラグインがある場合（ステップＳ２００でＹｅｓ）、呼出部２１２は、ＲＡＭからキャンセル情報を取得するとともに（ステップＳ２０２）、記憶部２０２から優先度ファイル２０２ｄを取得する（ステップＳ２０４）。
【００５９】
次いで、呼出部２１２は、キャンセル情報及び優先度ファイル２０２ｄを参照し、キャンセルされたプラグインの優先度と呼出対象のプラグインの優先度とに基づいて、呼出対象のプラグインを呼び出すか否かを判定する（ステップＳ２０６）。
【００６０】
呼出部２１２は、呼出対象のプラグインを呼び出さないと判定した場合（ステップＳ２０８でＮｏ）、ステップＳ２００へ戻る。一方、呼出部２１２は、呼出対象のプラグインを呼び出すと判定した場合（ステップＳ２０８でＹｅｓ）、当該呼出対象のプラグインを呼び出す（ステップＳ２１０）。
【００６１】
次いで、呼び出されたプラグインは、印刷設定画面を表示し、ユーザによりＯＫが選択されると（ステップＳ２１２でＮｏ）、ＯＫされた印刷設定を整合部２１３に保持させるとともに（ステップＳ２１４）、自身がキャンセルされなかったことを示すキャンセル情報をＲＡＭに保存し（ステップＳ２１６）、ステップＳ２００に戻る。
【００６２】
一方、呼び出されたプラグインは、ユーザによりキャンセルが選択されると（ステップＳ２１２でＹｅｓ）、自身がキャンセルされたことを示すキャンセル情報をＲＡＭに保存し（ステップＳ２１６）、ステップＳ２００に戻る。この場合、呼び出されたプラグインの印刷設定は整合部２１３に保持されない。
【００６３】
そして呼出部２１２は、呼出対象のプラグインがない場合（ステップＳ２００でＮｏ）、委譲部２２１に完了通知を送り、委譲部２２１は、整合部２１３に印刷設定の反映を指示し、整合部２１３は、保持している印刷設定を印刷設定部２２４に反映する（ステップＳ２１８）。
【００６４】
以上のように、第２実施形態によれば、特定のタイミングに複数のプラグインを順番に呼び出して処理をフックする場合に、いずれかのプラグインがキャンセルされた場合であっても、残りのプラグインのうち条件に合致したプラグインを呼び出すことができる。これにより複数のプラグインによる設定の整合を図ることができる。
【００６５】
なお第２実施形態では、次のプラグインの優先度が、キャンセルされた呼び出し済みのプラグインの優先度よりも高ければ、次のプラグインを呼び出す例について説明したが、これに限定されるものではない。
【００６６】
例えば、呼び出し済みのプラグインの中にキャンセルされたものがある場合、以降のプラグインの呼び出し及び印刷を中止するようにしてもよい。この場合、呼出部２１２は、キャンセル情報を参照し、キャンセルされたことを示していれば、以降のプラグインの呼び出しを中止し、印刷の中止を委譲部２２１に通知すればよい。この例の場合、ＰＣ２００は、記憶部２０２に優先度ファイル２０２ｄを記憶しておかなくてもよい。
【００６７】
また例えば、呼び出し済みのプラグインの中にキャンセルされたものがある場合、以降のプラグインの呼び出しを中止し、この時点までのプラグインによる設定で印刷を行うようにしてもよい。この場合、呼出部２１２は、キャンセル情報を参照し、キャンセルされたことを示していれば、以降のプラグインの呼び出しを中止し、委譲部２２１に完了通知を送るようにすればよい。この例の場合も、ＰＣ２００は、記憶部２０２に優先度ファイル２０２ｄを記憶しておかなくてもよい。
【００６８】
また例えば、呼び出し済みのプラグインの中にキャンセルされたものがある場合、以降のプラグインの呼び出しを中止し、この時点までのプラグインによる設定を無効化（初期化）して印刷を行うようにしてもよい。この場合、呼出部２１２は、キャンセル情報を参照し、キャンセルされたことを示していれば、以降のプラグインの呼び出しを中止し、委譲部２２１に完了通知を送り、委譲部２２１は、整合部２１３に印刷設定の破棄を指示するようにすればよい。この例の場合も、ＰＣ２００は、記憶部２０２に優先度ファイル２０２ｄを記憶しておかなくてもよい。
【００６９】
また例えば、呼び出し済みのプラグインの中にキャンセルされたものがあっても、以降の以降のプラグインを順番に呼び出してもよい。この場合、呼出部２１２は、プラグインを順番に呼び出せばよい。この例の場合も、ＰＣ２００は、記憶部２０２に優先度ファイル２０２ｄを記憶しておかなくてもよいし、プラグインはキャンセル情報をＲＡＭに保存しなくてもよい。
【００７０】
（第３実施形態）
第３実施形態では、複数のプラグインを順番に呼び出して処理をフックする場合に、呼び出し済みのプラグインの設定を次のプラグインに反映する例について説明する。なお以下では、第２実施形態との相違点の説明を主に行い、第２実施形態と同様の機能を有する構成要素については、第２実施形態と同様の名称・符号を付し、その説明を省略する。
【００７１】
図１１〜図１３は、呼び出し済みのプラグインの設定を次のプラグインに反映する例の説明図である。ここでは、２つのプラグインが連続して呼び出されるものとする。１つ目のプラグインが呼び出されると、当該プラグインは、図１１に示すように、ユーザＩＤ及び設定１を設定する印刷設定画面を表示し、ユーザによる設定を受け付ける。続いて、２つ目のプラグインが呼び出されると、当該プラグインは、図１２に示すように、ユーザＩＤ及び設定２を設定する印刷設定画面を表示するが、通常であれば、１つ目のプラグインにより設定されたユーザＩＤは反映されない。これに対し、第３実施形態では、２つ目のプラグインが呼び出されると、当該プラグインは、図１３に示すように、１つ目のプラグインにより設定されたユーザＩＤを反映して、ユーザＩＤ及び設定２を設定する印刷設定画面を表示する。
【００７２】
図１４は、第３実施形態のＰＣ３００の機能的構成を模式的に示すブロック図である。図１４に示すように、第３実施形態のＰＣ３００は、処理部３０１のプリンタドライバ３０６及び記憶部３０２が第２実施形態のＰＣ２００と相違する。
【００７３】
プリンタドライバ３０６のプラグイン部３３０は、プラグイン３３１〜３３４を有している。但し、プラグイン部３３０が有するプラグインは、プラグイン３３１〜３３４に限定されるものではない。
【００７４】
記憶部３０２には、設定ファイル３０２ｅ（設定反映情報の一例）が更に記憶される。設定ファイル３０２ｅは、プラグイン部３３０のプラグイン３３１〜３３４それぞれに、呼び出し済みのプラグインによる設定を反映するかしないかを定義したファイルである。
【００７５】
図１５は、設定ファイル３０２ｅの一例を示す図である。図１５に示す例では、Ｐｌｕｇｉｎ１〜Ｐｌｕｇｉｎ４のｄｉｓｐｌａｙ（呼び出し済みのプラグインによる設定を反映して表示するかしないか）がＪＳＯＮ形式で定義されている。Ｐｌｕｇｉｎ１〜Ｐｌｕｇｉｎ４は、それぞれプラグイン３３１〜３３４を示し、ｄｉｓｐｌａｙの値がｄｅｆａｕｌｔの場合、呼び出し済みのプラグインによる設定を反映せずデフォルトの表示を行うことを示し、ｄｉｓｐｌａｙの値がｓｔｏｒｅの場合、呼び出し済みのプラグインによる設定を反映して表示を行うことを示すものとする。
【００７６】
プラグイン３３１〜３３４は、委譲部２２１より呼出部２１２を介して呼び出され、割込処理を行うタイミングであれば、呼び出し済みのプラグインによる設定を反映して所定の機能にかかる処理を割り込ませる（フックする）。
【００７７】
具体的には、プラグイン３３１〜３３４は、設定ファイル３０２ｅを参照して、自身のプラグインのｄｉｓｐｌａｙの値がｓｔｏｒｅの場合、整合部２１３に保持されている設定を取得し、取得した設定を反映した印刷設定画面の表示処理と、ユーザによる選択内容に応じた印刷設定を整合部２１３に保持させる処理と、キャンセル情報をＲＡＭに保存する処理とを、割り込ませる（フックする）。例えば、プラグイン３３１〜３３４は、図１３に示すように、整合部２１３に保持されているユーザＩＤの設定を取得し、取得したユーザＩＤの設定を反映した印刷設定画面を表示する。
【００７８】
一方、プラグイン３３１〜３３４は、設定ファイル３０２ｅを参照して、自身のプラグインのｄｉｓｐｌａｙの値がｄｅｆａｕｌｔの場合、整合部２１３に保持されている設定を反映しない印刷設定画面の表示処理と、ユーザによる選択内容に応じた印刷設定を整合部２１３に保持させる処理と、キャンセル情報をＲＡＭに保存する処理とを、割り込ませる（フックする）。例えば、プラグイン３３１〜３３４は、図１２に示すように、整合部２１３に保持されているユーザＩＤの設定を反映しない印刷設定画面を表示する。
【００７９】
以上のように、第３実施形態によれば、特定のタイミングに複数のプラグインを順番に呼び出して処理をフックする場合に、呼び出し済みのプラグインの設定を次のプラグインに反映したりしなかったりすることができる。
【００８０】
（第４実施形態）
第４実施形態では、複数のプラグインを順番に呼び出して処理をフックする場合に、複数のプラグインによる同一の機能に対する設定を整合する例について説明する。なお以下では、第２実施形態との相違点の説明を主に行い、第２実施形態と同様の機能を有する構成要素については、第２実施形態と同様の名称・符号を付し、その説明を省略する。
【００８１】
図１６は、第４実施形態のＰＣ４００の機能的構成を模式的に示すブロック図である。図１６に示すように、第４実施形態のＰＣ４００は、処理部４０１のプリンタドライバ４０６が第２実施形態のＰＣ２００と相違する。
【００８２】
プリンタドライバ４０６は、コア部４１１と、プラグイン部４３０とを、備えている。コア部２１１は、委譲部２２１、印刷設定部２２４、呼出部４１２、及び整合部４１３を備える。プラグイン部４３０は、プラグイン４３１〜４３４を有する。但し、プラグイン部４３０が有するプラグインは、プラグイン４３１〜４３４に限定されるものではない。
【００８３】
呼出部４１２は、委譲部２２１からプラグインの呼出命令が送られると、その命令を実現する機能を有するプラグインを特定する。ここでは、呼出部４１２は、プラグイン４３１〜４３４を特定し、更に、プラグイン４３１〜４３４の順番で呼び出すことを特定し、プラグイン４３１〜４３４を順番に呼び出すものとする。そして呼出部４１２は、委譲部２２１からのプラグインの呼出命令を完了すると、委譲部２２１に完了通知を送る。
【００８４】
プラグイン４３１〜４３４は、委譲部２２１より呼出部４１２を介して呼び出され、割込処理を行うタイミングであれば、所定の機能に対する設定を行い、設定を整合部４１３に保持させる処理を割り込ませる（フックする）。ここで、プラグイン４３１〜４３４は、いずれも同一の機能に対する印刷設定を行うものであり、ここでは、プラグイン４３１〜４３４は、いずれもユーザＩＤを設定するものであるとする。つまり、プラグイン４３１〜４３４は、委譲部２２１より呼出部１１２を介して呼び出され、割込処理を行うタイミングであれば、ユーザＩＤを設定する印刷設定画面の表示処理と、設定されたユーザＩＤを整合部２１３に保持させる処理とを、割り込ませる（フックする）。
【００８５】
整合部４１３は、プラグイン４３１〜４３４それぞれによる設定を整合して保持する。具体的には、整合部４１３は、優先度ファイル２０２ｄに基づいて、プラグイン４３１〜４３４それぞれによる設定を整合して保持する。
【００８６】
例えば、整合部４１３は、呼出部４１２により呼び出されたプラグインの優先度が、設定を保持しているプラグインの優先度よりも高ければ、呼出部４１２により呼び出されたプラグインによる設定で、保持している設定を上書きする。一方、整合部４１３は、呼出部４１２により呼び出されたプラグインの優先度が、設定を保持しているプラグインの優先度よりも低ければ、保持している設定をそのまま保持する。
【００８７】
ここで、呼出部４１２がプラグイン４３１〜４３４の順番で呼び出す場合、整合部４１３は、まず、プラグイン４３１のユーザＩＤの設定を保持する。整合部４１３は、次に、プラグイン４３２については、優先度は“５０”であり、ユーザＩＤの設定が保持されているプラグイン４３１の優先度は“３０”であるため（図９参照）、保持しているユーザＩＤの設定をプラグイン４３１のユーザＩＤの設定で上書きする。整合部４１３は、次に、プラグイン４３３については、優先度は“３０”であり、ユーザＩＤの設定が保持されているプラグイン４３２の優先度は“５０”であるため（図９参照）、ユーザＩＤの設定をそのまま保持する。整合部４１３は、次に、プラグイン４３４については、優先度は“７０”であり、ユーザＩＤの設定が保持されているプラグイン４３２の優先度は“５０”であるため（図９参照）、保持しているユーザＩＤの設定をプラグイン４３４のユーザＩＤの設定で上書きする。この結果、優先度の最も高いプラグイン４３４によるユーザＩＤの設定に整合される。
【００８８】
そして整合部４１３は、委譲部２２１から印刷設定の反映が指示されると、整合した印刷設定を印刷設定部２２４に反映する。
【００８９】
図１７は、プリンタドライバ４０６による動作の一例を示すフローチャートである。
【００９０】
まず、呼出部４１２は、委譲部２２１からプラグインの呼出命令が送られると、その命令を実現する機能を有するプラグインを特定し、次の呼出対象のプラグインがあるか否かを判定する（ステップＳ３００）。
【００９１】
呼出対象のプラグインがある場合（ステップＳ３００でＹｅｓ）、呼出部４１２は、呼出対象のプラグインを呼び出す（ステップＳ３０２）。
【００９２】
次いで、呼び出されたプラグインは、印刷設定画面を表示し、ユーザにより印刷設定が変更（例えば、ユーザＩＤが設定）されると（ステップＳ３０４）、整合部４１３に印刷設定の保持を依頼する（ステップＳ３０６）。
【００９３】
次いで、整合部４１３は、記憶部２０２から優先度ファイル２０２ｄを取得し（ステップＳ３０８）、呼び出されたプラグインの優先度と印刷設定を保持しているプラグインの優先度とに基づいて、呼び出されたプラグインの印刷設定を保持するか否か（呼び出されたプラグインの印刷設定で上書きするか否か）を判定する（ステップＳ３１０）。
【００９４】
呼び出されたプラグインの印刷設定を保持しない場合（ステップＳ３１２でＮｏ）、ステップＳ３００へ戻る。一方、呼び出されたプラグインの印刷設定を保持する場合（ステップＳ３１２でＹｅｓ）、整合部４１３は、呼び出されたプラグインの印刷設定を保持し（ステップＳ３１４）、ステップＳ３００へ戻る。
【００９５】
そして呼出部４１２は、呼出対象のプラグインがない場合（ステップＳ３００でＮｏ）、委譲部２２１に完了通知を送り、委譲部２２１は、整合部４１３に印刷設定の反映を指示し、整合部４１３は、保持している印刷設定を印刷設定部２２４に反映する（ステップＳ３１６）。
【００９６】
以上のように、第４実施形態によれば、特定のタイミングに複数のプラグインを順番に呼び出して処理をフックする場合に、複数のプラグインが同一の機能に対して設定を行う場合であっても設定を整合することができる。
【００９７】
なお第４実施形態では、呼び出されたプラグインの優先度が、設定が保持されているプラグインの優先度よりも高ければ、呼び出されたプラグインの設定を保持する例について説明したが、これに限定されるものではない。
【００９８】
例えば、後に呼び出されたプラグインの設定を保持するようにしてもよい。この場合、整合部４１３は、プラグインの設定が行われる毎に、当該プラグインの設定で、保持している設定を上書きすればよい。この例の場合、ＰＣ４００は、記憶部２０２に優先度ファイル２０２ｄを記憶しておかなくてもよい。
【００９９】
また例えば、最初に呼び出されたプラグインの設定を保持するようにしてもよい。この場合、整合部４１３は、２つ目以降のプラグインの設定を破棄すればよい。この例の場合も、ＰＣ４００は、記憶部２０２に優先度ファイル２０２ｄを記憶しておかなくてもよい。
【０１００】
また例えば、異なるプラグインで設定が行われた場合、デフォルトの設定に戻すようにしてもよい。この場合、整合部４１３は、プラグインの設定を既に保持している状態で他のプラグインの設定の保持依頼があれば（他のプラグインが呼び出されれば）、保持している設定をデフォルトの設定に戻せばよい。
【０１０１】
（第５実施形態）
第５実施形態では、複数のプラグインを順番に呼び出して処理をフックする場合に、複数のプラグインによる排他関係にある機能に対する設定を整合する例について説明する。なお以下では、第２実施形態との相違点の説明を主に行い、第２実施形態と同様の機能を有する構成要素については、第２実施形態と同様の名称・符号を付し、その説明を省略する。
【０１０２】
図１８は、第５実施形態のＰＣ５００の機能的構成を模式的に示すブロック図である。図１８に示すように、第５実施形態のＰＣ５００は、処理部５０１のプリンタドライバ５０６が第２実施形態のＰＣ２００と相違する。
【０１０３】
プリンタドライバ５０６は、コア部５１１と、プラグイン部５３０とを、備えている。コア部５１１は、委譲部２２１、印刷設定部２２４、呼出部４１２、整合部５１３、及び禁則処理部５１４を備える。プラグイン部５３０は、プラグイン５３１〜５３４を有する。但し、プラグイン部５３０が有するプラグインは、プラグイン５３１〜５３４に限定されるものではない。
【０１０４】
呼出部４１２は、委譲部２２１からプラグインの呼出命令が送られると、その命令を実現する機能を有するプラグインを特定する。ここでは、呼出部４１２は、プラグイン５３１〜５３４を特定し、更に、プラグイン５３１〜５３４の順番で呼び出すことを特定し、プラグイン５３１〜５３４を順番に呼び出すものとする。そして呼出部４１２は、委譲部２２１からのプラグインの呼出命令を完了すると、委譲部２２１に完了通知を送る。
【０１０５】
プラグイン５３１〜５３４は、委譲部２２１より呼出部４１２を介して呼び出され、割込処理を行うタイミングであれば、所定の機能に対する設定を行い、設定を整合部５１３に保持させる処理を割り込ませる（フックする）。ここで、プラグイン５３１〜５３４は、排他関係にある機能に対する印刷設定を行うものであり、ここでは、プラグイン５３１〜５３４は、排他関係にあるステープル機能及びパンチ機能に対する印刷設定を行うものであるとする。つまり、プラグイン５３１〜５３４のうち少なくとも１つは、委譲部２２１より呼出部４１２を介して呼び出され、割込処理を行うタイミングであれば、ステープル機能を設定する印刷設定画面の表示処理と、ステープル機能の設定を整合部５１３に保持させる処理とを、割り込ませる（フックする）。同様に、プラグイン５３１〜５３４のうち少なくとも１つ（但し、ステープル機能を設定するプラグインとは異なるプラグイン）は、委譲部２２１より呼出部４１２を介して呼び出され、割込処理を行うタイミングであれば、パンチ機能を設定する印刷設定画面の表示処理と、パンチ機能の設定を整合部５１３に保持させる処理とを、割り込ませる（フックする）。
【０１０６】
整合部５１３は、プラグイン５３１〜５３４それぞれによる設定を整合して保持する。具体的には、整合部５１３は、保持している設定と保持を依頼された設定とを禁則処理部５１４に送り、禁則処理部５１４による禁則処理が施された設定を保持する。そして整合部５１３は、委譲部２２１から印刷設定の反映が指示されると、保持している印刷設定を印刷設定部２２４に反映する。
【０１０７】
禁則処理部５１４は、所定の禁則ルールに従って複数のプラグインそれぞれによる設定に対して禁則処理を施す。具体的には、禁則処理部５１４は、整合部５１３から、保持している設定と保持を依頼された設定とが送られると、禁則処理を施し、禁則処理を施こした設定を整合部５１３に返す。ここで、禁則処理部５１４は、プラグイン５３１〜５３４が提供する機能に予め優先度を付けており、この優先度に基づいて禁則処理を行う。
【０１０８】
例えば、禁則処理部５１４は、ステープル機能の優先度がパンチ機能の優先度よりも高く、整合部５１３から、保持している設定としてステープル機能：ＯＮ（パンチ機能：ＯＦＦ）、保持を依頼された設定としてパンチ機能：ＯＮ（ステープル機能：ＯＦＦ）が送られたとする。この場合、禁則処理部５１４は、保持している設定と保持を依頼された設定とに禁則処理を施し、禁則処理が施された設定としてステープル機能：ＯＮ（パンチ機能：ＯＦＦ）を整合部５１３に返す。
【０１０９】
図１９は、プリンタドライバ５０６による動作の一例を示すフローチャートである。
【０１１０】
まず、呼出部４１２は、委譲部２２１からプラグインの呼出命令が送られると、その命令を実現する機能を有するプラグインを特定し、次の呼出対象のプラグインがあるか否かを判定する（ステップＳ４００）。
【０１１１】
呼出対象のプラグインがある場合（ステップＳ４００でＹｅｓ）、呼出部４１２は、呼出対象のプラグインを呼び出す（ステップＳ４０２）。
【０１１２】
次いで、呼び出されたプラグインは、印刷設定画面を表示し、ユーザにより印刷設定が変更（例えば、ステープル機能やパンチ機能が設定）されると（ステップＳ４０４）、整合部５１３に印刷設定の保持を依頼する（ステップＳ４０６）。
【０１１３】
次いで、整合部５１３は、保持している印刷設定と保持を依頼された印刷設定とを禁則処理部５１４に送り、禁則処理を依頼する（ステップＳ４０８）。
【０１１４】
次いで、禁則処理部５１４は、保持している印刷設定と保持を依頼された印刷設定とに禁則処理を施し、整合部５１３は、禁則処理が施こされた印刷設定を保持し（ステップＳ４１０）、ステップＳ４００へ戻る。
【０１１５】
そして呼出部４１２は、呼出対象のプラグインがない場合（ステップＳ４００でＮｏ）、委譲部２２１に完了通知を送り、委譲部２２１は、整合部５１３に印刷設定の反映を指示し、整合部５１３は、保持している印刷設定を印刷設定部２２４に反映する（ステップＳ４１２）。
【０１１６】
以上のように、第５実施形態によれば、特定のタイミングに複数のプラグインを順番に呼び出して処理をフックする場合に、複数のプラグインが排他関係にある機能に対して設定を行う場合であっても設定を整合することができる。
【０１１７】
なお第５実施形態では、禁則処理において優先度が高い機能を優先する例について説明したが、これに限定されるものではない。
【０１１８】
例えば、後に呼び出されたプラグインの機能を優先するようにしてもよい。この場合、禁則処理部５１４は、整合部５１３から送られた保持している印刷設定と保持を依頼された印刷設定とに対して、保持を依頼された印刷設定を優先する禁則処理を施せばよい。
【０１１９】
また例えば、最初に呼び出されたプラグインの機能を優先するようにしてもよい。この場合、禁則処理部５１４は、整合部５１３から送られた保持している印刷設定と保持を依頼された印刷設定とに対して、保持している印刷設定を優先する禁則処理を施せばよい。
【０１２０】
また例えば、排他関係にある機能の設定が行われた場合、デフォルトの設定に戻すようにしてもよい。この場合、整合部４１３は、整合部５１３から送られた保持している印刷設定と保持を依頼された印刷設定とが排他関係にあれば、保持している設定をデフォルトの設定に戻せばよい。
【０１２１】
（変形例）
なお、本発明は、上記実施形態に限定されるものではなく、種々の変形が可能であり、上記各実施形態を組み合わせたり、上記各実施形態で説明した内容の一部を他の実施形態に組み合わせたりしてもよい。例えば、第３実施形態を第４実施形態や第５実施形態と組み合わせてもよい。また例えば、第２実施形態のプラグインの呼び出しをキャンセルする内容を第４実施形態や第５実施形態に組み合わせたりしてもよい。
【０１２２】
（ハードウェア構成）
図２０は、上記各実施形態のＰＣのハードウェア構成を示した図である。図２０に示すようにＰＣは、ＣＰＵ３１０１と、ＲＯＭ３１０２と、ＲＡＭ３１０３と、ＨＤＤ３１０４（Hard  Disk  Drive）と、ディスプレイ装置などの表示装置３１０５と、キーボードやマウスなどの入力装置３１０６と、通信Ｉ／Ｆ３１０７と、これらを接続するバス３１０８と、を備えており、通常のコンピュータを利用したハードウェア構成となっている。
【０１２３】
上記各実施形態にかかるＰＣで実行されるプリンタドライバ（プログラム）は、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記憶媒体に記録されて提供される。
【０１２４】
また、上記各実施形態にかかるＰＣで実行されるプリンタドライバを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、上記各実施形態にかかるＰＣで実行されるプリンタドライバをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【０１２５】
また、上記各実施形態にかかるＰＣで実行されるプリンタドライバを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１２６】
上記各実施形態にかかるＰＣで実行されるプリンタドライバは、上述した各部（コア部１１１及び各種プラグイン）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ３１０１が上記記憶媒体からプリンタドライバを読み出して実行することにより上記各部がＲＡＭ３１０３上にロードされ、コア部１１１及び各種プラグインがＲＡＭ３１０３上に生成されるようになっている。
【符号の説明】
【０１２７】
１００、２００、３００、４００、５００  ＰＣ
１０１、２０１、３０１、４０１、５０１  処理部
１０２、２０２、３０２  記憶部
１０２ａ  機能情報
１０２ｂ  レイアウト情報
１０２ｃ  プラグイン情報
１０３  通信部
１０４  アプリケーション
１０５  ＯＳ
１０６、２０６、３０６、４０６、５０６  プリンタドライバ
１１１、２１１、４１１、５１１  コア部
１１２、２１２、４１２  呼出部
１２１、２２１  委譲部
１２２  描画部
１２３  画面部
１２４、２２４  印刷設定部
１３０、２３０、３３０、４３０、５３０  プラグイン部
１３１、１３２、１３３、２３１、２３２、２３３、２３４、３３１、３３２、３３３、３３４、４３１、４３２、４３３、４３４、５３１、５３２、５３３、５３４  プラグイン
１３４  両面強制プラグイン
１３５  ユーザＩＤプラグイン
１４１、１４５、１４６  割込部
１４２、１４７  描画部
１４３  画面部
１４４、１４８  印刷設定部
１５０  プリンタ
１６０  ネットワーク
２０２ｄ  優先度ファイル
３０２ｅ  設定ファイル
２１３、４１３、５１３  整合部
５１４  禁則処理部
３１０１  ＣＰＵ
３１０２  ＲＯＭ
３１０３  ＲＡＭ
３１０４  ＨＤＤ
３１０５  表示装置
３１０６  入力装置
３１０７  通信Ｉ／Ｆ
３１０８  バス
【先行技術文献】
【特許文献】
【０１２８】
【特許文献１】特許第３７４５３４４号公報
【特許文献２】特開２００９−１７１５７９号公報
【図１】
0005891794.tif 000002
【図２】
0005891794.tif 000003
【図３】
0005891794.tif 000004
【図４】
0005891794.tif 000005
【図５】
0005891794.tif 000006
【図６】
0005891794.tif 000007
【図７】
0005891794.tif 000008
【図８】
0005891794.tif 000009
【図９】
0005891794.tif 000010
【図１０】
0005891794.tif 000011
【図１１】
0005891794.tif 000012
【図１２】
0005891794.tif 000013
【図１３】
0005891794.tif 000014
【図１４】
0005891794.tif 000015
【図１５】
0005891794.tif 000016
【図１６】
0005891794.tif 000017
【図１７】
0005891794.tif 000018
【図１８】
0005891794.tif 000019
【図１９】
0005891794.tif 000020
【図２０】
0005891794.tif 000021