(57)【要約】      （修正有）【課題】共通プリンタドライバに対して個々のプリンタに応じた拡張アプリを適切に関連付けることができる情報処理装置、情報処理装置の制御方法、及びプログラムを提供する。【解決手段】クライアントコンピュータのOS210は、OS共通プリンタドライバを、ユーザにより指定されたプリンタに対して設定する場合に、該プリンタのHWIDを取得し（S501〜S505）、HWIDを用いて指定されたプリンタに対応する拡張アプリ300をダウンロードしてインストールする（S506〜S511）。また、OS210は、レジストリに、指定されたプリンタとプリント拡張アプリ300を関連付ける情報を登録する（S507、S509）。OS210は、OS共通プリンタドライバが設定されているプリンタに関する制御を行う場合に、レジストリに登録された情報を用いてプリント拡張アプリ300の起動を制御する。【選択図】図５
2020004158.tif 000002
【特許請求の範囲】
【請求項１】
複数の印刷装置に対して共通に利用可能な共通プリンタドライバを、前記いずれかの印刷装置に対して設定する場合に、該印刷装置の種類を識別可能な識別情報を取得する第１取得手段と、
前記第１取得手段により取得された前記識別情報を用いて該印刷装置に対応する拡張プログラムを取得する第２取得手段と、
前記第２取得手段により取得された前記拡張プログラムをインストールするインストール手段と、
前記共通プリンタドライバが設定されている印刷装置ごとに、該印刷装置に対応する前記拡張プログラムを関連付ける情報を登録する登録手段と、
前記共通プリンタドライバが設定されている印刷装置に関する制御を行う場合に、前記登録手段に登録された情報を用いて該印刷装置に対応する拡張プログラムの起動を制御する制御手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記登録手段は、オペレーティングシステムの設定を管理する領域に、前記情報を登録することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１取得手段は、前記印刷装置の識別情報を該印刷装置から取得し、
前記第２取得手段は、ネットワークを介して、前記拡張プログラムを取得することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記共通プリンタドライバを前記いずれかの印刷装置に対して設定する場合に、前記共通プリンタドライバを前記印刷装置に対して設定するための設定情報を、印刷装置ごとの格納領域に格納し、
前記登録手段は、前記共通プリンタドライバが設定されている印刷装置ごとに、前記格納領域の情報も登録することを特徴とする請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第２取得手段は、前記設定情報も取得することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記印刷装置ごとの格納領域には、前記共通プリンタドライバの構成要素のうち、各印刷装置で重複するものを除いたものが格納されることを特徴とする請求項４又は５に記載の情報処理装置。
【請求項７】
情報処理装置の制御方法であって、
複数の印刷装置に対して共通に利用可能な共通プリンタドライバを、前記いずれかの印刷装置に対して設定する場合に、該印刷装置の種類を識別可能な識別情報を取得する第１取得ステップと、
前記第１取得ステップで取得された前記識別情報を用いて該印刷装置に対応する拡張プログラムを取得する第２取得ステップと、
前記第２取得ステップで取得された前記拡張プログラムをインストールするインストールステップと、
前記共通プリンタドライバが設定されている印刷装置ごとに、該印刷装置に対応する前記拡張プログラムを関連付ける情報を登録する登録ステップと、
前記共通プリンタドライバが設定されている印刷装置に関する制御を行う場合に、前記登録された情報を用いて該印刷装置に対応する拡張プログラムの起動を制御するステップと、
を有することを特徴とする情報処理装置の制御方法。
【請求項８】
コンピュータを、請求項１〜６のいずれか１項に記載の手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法、及びプログラムに関する。
【背景技術】
【０００２】
プリンタドライバを利用し、印刷装置に対して印刷データを送信する構成が一般に知られる。ホストコンピュータには、基本ソフトウェアであるオペレーティングシステム（OS）がインストールされている。プリンタドライバは、そのOSの規定する仕様に従って構成され、OSから呼び出されて動作する。
【０００３】
印刷装置を提供するベンダは、OSの仕様に適合する印刷装置に適したプリンタドライバを提供することにより、そのOSを用いてプリンタに印刷を指示する機能を提供することができる。
【０００４】
OSとしてMicrosoft（登録商標）のWindows（登録商標）8より前のバージョンを利用する場合、プリンタドライバは、V3プリンタドライバと呼ばれるアーキテクチャで構成される。V3プリンタドライバは、ユーザからの要求が発生したタイミングでUI（User Interface）を表示し、何らかの操作をユーザに促すような機能を提供することができる。
【０００５】
また、近年、Windowsにおいて、V4プリンタドライバと呼ばれるアーキテクチャが登場している。V4プリンタドライバは、セキュリティ性が重視されているため、プリンタドライバそのもののカスタマイズ性がV3プリンタドライバと比較して低下している。例えば、前述のコンフィグレーションモジュールは、OSにより提供され、印刷装置を提供するベンダは、その動作をカスタマイズする設定ファイルやスクリプトファイルのみを提供可能である。
【０００６】
このようなカスタマイズ性の低下を補うため、印刷装置を提供するベンダは、プリンタドライバの機能を補助するための専用のアプリケーションを提供することができる。このアプリケーションはUWP Device Apps（Universal Windows Platform Device Apps）と呼ばれる。
【０００７】
UWP Device Appsでは、デバイスステージと呼ばれるドライバのHardware IDとUWP Device AppsのIDを内包するメタデータを、印刷装置を提供するベンダがドライバ毎に提供する。これにより、UWP Device Appsとドライバを関連付けることができる。
【０００８】
UWP Device Appsは、Workflow（WF）と呼ばれる機能や、PirntPreferenceと呼ばれる機能を備えることが可能である。WFは、所定のユーザ操作などを契機としてプリントに関する処理を実行させる機能を示す。PirntPreferenceは、プリンタ固有の印刷設定を設定する機能を示す。
【０００９】
また、機能が異なる複数種類の印刷装置を制御するためのプリンタドライバとして、ユニバーサルプリンタドライバと称されるプリンタドライバが知られている（特許文献１）。当該プリンタドライバでは、機種やモデル毎に個々の印刷装置に好適な操作画面を表示することができる。
【００１０】
さらに、印刷装置を提供するベンダが提供するプリンタドライバを使用せずに、印刷装置に対して印刷データを送信できるようにすることが考えられている。例えば、Ubuntu（登録商標）17.04では、OSのデフォルト機能として、IPP Everyware（登録商標）に対応する印刷装置に対して印刷データを送信する仕組みが搭載されている。IPP Everywareは、様々な印刷装置を提供するベンダやブランドの印刷装置を使用した印刷を可能とする一連の規格であり、業界団体などで規格の策定や普及活動が行われている。
【００１１】
特許文献１に開示されているようなユニバーサルプリンタドライバは、印刷装置を提供するベンダ毎に提供されている。従って、同じ印刷装置を提供するベンダが販売している機能が異なる複数種類の印刷装置については、１つのユニバーサルプリンタドライバで対応することができた。
【００１２】
しかし、異なった印刷装置を提供する複数のベンダの印刷装置を、１つのユニバーサル7プリンタドライバで対応することは困難であった。これは、個々のベンダ毎に、各々異なる通信方式、PDL（ページ記述言語）やJDL（ジョブ記述言語）で印刷データのやり取りを行っているため、統一することが難しいといった事情に起因する。また、個々のベンダ毎にPDLやJDLに独自の拡張を行っているため統一して動作させることが難しいといった事情にも起因する。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１５−１３５６５８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
前述したようにIPP Everywareなどに代表されるIPPに準拠する仕組みを使用した共通のプリンタドライバやプリントクライアントを提供することが近年考えられている。しかしながら、ＩＰＰに準拠する共通のプリンタドライバを提供する場合、ベンダが独自に提供する機能を利用することが難しいという問題がある。
【００１５】
また、前述したように、V4印刷アーキテクチャなどでは、カスタマイズ性の低下を補うために、プリンタドライバの機能を補助するための専用のアプリケーションを提供する仕組みが知られている。しかし、従来の関連付け方法では、１つのプリンタドライバに対して１つの専用アプリケーションを紐付ける手法しか考えられていなかった。このため、従来の方法では、上記共通のプリンタドライバに対し、個々のプリンタに応じた複数のUWP Device Appsを関連付けることができないという問題がある。
【００１６】
本発明は、上記の課題を解決するためになされたものである。本発明は、共通プリンタドライバに対して個々のプリンタに応じた拡張プログラムを適切に関連付けることができる仕組みを提供することを目的とするものである。また、本発明の別の目的は、共通プリンタドライバを使用する際の印刷の利便性を高める仕組みを提供することを目的の１つとする。
【課題を解決するための手段】
【００１７】
本発明は、複数の印刷装置に対して共通に利用可能な共通プリンタドライバを、前記いずれかの印刷装置に対して設定する場合に、該印刷装置の種類を識別可能な識別情報を取得する第１取得手段と、前記第１取得手段により取得された前記識別情報を用いて該印刷装置に対応する拡張プログラムを取得する第２取得手段と、前記第２取得手段により取得された前記拡張プログラムをインストールするインストール手段と、前記共通プリンタドライバが設定されている印刷装置ごとに、該印刷装置に対応する前記拡張プログラムを関連付ける情報を登録する登録手段と、前記共通プリンタドライバが設定されている印刷装置に関する制御を行う場合に、前記登録手段に登録された情報を用いて該印刷装置に対応する拡張プログラムの起動を制御する制御手段と、を有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、共通プリンタドライバに対して個々のプリンタに応じた拡張プログラムを適切に関連付けることができる。従って、共通プリンタドライバを使用する際の利便性を高めることができる。
【図面の簡単な説明】
【００１９】
【図１】本実施形態の印刷システムの一例を示す図。
【図２】本実施形態のクライアントコンピュータのハードウェア構成図。
【図３】本実施形態のクライアントコンピュータのソフトウェア構成図。
【図４】プリンタ、OS共通プリンタドライバとプリント拡張アプリの関係を示す図。
【図５】OS共通プリンタドライバのインストール処理のフローチャート。
【図６】印刷イベントが発生したことに応じて実行される処理のフローチャート。
【図７Ａ】印刷時アプリ起動処理（WF機能の起動処理）のフローチャート。
【図７Ｂ】印刷時アプリ起動処理（WF機能の起動処理）のフローチャート。
【図８】印刷時起動UI部によって表示される画面の一例を示す図。
【図９Ａ】印刷を行うための画面について説明する図。
【図９Ｂ】印刷を行うための画面について説明する図。
【図１０】認証プリントの設定がなされたPrintTicketの一例を示す図。
【図１１】プリンタの能力情報PrintCapabilitiesの一例を示す図。
【図１２】第１実施形態におけるレジストリの記載内容の一例を示す図。
【図１３】第１実施形態においてOS共通プリンタドライバが複数のプリンタに対してインストールされた場合の構成を例示する図。
【図１４Ａ】詳細印刷設定UI部を表示する処理のフローチャート。
【図１４Ｂ】詳細印刷設定UI部を表示する処理のフローチャート。
【図１５】第２実施形態においてOS共通プリンタドライバが複数のプリンタに対してインストールされた場合の構成を例示する図。
【図１６】第２実施形態におけるレジストリの記載内容の一例を示す図。
【発明を実施するための形態】
【００２０】
以下、本発明を実施するための実施形態について図面を用いて説明する。なお、以下の実施の形態は特許請求の範囲に係る発明を限定するものでなく、また実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
本実施の形態では、オペレーティングシステム（OS）としてMicrosoft社のWindows8以降のバージョンで導入されたversion 4 (V4)と呼ばれるプリンタドライバのアーキテクチャのプリンタドライバを例に説明する。以下、このプリンタドライバを「V4プリンタドライバ」又は「V4ドライバ」という。また、本実施の形態では、OSの機能等として提供される、複数のプリンタベンダが提供するプリンタに対して共通して利用可能なプリンタドライバ（以下「OS共通プリンタドライバ」）について説明する。このOS共通プリンタドライバもV4ドライバ形式とする。ただし、本発明は、これらに限定されるものではない。
【００２１】
＜第１実施形態＞
まず図１を用いて、本発明に係る印刷システムの構成を説明する。
図１は、本発明の一実施形態を示す情報処理装置を含む印刷システムの一例を示す図である。本実施形態の印刷システムは、クライアントコンピュータ101、サーバ104、プリンタ102、プリンタ105を備える。各装置は、Wide Area Network（WAN）を含むネットワーク103を通じて相互に通信可能である。ネットワーク103は、有線でも無線でもよい。
【００２２】
クライアントコンピュータ101は、本実施形態の情報処理装置に対応し、例えばパーソナルコンピュータ（PC）等で構成される。プリンタ102やプリンタ105に対してページ記述言語（PDL：Page Description Language）形式の印刷データを送信可能である。
【００２３】
サーバ104は、クライアントコンピュータ101へ対してデータを配信可能である。
プリンタ102は、ページ記述言語形式の印刷データを受信し印刷を行う印刷装置（画像形成装置）である。プリンタ105は、プリンタ102と同様にページ記述言語形式の印刷データを受信し印刷を行うものである。例えばプリンタ102とプリンタ105とは異なるベンダにより提供されているプリンタである。
【００２４】
なお、プリンタ102及びプリンタ105は、印刷機能のみを備えるシングルファンクションプリンタ（SFP）でも、印刷機能、スキャン機能及び複写機能を備えるマルチファンクションプリンタ（MFP）でもよい。また、プリンタは１台でも３台以上あってもよい。さらに、プリンタとクライアントコンピュータ101は、ネットワーク以外の方法で接続されていてもよい。例えば、プリンタとクライアントコンピュータ101とは、USB接続等されていてもよい。
【００２５】
また、クライアントコンピュータ101は、ネットワーク103に対し一台に限らず、複数台接続されていてもよい。クライアントコンピュータ101は、プリンタ102などに印刷データを送信することができる。
【００２６】
図２は、図１のクライアントコンピュータ101のハードウェア構成を示すブロック図である。
クライアントコンピュータ101は、制御部200を有する。制御部200は、CPU（Central Processing Unit）、RAM（Random Access Memory）202、外部メモリ209、ROM（Read Only Memory）203等を有する。制御部200は、クライアントコンピュータ101全体の動作を制御する。
【００２７】
CPU201は、ROM203又は外部メモリ209に記憶されたプログラムをRAM202に展開し、それを実行してUI（ユーザインタフェース）画面の制御や印刷データの生成、印刷データの転送などの各種制御を行う。ROM203は、CPU201で実行可能な制御プログラムやブートプログラム等を格納する。RAM202は、CPU201の主記憶メモリであり、ワークエリア又は各種プログラムを展開するための一時記憶領域として用いられる。
【００２８】
外部メモリI／F208を介して制御部200に接続される外部メモリ209は、OS210、アプリケーション212、アプリケーション実行環境213、プリンタドライバ211などを記憶する。本実施形態では、外部メモリ209としてHDD（Hard Disk Drive）等の補助記憶装置を想定しているが、HDDの代わりにSSD（Solid State Drive）などの不揮発性メモリを用いるようにしてもよい。このように、CPU201、ROM203、RAM202、外部メモリ209等のハードウェアは、いわゆるコンピュータを構成している。
【００２９】
操作入力装置I／F204は、キーボードやポインティングデバイス（例えばマウス）、タッチ入力デバイスなどの操作入力装置205を制御するインタフェースである。操作入力装置205は、ユーザからの操作を受け付ける受付部として機能する。
ディスプレイI／F206は、ディスプレイ207への画面の表示を制御する。ディスプレイ207は、ユーザに対して情報を表示する表示部として機能する。
【００３０】
制御部200は、ネットワークI／F214を介してネットワーク103に接続される。ネットワークI／F214は、ネットワーク103を介してプリンタに印刷データを送信したり、ネットワーク103を介してサーバ104等から、ストアアプリケーションやプリンタドライバなどを受信したりすることができる。なお、ネットワーク103を介した外部端末とのデータ通信は、例えばIEEE802.11シリーズに準拠する無線通信やLTEや5Gなどの移動通信システムや、LANケーブルなどの有線ケーブルを介した通信である。
【００３１】
続いて、クライアントコンピュータ101のソフトウェア構成について説明する。
図３は、クライアントコンピュータ101のソフトウェア構成の一例を示す図である。なお、図３に示すソフトウェア構成は、クライアントコンピュータ101のCPU201が外部メモリ209等に格納されるプログラムをRAM202にロードして実行することにより実現される。
【００３２】
図３に示すように、クライアントコンピュータ101内のソフトウェアは、OS210、アプリケーション実行環境213、アプリケーション212の３つの層を有する。
【００３３】
まず、OS210に含まれる個々の要素について説明する。
OS210は、プリンティングシステム337、プリンタドライバ211、外部設定ファイル群352、スレッドプール355を有する。
【００３４】
まず、外部設定ファイル群352について説明する。
外部設定ファイル群352には、メタデータ（Metadata）320、レジストリ353が含まれる。
メタデータ320は、プリント拡張アプリ300のプリント拡張アプリ識別子と、プリンタベンダ提供のプリンタドライバのプリントキュー308のHWID（HardwareId）という双方の識別子を持つ定義情報であり、各々を関連付ける役割を持つ。プリント拡張アプリ300は、プリンタベンダが提供する、プリンタドライバの機能を補助するための拡張プログラムであり、ベンダごと又は機種ごと等の専用のアプリケーションである。
【００３５】
なお、メタデータ320では、プリンタドライバと複数のプリント拡張アプリ300とを１対多で関連付けることはできない。OS共通プリンタドライバは、複数のプリンタで印刷可能なため、複数のプリント拡張アプリ300と関連付けることが必要な場合がある。しかし、メタデータ320を用いた方法では、OS共通プリンタドライバと複数のプリント拡張アプリ300とを関連付けることはできない。本実施形態では、レジストリ353等を用いて、OS共通プリンタドライバと複数のプリント拡張アプリ300とを関連付ける方法について説明するが、詳細は後述する。
【００３６】
レジストリ353は、OS210の設定群が記述された領域である。レジストリ353では、Key And Value方式で値を記載することができ、プリントキュー毎の設定などを記述することができる。レジストリ353には、印刷時起動アプリランチャ350によるバックグラウンドタスクの起動を有効とするか無効とするかを示すポリシーの設定や、プリンタドライバに関連づくプリント拡張アプリ300の識別子などが登録される。詳細は、図１２を用いて後述する。なお、当該レジストリ353に登録されている設定は、OS210の設定画面を介して変更可能である。
【００３７】
続いてプリンティングシステム337を構成する要素について説明する。
プリントキュー308は、ネットワーク103内に存在するプリンタを使用して印刷を行う際に、印刷ジョブを一時的に保存する領域であり、複数個存在することができる。後述する図１２に示す例では、後述する図５に示すMFP501、MFP502に対応するプリントキュー308が作成されているものとする。
【００３８】
スプーラ325は、アプリケーション212のいずれかから印刷された印刷対象データであるXPS（XML Paper Specification）ファイルを一時的に保存及び管理するモジュールである。スプーラ325に保存されたXPSファイルは、フィルタパイプラインマネージャ335を通して、PDL（Page Description Language）に変換された後に、スプーラ325を通じてプリンタへと送信される。
【００３９】
フィルタパイプラインマネージャ335は、１以上のフィルタ330をロードして、XPSファイルをPDLファイルへと変換するモジュールである。フィルタパイプラインマネージャ335は、OS210が提供する印刷アーキテクチャ（「印刷システム」とも呼ぶ）の一部として構成されている。OS210は、フィルタコンフィグ336の定義に基づき、プリンタドライバ211を構成する要素の一つである１以上のフィルタ330を読み込み、当該１以上のフィルタを使用してPDLを生成する。PDLには、例えば、PCL（Printer Controll Language）、PS（Post Script）、PDF（Portable Document Format）などを採用することができる。
【００４０】
コンフィグレーションモジュール331は、PrintTicket（「プリントチケット」とも呼ぶ）の生成、変更を行うモジュールである。また、コンフィグレーションモジュール331は、組み合わせることができない設定が行われないよう制限する禁則機能を有する。また、コンフィグレーションモジュール331は、プリンタの能力情報であるPrintCapabilitiesを管理する。
【００４１】
後述する、プリント拡張アプリ300の詳細印刷設定UI部304、印刷時起動バックグラウンドタスク部305及び印刷時起動UI部303は、コンフィグレーションモジュール331が提供するAPIを呼び出すことができる。これら各部は、当該APIを呼び出すことで、XML（Extensible Markup Language）形式のPrintTicketやPrintCapabilitiesを取得することができる。
【００４２】
また、V4プリンタドライバは、プリンタドライバ211として、禁則ルールやデバイスの機能が記述されたデバイス機能テキストファイル332や、スクリプトファイル333をOS210に提供する。コンフィグレーションモジュール331の動作は、デバイス機能テキストファイル332、スクリプトファイル333に基づき、カスタマイズされる。
【００４３】
印刷時起動アプリランチャ350は、印刷時起動バックグラウンドタスク部305などが提供するバックグラウンドタスクの実行を制御するモジュールである。印刷時起動アプリランチャ350は、ユーザにより印刷開始指示が入力されたことをOS210が検知し、印刷を行う場合に、印刷時起動バックグラウンドタスク部305を起動する。なお、レジストリ353にバックグラウンドタスクの起動を無効とする設定（ポリシーがOFF）が記憶されている場合、OS210は、バックグラウンドタスクの実行を抑制する。
【００４４】
プリンタドライバ211は、フィルタ330、フィルタコンフィグ336、スクリプトファイル333、デバイス機能テキストファイル332、INF361等で構成され、ドライバ格納領域370に保存されている。本実施形態では、プリンタドライバとして、複数ベンダのプリンタをサポートするOS共通プリンタドライバ500がインストールされているものとして説明する。当該OS共通プリンタドライバ500は、OS210の標準機能として組み込まれたクラスドライバであってもよいし、別途ユーザがコンピュータ１００に対してインストール可能なユニバーサルプリンタドライバであってもよい。
【００４５】
フィルタ330は、フィルタパイプラインマネージャ335によって呼び出されるフィルタであり、入力されたXPSファイルをPDLへと変換して出力する機能を有している。
フィルタコンフィグ336は、フィルタパイプラインマネージャ335が参照する定義ファイルであり、１以上のフィルタ330を呼び出す順序が記述されている。
【００４６】
スクリプトファイル333とデバイス機能テキストファイル332は、コンフィグレーションモジュール331によって呼び出されるファイルであり、コンフィグレーションモジュール331の動作をカスタマイズできる。
INF361は、プリンタドライバ211をインストールするための設定情報が記載されたテキストファイルである。
【００４７】
スレッドプール355は、各種アプリケーション212やOS210内のモジュール群が実行される際に利用されるスレッドを格納するモジュールである。
【００４８】
アプリケーション実行環境213は、デスクトップアプリ実行環境323、タッチアプリ実行環境301から構成される。
タッチアプリ実行環境301は、後述するアプリケーション212の一種であるOS210上で動作するタッチアプリ321や、プリント拡張アプリ300を実行するための実行環境である。
タッチアプリ実行環境301は、サーバ104から配布されたUWPアプリケーション（UWP Device Apps）を動作させるための実行環境であり、UWPアプリケーションの実行を制御する。プリント拡張アプリ300も、UWP Device Appsに対応する。
【００４９】
デスクトップアプリ実行環境323は、後述するアプリケーション212の一種であるデスクトップアプリ322を実行するための実行環境である。デスクトップアプリ実行環境323は、例えば「Win32/64アプリケーション」や「.NETアプリケーション」などの実行を制御する。
【００５０】
アプリケーション212は、例えば、タッチアプリ321、プリント拡張アプリ300、デスクトップアプリ322の三種類のアプリケーションで構成される。タッチアプリ321は、タッチアプリ実行環境301で動作するアプリケーションである。タッチアプリ321は、インターネット上で公開されるアプリケーション配布システムを通じて、ダウンロードされ、クライアントコンピュータ101にインストールされる。タッチアプリ321は、必要なモジュール群がパッケージ化して署名されており、OS210内のAPIの呼び出しが、デスクトップアプリ322と比較して制限されている。
【００５１】
プリント拡張アプリ300は、タッチアプリ321の一種であり、タッチアプリ321と同様にタッチアプリ実行環境301の上で動作する。プリント拡張アプリ300は、OS210がアプリケーション配布システムからインターネットを経由して取得される。また、本実施形態のプリント拡張アプリ300は、印刷時に独自にカスタマイズしたUIを表示させる印刷時UI表示機能を持つ。プリント拡張アプリ300は、メタデータ320を介してプリンタベンダが提供するプリンタドライバと関連づくことができる。また、プリント拡張アプリ300は、OS共通プリンタドライバ500と関連づく場合には、INF361やレジストリ353を用いて関連づけされる。詳細は図４を用いて後述する。
【００５２】
プリント拡張アプリ300は、タイルアプリ部302、詳細印刷設定UI部304、印刷時起動バックグラウンドタスク部305、印刷時起動UI部303を有する。
タイルアプリ部302部は、拡張アプリ300を起動するユーザ操作を受け付けたことに従って実行されるUI部であり、登録されたプリンタのステータス表示などの機能を提供する。
【００５３】
詳細印刷設定UI部304は、OS210によって発行された詳細印刷設定イベントを受信したことに従って実行されるUI部である。詳細印刷設定UI部304は、コンフィグレーションモジュール331からAPIを通じて取得したPrintTicketとPrintCapabilitiesに基づき印刷設定用のUIを生成して表示する。詳細印刷設定UI部304は、ユーザ操作に従って、適宜、PrintTicketの設定を変更し、コンフィグレーションモジュール331に返却する。
【００５４】
印刷時起動バックグラウンドタスク部305は、印刷イベントが発行された際に実行すべきバックグラウンドタスクに対応するコンポーネントである。
【００５５】
印刷時起動バックグラウンドタスク部305は、コンフィグレーションモジュール331のAPIを通じてPrintTicketの取得や読み書きをすることができる。WF機能を利用する場合、バックグラウンドタスクにより、印刷時起動UI部303を起動するか否かを判断し、必要に応じてフォアグラウンドタスクのコンポーネントである印刷時起動UI部303の起動をOS210に要求することが既定されている。これにより、例えば、認証プリントのパスワード入力画面（後述する図８（ｂ）等）が表示される。印刷時起動バックグラウンドタスク部305は、アプリストア334に変更した値を読み書きすることで、印刷時起動UI部303と値の受け渡しをすることができる。印刷時起動UI部303を起動しないと判断すると場合は、印刷時起動アプリランチャ350は、プリント拡張アプリ300を起動することなく印刷データの生成を行う。
【００５６】
バックグラウンドタスクにより起動された印刷時起動UI部303は、印刷対象のデータとなるXPSやPrintTicketを編集して、OS210に返すことができる。
バックグラウンドタスクによってOS210に対して起動要求が行われると、OS210は、印刷時起動UI部303を起動する。印刷時起動UI部303は、PrintTicketやPrintCapabilitiesの取得と設定の変更ができる他に、印刷対象のデータのXPSファイルを取得することができる。XPSファイルの変更を行う場合には、一度、アプリストア334を通じて編集後のXPSファイルを印刷時起動バックグラウンドタスク部305に渡し、印刷時起動バックグラウンドタスク部305が編集したXPSファイルをOS210に返す必要がある。本実施形態において、印刷時起動UI部303は、印刷に関する確認を行うためのUIや、未入力の設定をユーザに入力させるためのUIなど（例えば後述する図８（ｂ）に示すパスワード入力画面等）を表示するものとする。
【００５７】
設定ファイル362は、プリント拡張アプリ300の設定値が記述されているファイルである。プリント拡張アプリ300を一意に示すプリント拡張アプリ識別子や、利用するカスタム設定ファイルが記載されている。
カスタム設定ファイル363は、プリント拡張アプリ300がプリンタドライバに対して利用できるサービスの設定を記載した設定ファイルである。
【００５８】
次に、OS共通プリンタドライバとプリント拡張アプリ300の関係について説明する。
図４は、プリンタ、OS共通プリンタドライバ500とプリント拡張アプリ300の関係の一例を表す図である。
図５は、OS共通プリンタドライバ500とプリント拡張アプリ300とを関連付ける処理の一例を示すフローチャートである。図５、後述する図６、図７Ａ、図７Ｂ、図１４Ａ及び図１４Ｂの処理は、CPU201が外部メモリ209等に格納される各モジュール、コンポーネント、アプリケーションを実現するためのプログラムをRAM202にロードして実行することにより実現される。各制御モジュール、コンポーネント、アプリケーションによって提供される制御を説明する場合、CPU201によって実現される各部を主語として説明する。また、表示、ユーザ操作の受け付け、及びデータ送受信処理などの一部処理は、CPU201、各I／F及び、I／Fに接続された入出力デバイスが協働して実現するものとする。
【００５９】
図４において、MFP501（例えばプリンタ102に対応）とMFP502（例えばプリンタ105に対応）は、それぞれデバイスの種類を識別可能な識別情報としてHWIDやCOID（Compatible ID）を持つ。
OS共通プリンタドライバ500は、印刷を行うための基本的な機能に関するフィルタ3300などが記載された基本ドライバINF505を持つ。なお、OS共通プリンタドライバ500が生成するPDLは、PCL、PSに限らず、PDFやPWG Rasterなど標準化されている言語ならば、どの形式であってもよい。また、本実施形態では、OS共通プリンタドライバ500とプリンティングシステム337とが、協働し、所定の印刷プロトコルに則する印刷ジョブを生成し、各プリンタに印刷ジョブを送信できるものとする。例えば、所定の印刷プロトコルは、IPP(Internet Printing Protocol)などである。
【００６０】
例えば、後述する図９Ｂ（ａ）に示す「プリンターを追加」924が押下された場合、OS210は、図５に示すフローチャートの処理を開始する（S500）。なお、ここでは一例として、印刷設定画面からOS共通プリンタドライバ500で使用するプリンタを追加する場合を例示しているがこれに限定されるものではない。例えば、また、OS210が提供するプリンタを管理するための制御画面を介してOS共通プリンタドライバで使用するプリンタを追加することもできる。
OS210は、まず、ネットワーク103内にマルチキャストで問い合わせを行い、印刷可能なプリンタの応答を待つ（S501）。本実施例では、MFP501とMFP502が応答したとする。
OS210は、ネットワーク103内のプリンタ群から応答を受け取り、リスト等のUIを表示する（S502）。なお、本実施形態ではキー924を押下した場合に探索処理が行われる場合を例示しているがこれに限定されるものではない。例えば、印刷前に出力先のプリンタを選択するための画面が表示されたことに従って、セットアップ済みのプリンタと検索で見つかったがセットアップを行っていないプリンタの両方を一覧表示するようにしてもよい。この場合、セットアップ済みのプリンタと、セットアップを行っていないプリンタを区別可能に表示するようにしてもよい。表示後に、OS210は、ユーザ操作を受け付ける（S503）。
【００６１】
ユーザ操作を受け付けた後に、OS210は、該ユーザ操作で指定されたプリンタで印刷できるようにOS共通プリンタドライバ500のインストールを行い、レジストリ353にポートを設定する（S504）。ここでは、説明のため、S503で「MFP501」を指定するユーザ操作が受け付けられたものとする。この場合、S504のインストール処理では、S503で選択されたプリンタに対応する図１３に示すドライバ格納領域5001を外部メモリ209内に確保する。そして、該ドライバ格納領域5001に、OS共通プリンタドライバ500のフィルタコンフィグ336、フィルタ3300、基本INF505、スクリプトファイル3330、デバイス機能テキストファイル3320をコピーする。
【００６２】
OS210は、OS共通プリンタドライバ500をインストールした後に、MFP501に再度、リクエストを出し、MFP501のHWIDもしくはCOIDを含むデバイス情報を取得する（S505）。
さらに、OS210は、上記S506で取得したHWIDもしくはCOIDを記載した拡張基本INF508を動的に生成し、基本INF505を上書き及び拡張する形でOS共通プリンタドライバ500に適用する（S506）。なお、拡張基本INFは、プリンタ毎に作成される。また、OS210は、HWID、COIDに限らず、デバイスから取得した情報を基に、OS共通プリンタドライバ500のインストール時に設定する情報を生成し、拡張基本INF508に記載してもよい。
また、OS210は、上記S506で作成した拡張基本INF508の内容をレジストリ353に書き込む（S507）。
【００６３】
次に、OS210は、上記S506で取得したHWID及びCOIDを持つ拡張INFパッケージが外部サーバ（例えばOS210の提供元が管理するサーバで、例えば図１のサーバ104）に存在するかを確認する（S508）。そして、対応する拡張INFパッケージが外部サーバに存在しないと判定した場合（S508でNoの場合）、OS210は、本フローチャートの処理を終了する（S512）。
【００６４】
一方、上記S508において、上記S506で取得したHWID及びCOIDを持つ拡張INFパッケージが外部サーバに存在すると判定した場合（S508でYesの場合）、OS210は、S509に処理を進める。S509において、OS210は、拡張INFパッケージ503を取得し、上述したドライバ格納領域5001（図１３）に対して、上書き及び拡張する形でOS共通プリンタドライバ500に適用する。
【００６５】
拡張INFパッケージ503は、拡張INF5030、スクリプトファイル3331やデバイス機能テキストファイル3321を含む。
拡張INF5030には、HWID、COID、拡張ID、プリント拡張アプリID、InterfaceID、カスタム設定ファイル識別子、スクリプトファイル3331やデバイス機能テキストファイル3321のインストール先などのインストール時の設定情報が記載される。なお、拡張IDは、拡張INFの識別子を表す。InterfaceIDは、プリント拡張アプリ300がアクセスできるInterfaceを表す。カスタム設定ファイル識別子は、プリント拡張アプリ300が内包するカスタム設定ファイルを識別できる識別子を表す。
【００６６】
ここでは、上述のS509において、プリンタベンダ独自のスクリプトファイル3331やデバイス機能テキストファイル3321がインストールされる例を示す。
スクリプトファイル3331には、プリンタベンダの独自の禁則ロジックが記載されており、デバイス機能テキストファイル3321には、プリンタ102の独自の能力情報や禁則情報が記載されている。OS共通プリンタドライバ500は、拡張INFパッケージ503内のスクリプトファイル3331やデバイス機能テキストファイル3321を使って、ドライバ格納領域5001内のスクリプトファイル3330やデバイス機能テキストファイル3320の上書き及び拡張を行う。また、拡張INFパッケージ503は拡張INF5030を内包しており、OS210は、基本ドライバINF505及び拡張基本INF508を上書き及び拡張する形で適用する。S509の処理により、OS共通プリンタドライバ500から、ベンダ独自の禁則ロジックなどを利用可能とすることができる。
【００６７】
次に、OS210は、拡張INF5030にプリント拡張アプリ識別子が存在し、且つ、その識別子が合致するプリント拡張アプリ300が上述の外部サーバに存在するか否かを確認する（S510）。すなわち、拡張INF5030内に記載されているプリント拡張アプリ識別子が記載された設定ファイル30011を有するMFPUtility506が外部サーバに存在するか否かを確認する。
【００６８】
拡張INF5030にプリント拡張アプリ識別子が存在しない、又は、その識別子が合致するプリント拡張アプリ300が上述の外部サーバに存在しないと判定した場合（S510でNoの場合）、OS210は本フローチャートの処理を終了する（S512）。
【００６９】
一方、拡張INF5030にプリント拡張アプリ識別子が存在し、且つ、その識別子が合致するプリント拡張アプリ300が上述の外部サーバに存在すると判定した場合（S510でYesの場合）、OS210は、S511に処理を進める。S511において、OS210は、拡張INF5030内のプリント拡張アプリ識別子が合致するプリント拡張アプリ（例えばMFPUtility506）を上述の外部サーバからダウンロードし、OS210内にインストールする。そして、本フローチャートの処理を終了する（S512）。なお、本実施形態では、自動的にプリント拡張アプリをインストールする場合を例示したがこれに限定されるものではない。例えば、S510でYesと判定された場合に、プリント拡張アプリをインストールするかどうかをユーザに問い合わせるようにしてもよい。
【００７０】
以上の処理により、OS共通プリンタドライバ500とMFP501に対応するプリント拡張アプリとを関連付けすることができる。以上、MFP501の例を示したが、MFP501の拡張基本INF508、拡張INFパッケージ503とMFPUtility506が存在する状態で、MFP502などの他のプリンタ用のOS共通プリンタドライバ500をインストール可能である。この場合、拡張基本INF、拡張INFとプリント拡張アプリは、別々に管理された状態で（例えば図１３に示すドライバ格納領域5002のように）、OS210内にインストール可能である。図４では、OS共通プリンタドライバ500、MFP502、拡張基本INF510、拡張INFパッケージ513とMFP502用プリント拡張アプリが関連づいている状態も示している。このように、OS共通プリンタドライバと複数のプリント拡張アプリとを関連付けすることができる。
【００７１】
ここで図１３を用いて、OS共通プリンタドライバが複数のプリンタに対してインストールされた場合の構成を説明する。
図１３は、第１実施形態においてOS共通プリンタドライバが複数のプリンタに対してインストールされた場合の構成の一例を説明する図である。ここでは、図４で示したMFP501とMFP502に対し印刷ジョブを出力する共通プリンタドライバがインストールされた場合について説明する。
【００７２】
まず、MFP501に対してOS共通プリンタドライバ500がインストールされるとする。この際、まずフィルタコンフィグ336、フィルタ3300、基本INF505、スクリプトファイル3330とデバイス機能テキストファイル3320が、ドライバ格納領域5001にコピーされる。さらに、拡張基本INF508が生成される。
【００７３】
次に、先述した拡張INF5030、スクリプトファイル3331とデバイス機能テキストファイル3321が外部サーバからダウンロードされ、ドライバ格納領域5001に保存される。その際、スクリプトファイル3331とデバイス機能テキストファイル3321は、スクリプトファイル3330とデバイス機能テキストファイル3320を置き換える。なお、図１３の例では置き換えた場合を示しているが、置き換えをせずにスクリプトファイル3330とデバイス機能テキストファイル3320をスクリプトファイル3331とデバイス機能テキストファイル3321を拡張する形で全て保存されていてもよい。
また、プリンタドライバ、プリントキュー、プリント拡張アプリ300を関連付けるための情報として基本INF505、拡張基本INF508、拡張INF5030の内容がレジストリ353に書き込まれる。これについては、図１２を用いて後述する。
【００７４】
次に、MFP502に対してOS共通プリンタドライバ500がインストールされるとする。この際、ドライバ格納領域5001とは別のドライバ格納領域5002にフィルタコンフィグ336、フィルタ3300、基本INF505、スクリプトファイル3330とデバイス機能テキストファイル3320がコピーされる。さらに、拡張基本INF510が生成される。拡張INFパッケージ513には、スクリプトファイルやデバイス機能テキストファイルが存在しないため、OS共通プリンタドライバ500のスクリプトファイル3330とデバイス機能テキストファイル3320のみが保存される。なお、ドライバ格納領域5001とドライバ格納領域5002は、１つのフォルダであっても、複数のフォルダであってもよい。
【００７５】
図１２は、第１実施形態におけるレジストリ353の記載内容の一例を示す図である。
レジストリ353は、プリントキュー308毎に作成される。項目1201は、キュー名属性であり、プリントキュー308の名称が記載される。項目1202は、HWID列であり、プリンタ102のHWIDが記載される。項目1203は、AppID列である。AppID列は、プリントキュー308に関連づくプリント拡張アプリ300のプリント拡張アプリ識別子が記載される。
【００７６】
項目1204は、ポリシー列であり、プリントキュー308ごとに対応するプリント拡張アプリを起動するかどうかを設定できる。項目1205は、InterfaceID列であり、拡張INFに記載されているプリントキュー308に関連づいているプリント拡張アプリ300が呼び出せるInterfaceを一意に表すIDが記載される。
【００７７】
項目1206は、カスタム設定ファイル識別子列である。カスタム設定ファイル識別子列1206には、拡張INFに記載されているカスタム設定ファイル識別子が記載される。項目1207は、ドライバ列である。ドライバ列1207には、ドライバ格納領域が記載される。このドライバ列1207の値によって、ドライバ格納領域内のファイル群とプリントキュー308毎の設定が関連づく。項目1208は、ポート列であり、プリントキュー308の印刷先のポート情報がここに記載される。
【００７８】
図１１は、印刷に使用するプリンタドライバが記憶するデバイス機能テキストファイル332に基づいて生成されたPrintCapabilitiesの一例を示す図である。
なお、図１３で示したように、デバイス機能テキストファイルは、拡張INFパッケージ内のデバイス機能テキストファイルで置き換えられる可能性がある。置き換えられた場合には、置き換えられたデバイス機能テキストファイルからPrintCapabilitiesが生成される。
【００７９】
PrintCapabilitiesは、1つのFeatureの中に、複数のOptionを持つ。
Featureは、設定可能な機能を表す。
Feature内のOptionは、選択肢を表している。
図１１に示す情報1101は、認証プリント（セキュアプリント）のFeatureとOptionを例示する。この例では、JobSecurePrintのFeatureの選択肢として、「ns0000：SecurePrint」と「ns0000：None」の２つが選択可能であることが定義されている。
【００８０】
また、図１０を用いて、認証プリントの設定がなされたPrintTicketについて説明する。
図１０は、認証プリントの設定がなされたPrintTicketの一例を示す図である。
PrintTicketには、PrintCapabilitiesで定義された設定値のいずれかが、現在の印刷設定として格納される。
情報1001は、印刷時に暗証番号の入力を求める認証プリント機能が設定されていることを示している。この例では、JobSecurePrintのFeatureで内包するOptionが「ns0000：SecurePrint」になっているので、認証プリントが「オン」に設定されていることを示している。なお、認証プリントがオンに設定されていない場合、Optionに「ns0000：None」が設定される。
【００８１】
また、情報1002に示すpsf：ParameterInitの要素は、テキスト入力の値を示している。図１０では、印刷設定画面を介して認証プリントのためにパスワード「XXXXXX」が設定されている場合が例示されている。なお、印刷設定画面を介してパスワードが設定されていない場合、コンフィグレーションモジュール331によってpsf：ParameterInitの要素を含まないPrintTicketが生成されるものとする。
【００８２】
続けて、プリンタ102を使用する印刷について図９Ａ、図９Ｂを用いて説明する。
図９Ａ、図９Ｂは、MFP501を使用する印刷について説明するための図である。
なお、本実施形態では、UWPアプリであるタッチアプリ321から印刷を行う場合を例示しているがこれに限定されるものではない。デスクトップアプリ322から印刷を行うことも可能である。
【００８３】
図９Ａは、タッチアプリ321がディスプレイ207に表示する画面の一例である。タッチアプリ321にはコンテンツを表示する領域を有している。また、メニューキー900は、メニューを表示するためのキーである。ここでは、メニューが表示されている場合が示されている。メニューには複数の選択肢が表示されており、ユーザはメニューから印刷キー901を選択することができる。
印刷キー901が選択されたことを検知すると、タッチアプリ321は、OS210に印刷ダイアログ表示の要求を依頼する。
【００８４】
図９Ｂ（ａ）は、OS210が表示する印刷ダイアログの一例を示す図である。
印刷ダイアログは、OS210によって表示される簡易的な印刷設定を行うダイアログである。印刷ダイアログは、印刷設定のための項目920と印刷指示に関する項目930を有している。ユーザは、項目920を選択して、簡易的な印刷設定を行うことができる。
【００８５】
OS210は、通常使うプリンタとして設定されているプリンタに対応するプリントキュー308に対して設定されているPrintTicketをコンフィグレーションモジュール331から取得し、印刷ダイアログ上に表示する。
【００８６】
項目921は、選択されているプリントキューの名称が表示される。ユーザはプリンタ一覧923から1つのプリンタを選択して、使用するプリンタを切り替えることができる。さらに、印刷を行いたいプリンタが表示されていなかった場合、項目924の「プリンターを追加」を押下指示することで、ネットワーク103内にマルチキャストでリクエストを送信し、探索を行うことができる。探索後に、印刷できるプリンタの一覧が表示され、ユーザが選択することで、OS共通プリンタドライバ及びプリンタベンダが提供するプリンタドライバのいずれかをインストールすることができる。なお、前述したように、プリンタ一覧923内に、インストール済みのプリンタを選択するための表示アイテムと、検索で見つかったセットアップ処理が完了していないプリンタを選択するための表示アイテムを併せて表示するようにしてもよい。
【００８７】
また、項目922は、簡易的な印刷設定で設定されている印刷設定の例であり、ユーザは項目922を選択して印刷に使用する用紙サイズを変更することができる。
また、項目931は、プリント拡張アプリ300が提供する詳細印刷設定UI部304を呼び出す場合に使用する表示アイテムである。ユーザによって項目931がクリックされることで、詳細印刷設定イベントが発生し、詳細印刷設定UI部304により図９Ｂ（ｂ）のような印刷ダイアログが表示される。なお、これ以降のプリンタドライバは、OS共通プリンタドライバ500を指し、プリント拡張アプリはMFPUtility506を指すものとして説明する。
【００８８】
項目932は、タッチアプリ321が提供するコンテンツに基づく印刷を開始する場合に使用する表示アイテムである。
OS210は、印刷ダイアログとして表示している項目932が押下されたことを検知すると、印刷イベントを発生させる。印刷イベント発生後に、タッチアプリ321はOS210と協働して印刷対象となるコンテンツ（印刷コンテンツとも呼ぶ）に基づいてXPSファイルを生成し、図６のフローチャートに示す印刷処理に進む。印刷処理における具体的な制御方法について図６及び図７に示すフローチャートを用いて後述する。
【００８９】
図９Ｂ（ｂ）は、詳細印刷設定UI部304が表示する詳細印刷設定画面の一例を示す図である。
項目950は、詳細印刷設定部であり、OS共通プリンタドライバ500から取得したPrintCapabilitiesとPrintTicketを基に生成される。これらの印刷設定は、ユーザ操作を受け付けることで変更され、項目951に示す印刷確定ボタンが押されることで確定される。確定後は、図９Ｂ（ａ）に示す印刷ダイアログへと画面遷移する。
【００９０】
図１４Ａ、図１４Ｂは、詳細印刷設定イベントが発生した場合に詳細印刷設定UI部を表示する処理の一例を示すフローチャートである。
図１４ＡのS1400において、OS210は、プリント拡張アプリ探索処理を行う。プリント拡張アプリ探索処理の詳細については図１４Ｂを用いて説明する。
【００９１】
図１４ＢのS1411にて、OS210は、ユーザによって選択されているプリントキュー308のレジストリ353の情報を読み込む。
次に、OS210は、上記S1411で読み込んだレジストリの項目1203のAppID列に値（プリント拡張アプリ識別子）が記載されているか否かを確認する。そして、プリント拡張アプリ識別子が記載されていないと判定した場合（S1412でNoの場合）、OS210は、選択されているプリントキューに関連付くプリント拡張アプリがないと判断し、S1416に処理を進める。
S1416において、OS210は、「False」を呼び出し元の処理に返す。
【００９２】
一方、プリント拡張アプリ識別子が記載されていると判定した場合（S1412でYesの場合）、OS210は、S1413に処理を進める。
S1413において、OS210は、プリント拡張アプリ識別子と一致するプリント拡張アプリを、OS210内部で全てのタッチアプリ321がインストールされている保存先で探索する。
【００９３】
次にOS210は、プリント拡張アプリ識別子と一致するプリント拡張アプリが存在しているか否かを判定する（S1414）。そして、プリント拡張アプリ識別子と一致するプリント拡張アプリが存在していないと判定した場合（S1414でNoの場合）、OS210は、プリントキューに関連付いたプリント拡張アプリ300がないと判断し、S1416に処理を進める。
【００９４】
一方、プリント拡張アプリ識別子と一致するプリント拡張アプリが存在していると判定した場合（S1414でYesの場合）、OS210は、プリントキューに関連付いたプリント拡張アプリ300があったと判断し、S1415に処理を進める。
【００９５】
S1415にて、OS210は、呼び出し元へ「True」と、起動すべきプリント拡張アプリを特定するための情報（例えば、AppID）を呼び出し元の処理に返す。
以上で、プリント拡張アプリ探索処理（S1400）を終了する。以下、図１４Ａの説明に戻る。
【００９６】
S1401において、OS210は、プリント拡張アプリ探索処理の戻り値が「True」か否かを判定する。そして、戻り値が「True」であると判定した場合（S1401でYesの場合）、OS210は、S1402に処理を進める。
【００９７】
S1402において、OS210は、起動すべきプリント拡張アプリを特定するための情報に基づきプリント拡張アプリ300を起動する。なお、本実施形態では、起動すべきプリント拡張アプリを特定するための情報の一例としてAppIDを例示したがこれに限定されるものではない。例えば、特定するための情報は、プリント拡張アプリの格納場所を示すファイルパスなどであってもよい。
【００９８】
S1403にて、プリント拡張アプリ300は、スクリプトファイル333とデバイス機能テキストファイル332から生成されたPrintTicketとPrintCapabilitiesをOS210から受け取り、詳細印刷設定UI部304を表示する。この際、OS210は、スクリプトファイル333とデバイス機能テキストファイル332の保存先を、レジストリ353を参照することで取得する。そして、OS210は、プリントキュー308に対応したスクリプトファイル333とデバイス機能テキストファイル332を取得する。
【００９９】
次にS1404において、プリント拡張アプリ300は、ユーザ操作として印刷設定の変更を受け付ける。
次にS1405において、プリント拡張アプリ300は、上記ユーザ操作により変更された印刷設定をOS210へと渡し、本フローチャートの処理を終了する。S1402乃至S1405の処理により、OS共通プリンタドライバ500を使用する場合であっても、ベンダが提供するプリント拡張アプリ300で印刷設定のためのユーザインタフェースを表示し、PrintTicketの編集を行えるようになる。例えば、ベンダはプリント拡張アプリ300として柔軟なユーザインタフェースを実装できる。従って、例えば、OS共通プリンタドライバを使用するユーザに対しても、従来ベンダが提供していたV3やV4プリンタドライバと類似する操作感を有するユーザインタフェースを提供できるようになる。
【０１００】
一方、上記S1401において、戻り値が「True」でない（「False」である）と判定した場合（S1401でNoの場合）、OS210は、S1406に処理を進める。
S1406において、OS210は、OS標準の詳細設定UIを表示する。OS標準の詳細設定は、プリント拡張アプリ300と比較して、プリンタベンダに依存しない程度の簡易的な設定しかできない特徴を持つ。S1406で表示する印刷設定は、共通プリンタドライバ500がサポートする所定の印刷プロトコル（例えば、IPP）の仕組みに基づき取得されたプリンタの能力情報（属性情報）に基づき生成されたPrintCapabilitiesや現在の印刷設定を示すPrintTicketに基づき表示される。ここでは、共通プリンタドライバ500がIPPに準拠するプリンタドライバである場合を例として詳述する。この場合、RFC2911で既定されたプリンタ属性要求操作(Get-Printer-Attributes Operations)を用いてプリンタの標準的な能力が取得される。具体的には、図５で説明したインストール処理において、共通プリンタドライバ500は、Get-Printer-Attributes Requestをユーザにより選択されたプリンタに対して送信する。続いて、共通プリンタドライバ500は、当該リクエストの応答として、ＩＰＰで既定されたプリンタの能力を示す属性情報を取得し、当該取得した属性情報ファイルをデバイス機能テキストファイルに変換し、ドライバ格納領域5001に格納する。なお、PrintTicketやPrintCapabilitiesは、図１０や図１１を用いて説明したように、当該デバイス機能テキストファイルに基づき、プリンティングシステム337によって生成される。
次にS1407において、OS210は、ユーザ操作として印刷設定の変更を受け付け、本フローチャートの処理を終了する。
【０１０１】
図６は、印刷イベントが発生したことに応じて実行される処理の一例を示すフローチャートである。なお、印刷イベントを引き起こすアプリケーションは、タッチアプリ321であっても、デスクトップアプリ322であってもよい。また、本フローチャートの処理は、OS210が印刷イベントを発生させたアプリケーション212と協働して生成したXPSファイルをスプーラ325に転送したところから始まる。XPSファイルの転送が完了すると、本フローチャートの処理が開始される。
【０１０２】
S601において、OS210は、図１４Ｂを用いて説明したプリント拡張アプリ探索処理を行う。
次にS610において、OS210は、プリント拡張アプリ探索処理の戻り値が「True」か否かを判定する。そして、戻り値が「True」でない（「False」である）と判定した場合（S610でNoの場合）、OS210は、S603に処理を進める。
【０１０３】
一方、戻り値が「True」と判定した場合（S610でYesの場合）、OS210は、S602に処理を進める。
S602において、OS210は、印刷時アプリ起動処理（WF機能の起動処理）を実行する。本処理の詳細については、図７を用いて後述する。
上記印刷時アプリ起動処理（WF機能の起動処理）に関する一連の処理が完了すると、OS210は、S603に処理を進める。
【０１０４】
S603において、OS210のフィルタパイプラインマネージャ335は、スプーラ325からPrintTicketとXPSファイルを取得する。
S604において、フィルタパイプラインマネージャ335は、フィルタコンフィグ336の定義に基づき、印刷に使用するプリンタドライバ211に対応するフィルタ330を外部メモリ209から読み出し、RAM202に展開する。
【０１０５】
次にS605において、フィルタパイプラインマネージャ335は、XPSファイルを、上記S604で展開したフィルタに入力し、フィルタによる変換処理を実行させる。なお、当該変換処理は、複数のフィルタを使用して行われてもよい。また、フィルタパイプラインマネージャ335は、変換の結果得られたPDLをスプーラ325に転送し、本フローチャートの処理を終了する。
【０１０６】
PDLが転送された後に、スプーラ325は、ネットワークI／F214と協働して、変換したPDLとPrintTicketを含む印刷ジョブをプリンタ102に送信する。一覧の処理により送信された印刷ジョブを受信したプリンタ102は、当該印刷ジョブに基づいて印刷処理を実行する。
【０１０７】
続けて図７を用いて、S602において実行されるWF機能の起動処理を具体的に説明する。
図７Ａ、図７Ｂは、印刷時アプリ起動処理（WF機能の起動処理）の一例を示すフローチャートである。
S701において、OS210は、選択されているキューに対応するレジストリ353のポリシー列（項目1204）の設定を読み込む。
【０１０８】
次にS702において、OS210は、レジストリ353のポリシー列にバックグラウンドタスクの起動を有効とする設定（ON）が記憶されているか否かを判定する。レジストリ353のポリシー列にバックグラウンドタスクの起動を有効とする設定（ON）が記憶されていない（起動を無効とする設定（OFF）が記憶されている）と判定した場合（S702でNoの場合）、OS210は、本フローチャートの処理を終了する。すなわち、一連のWF機能の起動処理をスキップし、処理を図６のS603以降に進める。
【０１０９】
一方、レジストリ353のポリシー列にバックグラウンドタスクの起動を有効とする設定（ON）が記憶されていると判定した場合（S702でYesの場合）、OS210は、S703に処理を進める。
【０１１０】
S703において、OS210は、印刷時起動アプリランチャ350を起動する。
S704において、印刷時起動アプリランチャ350は、OS210に対してプリント拡張アプリ300のコンポーネントである印刷時起動バックグラウンドタスク部305の起動要求を行う。具体的には、印刷時起動アプリランチャ350は、起動すべきプリント拡張アプリを特定するための情報（AppID）に基づき起動するプリント拡張アプリを特定する。続けて、印刷時起動アプリランチャ350は、タッチアプリ実行環境301と協働して、上記特定したプリント拡張アプリのバックグラウンドタスクを実行するコンポーネントを起動するよう制御する。本実施形態では、プリント拡張アプリ300の印刷時起動バックグラウンドタスク部305のコンポーネントが起動されるものとする。
【０１１１】
S705において、印刷時起動バックグラウンドタスク部305は、OS210に対して、フォアグラウンドタスクである印刷時起動UI部303のコンポーネントを起動するよう要求する。要求を受け付けたOS210は、スレッドプール355内のスレッドとして、プリント拡張アプリ300が提供する印刷時起動UI部303を割り当て、印刷時起動UI部303によってディスプレイ207上に画面の表示を行える状態に遷移させる。また、印刷時起動UI部303は、ユーザとのやり取りを継続するために遅延オブジェクトを取得する。印刷時起動UI部303の処理について以下、図７Ｂに示す。
【０１１２】
S706において、印刷時起動UI部303は、図８（Ａ）のようなプログレス画面をディスプレイ207上に表示する。
図８は、印刷時起動UI部303によってディスプレイ207上に表示される画面の一例を示す図であり、図８（Ａ）はプログレス画面の一例を示す。
【０１１３】
図８（Ａ）のように、プログレス画面には、801に示すプログレスリングが表示される。印刷時起動UI部303は、プログレスリング801を回し続けるなどの動きを表示することで、処理の実行中であることをユーザに示す。また、印刷時起動UI部303は、802に示す「印刷中…」などの文字列を表示し、印刷に関する処理の実行中であることをユーザに示す。
【０１１４】
図７の説明に戻る。
S707において、印刷時起動UI部303は、OS210に、UIスレッドとは非同期に実行される解析スレッドの起動を要求する。OS210は、スレッドプール355内に当該解析スレッドを割り当てる。当該解析スレッドは、PrintTicketをコンフィグレーションモジュール331から取得し、該取得したPrintTicketの解析を試みる。なお、本実施形態では、解析処理とUI制御処理を別スレッドで制御する場合を例示しているがこれに限定されるものではない。
【０１１５】
S708において、印刷時起動UI部303は、上記S707のPrintTicketの解析処理を試みた結果に基づいて、PrintTicketに認証プリント（セキュアプリント）が設定されているか否かを判定する。そして、認証プリントが設定されていないと判定した場合（S708でNoの場合）、印刷時起動UI部303は、S711に処理を進める。
【０１１６】
一方、認証プリントが設定されていると判定した場合（S708でYesの場合）、印刷時起動UI部303は、S709に処理を進める。
S709において、印刷時起動UI部303のUIスレッドは、ディスプレイ207上に表示する画面を、図８（Ｂ）のような入力画面に切り替える。
【０１１７】
図８（Ｂ）は入力画面の一例を示す図である。
図８（Ｂ）において、領域810は、認証情報を入力するためのテキストボックスを示している。ユーザは、領域810にパスワードやPINコードなどを入力する。ボタン811は、OKボタンであり、クリックなどの操作イベントを受け付けた際に、領域810に入力された認証情報を確定させるキーである。このOKボタン811は、領域810に認証情報が入力されるまでグレーアウトで表示してもよい。
キャンセルボタン812は、印刷をキャンセルする場合に使用するキーである。キャンセルキー812が押下された場合、印刷ジョブの実行が中止される。
【０１１８】
以下、図７の説明に戻る。
S710において、印刷時起動UI部303のUIスレッドは、ユーザ操作を受け付け、当該ユーザ操作に基づき、PrintTicketの設定を変更する。具体的には、入力された認証情報に基づき、図１０で例示した情報1002を書き換える。また、情報1002に相当する属性が無ければ、PrintTicketに当該属性を追加する。
また、印刷時起動UI部303は、ユーザとのやり取りが完了したことをOS210に通知するため、遅延オブジェクトを解放するメソッドを呼び出す。遅延オブジェクトが解放し、フォアグラウンドタスクの終了処理が完了すると、処理の主体がバックグラウンドタスクに遷移する。
【０１１９】
続けてS711において、印刷時起動UI部303は、バックグラウンドタスク部305に、設定が変更されたPrintTicketとXPSファイルを渡す。PrintTicketとXPSファイルを渡されたバックグラウンドタスク部305は、PrintTicketとXPSファイルをフィルタパイプラインマネージャ335に送信し、一連のWF機能に関する処理を完了する。
【０１２０】
なお図７ＡのS702にて、バックグラウンドタスクを起動しないと判定した場合、モジュール331から取得したPrintTicketと、印刷指示に応じて生成されたXPSファイルがフィルタパイプラインマネージャ335に送信されるものとする。
【０１２１】
以上のように、バックグラウンドタスクを構成するコンポーネントである印刷時起動バックグラウンドタスク部305が、OSにより呼び出されたことに応じて、フォアグラウンドタスクである印刷時起動UI部303を呼び出し、UIを表示することができる。したがって、フォアグラウンドタスクである印刷時起動UI部303が遅延オブジェクトを取得した後に、当該印刷時起動UI部303でPrintTicketを解析できるようになる。よって、バックグラウンドタスクによる処理を完遂できないことに伴って印刷処理が中止されることを抑制できるようになる。また、印刷時起動UI部303が呼び出された後に、プログレスリングなどの処理中であることを示すUIが表示される。従って、ユーザに対して処理の実行中であることを分かりやすく通知することができる。なお、図７及び図８では、印刷後にプリント拡張アプリ300が提供するユーザインタフェースの一例として認証プリント（セキュアプリント）のパスワードの入力を例示したが、これに限定されるものではない。例えば、プリント拡張アプリ300の印刷時起動UI部303は、出力前のプリントプレビューなどを提供することもできる。
【０１２２】
＜第２実施形態＞
上述した第１実施形態では、図１３に示したように、２つのドライバ格納領域に同じドライバコンポーネントがインストールされているため、ドライバの構成要素に重複部分がある。第２実施形態では、この重複部分を除いてドライバ格納領域にドライバの構成要素を保存する構成について説明する。なお、第１実施形態と同一の構成には同一の符号を付し、説明は省略する。
【０１２３】
図１５は、第２実施形態においてOS共通プリンタドライバが複数のプリンタに対してインストールされた場合の構成の一例を説明する図であり、図１２と同一のものには同一の符号を付してある。ここでは、図４で示したMFP501とMFP502に対応づけて１つのドライバがインストールされる場合について説明する。
【０１２４】
ドライバ格納領域5001は、フィルタコンフィグ336、フィルタ3300、基本INF505、スクリプトファイル3330、デバイス機能テキストファイル3320を持つ。
【０１２５】
項目15001は、MFP501向けの拡張ファイル群が入る保存領域（フォルダ）である。該フォルダでは、GUID（Globally Unique Identifier）に基づいてフォルダ名が生成され、内部に、拡張INF503、スクリプトファイル3331、デバイス機能テキストファイル3321などが保存される。
【０１２６】
項目15002は、MFP502用の拡張ファイル群が入る保存領域（フォルダ）である。該フォルダも、項目15001のフォルダと同様に、GUIDに基づいてフォルダ名が生成される。なお、MFP502用のスクリプトファイル、デバイス機能テキストファイルが存在しないため、このフォルダ内には、これらのファイルは作成されていない。なお、MFP502用の拡張ファイルが存在しない場合には、このフォルダも作成されない。
【０１２７】
図１６は、第２実施形態におけるレジストリ353の記載内容の一例を示す図であり、図１２と同一のものには同一の符号を付してある。
16001は、拡張ファイル保存先である。拡張ファイル保存先16001は、図１５で説明した項目15001や項目15002などプリントキューが利用する拡張ファイルの保存先を指示している。OS210は、必要に応じて、拡張ファイル保存先16001に記載されている保存先の情報を利用して、PrintTicketやPrintCapabilitiesを生成や禁則に必要な情報を取得する。
【０１２８】
以上の構成により、第２実施形態によれば、ドライバ格納領域に同じドライバの構成要素を重複させることなく、インストールすることが可能である。また、１つの共通プリンタドライバ500のコンポーネントに、２以上の異なるプリンタを関連付けてインストールすることができる。
【０１２９】
なお、上記各実施形態では、プリンタとクライアントコンピュータ101とがネットワークを介して接続される構成について説明したが、プリンタとクライアントコンピュータ101とがUSB等のインタフェースを介して接続される構成でも、本発明は適用可能である。この場合、図５のS501の探索処理で、USB等のインタフェースを介して接続されるプリンタも含めて探索するものとする。
【０１３０】
以上、各実施形態によれば、V4ドライバ形式のOS共通プリンタドライバに対して、個々のプリンタに応じたUWP Device Apps（プリント拡張アプリ）などの拡張アプリケーションを適切に関連付けすることができる。これにより、共通のプリンタドライバにより、各種ベンダが提供するプリンタを、その特有の機能を含めてカスタマイズ性よく制御することが可能となる。また、ユーザによって選択されたプリンタに対応する拡張アプリケーションがインストールされていない場合や、拡張アプリケーションを使用しないポリシーが設定されている場合には、OS210が提供するOS標準の設定UIに基づき印刷設定が行えるよう構成される。従って、拡張アプリケーションを提供しないプリンタが選択された場合であっても、共通プリンタドライバがサポートする所定の印刷プロトコル（例えば、ＩＰＰなど）に基づき取得したプリンタの能力に応じた印刷設定ＵＩを表示することができる。
【０１３１】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されていてもよい。例えば、各実施形態では、拡張アプリケーションや出力先のプリンタを特定するための情報を、レジストリ352に格納し、OS210が当該レジストリ352を参照して起動すべき拡張アプリケーションを決定する場合を例示しているがこれに限定されるものではない。例えば、プリンティングシステム337やプリンタドライバ211などからアクセス可能な記憶領域に図１２や図１５の関連付け情報を記憶するようにしてもよい。この場合、OS210のプリンティングシステム337が主体となり、OSの共通フレームワークやＡＰＩなどを活用して、拡張アプリケーションの起動を実現するものとする。この場合、システム全体に影響を与える可能性があるレジストリデータベースに情報を書き込む必要がなくなる。従って、システムへの影響を最小限にしつつ、プリントに関するユーザエクスペリエンスを高めることができるといった効果がある。
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
また、上記各実施形態を組み合わせた構成も全て本発明に含まれるものである。
【０１３２】
（その他の実施形態）
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路（例えば、ASIC）によっても実現可能である。
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。
本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施形態の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。即ち、上述した各実施形態及びその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【０１３３】
210    OS
300    プリント拡張アプリ
500    OS共通プリンタドライバ
501，502    MFP
503，513    拡張INFパッケージ
506，507    MFPUtility
508，510    拡張基本INF
【図１】
2020004158.tif 000003
【図２】
2020004158.tif 000004
【図３】
2020004158.tif 000005
【図４】
2020004158.tif 000006
【図５】
2020004158.tif 000007
【図６】
2020004158.tif 000008
【図７Ａ】
2020004158.tif 000009
【図７Ｂ】
2020004158.tif 000010
【図８】
2020004158.tif 000011
【図９Ａ】
2020004158.tif 000012
【図９Ｂ】
2020004158.tif 000013
【図１０】
2020004158.tif 000014
【図１１】
2020004158.tif 000015
【図１２】
2020004158.tif 000016
【図１３】
2020004158.tif 000017
【図１４Ａ】
2020004158.tif 000018
【図１４Ｂ】
2020004158.tif 000019
【図１５】
2020004158.tif 000020
【図１６】
2020004158.tif 000021