(57)【要約】【課題】コンピュータに備わるアプリケーションにデータを容易に通知することが可能なプリンタ、プログラム、およびプリンタシステムを提供すること。【解決手段】本発明は、コンピュータ１０との通信に使用される複数のエンドポイント（ＥＰ０からＥＰｘ）と、複数のエンドポイント（ＥＰ０からＥＰｘ）のうちＨＩＤ（Human Interface Device）クラスの通信に使用する少なくとも１つのエンドポイントＥＰ２からキーコードをコンピュータ１０にインタラプト転送するＣＰＵ４２と、を備えるプリンタである。【選択図】図３
2012213859.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータとの通信に使用される複数のエンドポイントと、
前記複数のエンドポイントのうちＨＩＤクラスの通信に使用する少なくとも１つのエンドポイントからキーコードを前記コンピュータにインタラプト転送する制御部と、を備えることを特徴とするプリンタ。
【請求項２】
前記キーコードは、プリンタステータスに対応したキーコードであることを特徴とする請求項１記載のプリンタ。
【請求項３】
前記キーコードを記憶する記憶部を有し、
前記制御部は、前記記憶部に記憶された前記キーコードを前記コンピュータにインタラプト転送すると共に、前記コンピュータからの指示に基づき、前記記憶部に記憶された前記キーコードを変更することを特徴とする請求項１または２記載のプリンタ。
【請求項４】
複数のエンドポイントを有するプリンタに接続され、前記複数のエンドポイントのうちＨＩＤクラスの通信に使用される少なくとも１つのエンドポイントからキーコードがインタラプト転送されるコンピュータを、
前記１つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得する取得手段、
前記取得手段で取得した前記キーコードを、記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換する変換手段、
前記変換手段で変換した前記ウィンドウメッセージを、前記記憶部に通知先として記憶されたアプリケーションに通知する通知手段、として機能させることを特徴とするプログラム。
【請求項５】
前記キーコードは、プリンタステータスに対応したキーコードであることを特徴とする請求項４記載のプログラム。
【請求項６】
前記変換手段は、前記取得手段で取得した前記キーコードを、前記キーコードに対応したキーボードイベントに変換することを特徴とする請求項４または５記載のプログラム。
【請求項７】
前記記憶部に記憶された前記通知先のアプリケーションを変更する第１変更手段、を有することを特徴とする請求項４から６のいずれか一項記載のプログラム。
【請求項８】
前記記憶部に記憶された前記ウィンドウメッセージを変更する第２変更手段、を有することを特徴とする請求項４から７のいずれか一項記載のプログラム。
【請求項９】
コンピュータと、
前記コンピュータとの通信に使用される複数のエンドポイントのうちＨＩＤクラスの通信に使用する少なくとも１つのエンドポイントからプリンタステータスに対応したキーコードを前記コンピュータにインタラプト転送するプリンタと、を備えることを特徴とするプリンタシステム。
【請求項１０】
前記コンピュータは、前記１つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得し、前記キーコードを記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換し、前記ウィンドウメッセージを前記記憶部に通知先として記憶されたアプリケーションに通知することを特徴とする請求項９記載のプリンタシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタ、プログラム、およびプリンタシステムに関する。
【背景技術】
【０００２】
コンピュータと、キーボード、マウス、及びプリンタなどの各種コンピュータ周辺機器との接続インタフェースに、ユニバーサルシリアルバス（Universal Serial Bus：ＵＳＢ）が用いられることが多い。ＵＳＢは、コンピュータ周辺機器に関するプラグ＆プレイ機能、コネクタケーブルの共通化など、ユーザの使い易さを考慮した設計になっている。
【０００３】
コンピュータとプリンタとの間では、コンピュータからプリンタへ印刷データが通信されるほか、プリンタからコンピュータへ例えばプリンタステータスのデータが通信される。特許文献１には、プリンタが有するデータ記憶領域の空き状態データをコンピュータにインタラプト転送する技術が開示されている。特許文献２には、コンピュータからのゲット・ディスクリプタに対して、製品名などのデータに続けて製品属性データを付加して送信する技術が開示されている。特許文献３には、デジタルプリンタからデジタルカメラにプリンタステータスデータをバルク転送する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−３１８７７８号公報
【特許文献２】特開２００４−２７２５７０号公報
【特許文献３】特開２００５−３１２０８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コンピュータとプリンタとがＵＳＢインタフェースを介して接続されている場合において、コンピュータとプリンタとの間の通信は一般的にバルク転送が使用される。即ち、プリンタからコンピュータに例えばプリンタステータスのデータを送信する場合にはバルク転送が使用される。コンピュータに送信されたプリンタステータスのデータは、最終的にはコンピュータの所定のアプリケーション（例えば、印刷アプリケーション）に通知されることとなる。
【０００６】
しかしながら、例えば印刷アプリケーションにプリンタステータスのデータを通知しようとすると、複雑な処理を要することになる。そこで、本発明は、このような課題に鑑みなされたものであり、アプリケーションにデータを容易に通知することが可能なプリンタ、プログラム、およびプリンタシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、コンピュータとの通信に使用される複数のエンドポイントと、前記複数のエンドポイントのうちＨＩＤクラスの通信に使用する少なくとも１つのエンドポイントからキーコードを前記コンピュータにインタラプト転送する制御部と、を備えることを特徴とするプリンタである。本発明によれば、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、コンピュータに備わるアプリケーションにデータを容易に通知できる。
【０００８】
上記構成において、前記キーコードは、プリンタステータスに対応したキーコードである構成とすることができる。
【０００９】
上記構成において、前記キーコードを記憶する記憶部を有し、前記制御部は、前記記憶部に記憶された前記キーコードを前記コンピュータにインタラプト転送すると共に、前記コンピュータからの指示に基づき、前記記憶部に記憶された前記キーコードを変更する構成とすることができる。この構成によれば、ユーザ毎の使用状況に応じたキーコードの設定ができる。
【００１０】
本発明は、複数のエンドポイントを有するプリンタに接続され、前記複数のエンドポイントのうちＨＩＤクラスの通信に使用される少なくとも１つのエンドポイントからキーコードがインタラプト転送されるコンピュータを、前記１つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得する取得手段、前記取得手段で取得した前記キーコードを、記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換する変換手段、前記変換手段で変換した前記ウィンドウメッセージを、前記記憶部に通知先として記憶されたアプリケーションに通知する通知手段、として機能させることを特徴とするプログラムである。本発明によれば、プリンタから送信されたデータを、アクティブなアプリケーションだけではなく、任意のアプリケーションに通知することができる。
【００１１】
上記構成において、前記キーコードは、プリンタステータスに対応したキーコードである構成とすることができる。
【００１２】
上記構成において、前記変換手段は、前記取得手段で取得した前記キーコードを、前記キーコードに対応したキーボードイベントに変換する構成とすることができる。
【００１３】
上記構成において、前記記憶部に記憶された前記通知先のアプリケーションを変更する第１変更手段、を有する構成とすることができる。
【００１４】
上記構成において、前記記憶部に記憶された前記ウィンドウメッセージを変更する第２変更手段、を有する構成とすることができる。
【００１５】
本発明は、コンピュータと、前記コンピュータとの通信に使用される複数のエンドポイントのうちＨＩＤクラスの通信に使用する少なくとも１つのエンドポイントからプリンタステータスに対応したキーコードを前記コンピュータにインタラプト転送するプリンタと、を備えることを特徴とするプリンタシステムである。本発明によれば、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、コンピュータに備わるアプリケーションにデータを容易に通知できる。
【００１６】
上記構成において、前記コンピュータは、前記１つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得し、前記キーコードを記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換し、前記ウィンドウメッセージを前記記憶部に通知先として記憶されたアプリケーションに通知する構成とすることができる。この構成によれば、プリンタから送信されたデータを、アクティブなアプリケーションだけではなく、任意のアプリケーションに通知することができる。
【発明の効果】
【００１７】
本発明によれば、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、コンピュータに備わるアプリケーションにデータを容易に通知できる。
【図面の簡単な説明】
【００１８】
【図１】図１は、比較例１に係るプリンタシステムの機能ブロック図の例である。
【図２】図２は、実施例１に係るプリンタシステムの全体構成を示すブロック図の例である。
【図３】図３は、実施例１に係るプリンタシステムの機能ブロック図の例である。
【図４】図４は、コンピュータとプリンタとの間のコントロール転送の通信手順を示すシーケンス図の例である。
【図５】図５は、ディスクリプタ（その１）の例である。
【図６】図６は、ディスクリプタ（その２）の例である。
【図７】図７は、プリンタステータスに対応するキーコードの送信についてのフローチャートの例である。
【図８】図８は、プリンタステータスに対応したＵＳＢキーコード、実際のキー、およびＷｉｎｄｏｗｓ（登録商標）仮想キーコードの例である。
【図９】図９（ａ）および図９（ｂ）は、プリンタステータスを通知する際に、プリンタから送信されるパケットデータの例である。
【図１０】図１０は、印刷アプリケーションでのプリンタステータス判定処理を説明するフローチャートの例である。
【図１１】図１１は、実施例２に係るプリンタシステムの全体構成を示すブロック図の例である。
【図１２】図１２は、実施例２に係るプリンタシステムの機能ブロック図の例である。
【図１３】図１３は、常駐アプリケーションで行われる制御処理を説明するフローチャートの例である。
【図１４】図１４は、常駐アプリケーション内のキーコードフックルーチンの処理を説明するフローチャートの例である。
【図１５】図１５は、常駐アプリケーションにより記憶部に記憶された内容を変更する処理を説明するフローチャートの例である。
【発明を実施するための形態】
【００１９】
まず初めに、比較例１に係るプリンタシステムを用いて、本発明が解決しようとする課題について詳細に説明する。図１は、比較例１に係るプリンタシステムを示す機能ブロック図の例である。図１のように、プリンタシステム３００は、コンピュータ７０とプリンタ８０とがＵＳＢインタフェースを介して接続している。コンピュータ７０は、印刷アプリケーション１２、ＧＤＩ（Graphics Device Interface）１４、プリンタドライバ１６、スプーラ１８、言語モニタ２０、ポートモニタ２２、ＵＳＢバルクドライバ２４、ＵＳＢドライバスタック２６、ＵＳＢホストコントローラ２８、およびドライバＡＰＩ（Application Programming Interface）７２を備えている。ドライバＡＰＩ７２は、プリンタ８０のプリンタステータスデータを印刷アプリケーション１２に通知するための専用のアプリケーションである。ＵＳＢバルクドライバ２４は、プリンタ８０との通信に用いられるプリンタ用のドライバであり、ＵＳＢドライバスタック２６は、マイクロソフト（登録商標）社のＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムで、ＵＳＢホストコントローラ２８を動かすためのドライバである。ＵＳＢホストコントローラ２８は、コンピュータ７０のインタフェースに設けられ、プリンタ８０との通信を管理する。
【００２０】
プリンタ８０のインタフェースには、複数のエンドポイント（ＥＰ０からＥＰｘ）が設けられている。エンドポイントＥＰ０はコントロール転送に使用する。エンドポイントＥＰ１は印刷データを受信するためのエンドポイントであり、コンピュータ７０からみてＯＵＴの一方向のバルク転送に使用する。エンドポイントＥＰ２は例えばプリンタステータスデータを送信するためのエンドポイントであり、コンピュータ７０からみてＩＮの一方向のバルク転送に使用する。
【００２１】
エンドポイントＥＰ２からバルク転送されたプリンタステータスデータは、ＵＳＢホストコントローラ２８、ＵＳＢドライバスタック２６、ＵＳＢバルクドライバ２４、ポートモニタ２２、言語モニタ２０を経由してスプーラ１８に渡される。このようなプリンタステータスデータを印刷アプリケーション１２に通知する方法として例えば以下の４通りの方法が考えられる。
【００２２】
一つ目の通知方法は、言語モニタ２０がポートモニタ２２に対して通信を行い、プリンタ８０から送信されるデータを常時監視し、プリンタステータスデータを取得したらドライバＡＰＩ７２を介して印刷アプリケーション１２に通知する方法である。
【００２３】
二つ目の通知方法は、ドライバＡＰＩ７２がＵＳＢバルクドライバ２４に対して通信を行い、プリンタ８０から送信されるデータを常時監視し、プリンタステータスデータを取得したら印刷アプリケーション１２に通知する方法である。
【００２４】
三つ目の通知方法は、印刷アプリケーション１２がＵＳＢバルクドライバ２４に対して通信を行い、直接プリンタ８０からのデータの監視を行い、プリンタステータスデータを取得する方法である。
【００２５】
四つ目の通知方法は、ＵＳＢバルクドライバ２４がＵＳＢドライバスタック２６に対して通信を行い、プリンタ８０からのデータを常時監視し、プリンタステータスデータを取得したらドライバＡＰＩ７２を介してあるいは直接印刷アプリケーション１２に通知する方法である。
【００２６】
これら４通りの通知方法いずれにおいても、アプリケーションやドライバなどが周期的に通信を行い、プリンタステータスデータを読みに行かなければならない。また、プリンタステータスデータを印刷アプリケーション１２に通知するための専用のアプリケーションであるドライバＡＰＩ７２を用いる場合もある。このように、プリンタステータスデータを印刷アプリケーションに通知するには複雑な処理を要する。そこで、このような課題を解決すべく、以下において、アプリケーションにデータを容易に通知することが可能な実施例を説明する。
【実施例１】
【００２７】
図２は、実施例１に係るプリンタシステムの全体構成を示すブロック図の例である。図２のように、実施例１に係るプリンタシステム１００は、コンピュータ１０とプリンタ４０とがＵＳＢインタフェースケーブル５２を介して接続されている。コンピュータ１０は、ＣＰＵ３０、ＲＯＭおよびＲＡＭからなるメモリ３２、およびＩ／Ｆ（インタフェース）３４を有する。ＣＰＵ３０は、メモリ３２に記憶された制御プログラムに従い、コンピュータ１０全体を制御する。Ｉ／Ｆ３４は、コンピュータ１０とプリンタ４０とを接続するインタフェースである。
【００２８】
プリンタ４０は、ＣＰＵ４２、ＲＯＭおよびＲＡＭからなるメモリ４４、Ｉ／Ｆ４６、フラッシュＲＯＭなどからなる記憶部４８、およびプリント部５０を有する。ＣＰＵ４２は、メモリ４４に記憶された制御プログラムに従い、プリンタ４０全体を制御する。Ｉ／Ｆ４６は、プリンタ４０とコンピュータ１０とを接続するインタフェースである。Ｉ／Ｆ４６には、後述するように複数のエンドポイントが設けられている。記憶部４８は、プリンタステータスと対応付けされたキーコードを記憶する。プリント部５０は、コンピュータ１０から送られてきた印刷データに基づいて印刷を実行する。
【００２９】
図３は、実施例１に係るプリンタシステムの機能ブロック図の例である。図３のように、コンピュータ１０は、印刷アプリケーション１２、ＧＤＩ（Graphics Device Interface）１４、プリンタドライバ１６、スプーラ１８、言語モニタ２０、ポートモニタ２２、ユーザインタフェース２３、ＵＳＢバルクドライバ２４、ＨＩＤ（Human Interface Device）ドライバ２５、およびＵＳＢドライバスタック２６を備えている。また、Ｉ／Ｆ３４に、プリンタ４０との通信を管理するＵＳＢホストコントローラ２８を備えている。
【００３０】
印刷アプリケーション１２、ＧＤＩ１４、プリンタドライバ１６、スプーラ１８、言語モニタ２０、ポートモニタ２２、およびユーザインタフェース２３はユーザモードに設けられている。ＵＳＢバルクドライバ２４、ＨＩＤドライバ２５、およびＵＳＢドライバスタック２６はカーネルモードに設けられている。カーネルモードに設けられたＵＳＢバルクドライバ２４は、プリンタ４０との通信に用いられるプリンタ用のドライバである。ＨＩＤドライバ２５は、プリンタ４０との通信に用いられるキーボード用のドライバである。ＵＳＢドライバスタック２６は、マイクロソフト（登録商標）社のＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムで、ＵＳＢホストコントローラ２８を動かすためのドライバである。
【００３１】
プリンタ４０が有するＩ／Ｆ４６には、複数のエンドポイント（ＥＰ０からＥＰｘ）が設けられている。エンドポイントＥＰ０はコントロール転送に使用する。このコントロール転送を使って、コンフィグレーションを行い、プリンタ４０の使い方の設定情報を、コンピュータ１０とプリンタ４０との間で双方向通信する。エンドポイントＥＰ１は印刷データを受信するためのエンドポイントである。エンドポイントＥＰ１は、コンピュータ１０からみてＯＵＴの一方向の通信である。転送方式としてはバルク転送を使用する。エンドポイントＥＰ２は、プリンタステータスに対応したキーコードを送信するためのエンドポイントであり、コンピュータ１０からみてＩＮの一方向の通信である。転送方式としてはインタラプト転送を使用する。
【００３２】
ここで、図４のシーケンス図を用い、コンピュータ１０とプリンタ４０との間のコントロール転送の通信手順について説明する。図４のように、コンピュータ１０とプリンタ４０とが接続された状態でプリンタ４０の電源がＯＮになった場合（ステップＳ１０）、コンピュータ１０は、プリンタ４０の電源がＯＮになったことを確認した後（ステップＳ１２）、プリンタ４０に対してゲット・ディスクリプタを転送する（ステップＳ１４）。なお、ステップＳ１０およびＳ１２は、電源ＯＮ状態のプリンタ４０が接続された場合でもよい。ゲット・ディスクリプタに対して、プリンタ４０は、メモリ４４に記憶されているディスクリプタ情報をコンピュータ１０に返送する（ステップＳ１６）。コンピュータ１０は、返送されたディスクリプタ情報に基づき、適当なドライバの準備などの設定をする（ステップＳ１８）。
【００３３】
図５および図６に、メモリ４４に記憶されたディスクリプタ情報の例を示す。図５および図６に示すディスクリプタ情報の例では、インタフェース１・ディスクリプタとエンドポイント１・ディスクリプタによって、プリンタクラスとバルク転送が指定されている。また、インタフェース２・ディスクリプタとエンドポイント２・ディスクリプタによって、ＨＩＤキーボードクラスとインタラプト転送が指定されている。これにより、コンピュータ１０は、プリンタ４０をプリンタとキーボードの２つのデバイスとして認識をし、図２および図４で説明したように、プリンタ用のドライバとしてＵＳＢバルクドライバ２４を準備し、キーボード用のドライバとしてＨＩＤドライバ２５を準備する。
【００３４】
また、インタフェース１・ディスクリプタとエンドポイント１・ディスクリプタによってプリンタクラスとバルク転送が指定されていることから、エンドポイントＥＰ１は、バルク転送された印刷データを受信するためのエンドポイントとして使用される。一方、インタフェース２・ディスクリプタとエンドポイント２・ディスクリプタによってＨＩＤキーボードクラスとインタラプト転送が指定されていることから、エンドポイントＥＰ２は、プリンタステータスに対応したキーコードをインタラプト転送で送信するためのエンドポイントとして使用される。
【００３５】
ここで、印刷アプリケーション１２で印刷処理が開始された場合に、プリンタ４０のプリント部５０で印刷されるまでの印刷処理について説明する。図３のように、印刷アプリケーション１２で印刷処理が開始されると、印刷アプリケーション１２はＧＤＩ１４を呼び出し、ＧＤＩ１４がプリンタデバイスコンテキストへ描画を行う。その後、ＧＤＩ１４はプリンタドライバ１６を呼び出し、プリンタドライバ１６はプリンタ言語に基づいてプリンタ４０で印刷可能な形の印刷データを生成する。生成された印刷データはスプーラ１８に渡される。
【００３６】
次いで、必要な場合は言語モニタ２０で処理が行われた後、ポートモニタ２２はプリンタポートの種類に合わせて印刷データの出力処理を行う。印刷データは、カーネルモードに設けられたＵＳＢバルクドライバ２４およびＵＳＢドライバスタック２６に通知された後、ＵＳＢホストコントローラ２８の管理の下でプリンタ４０にバルク転送により送信される。
【００３７】
プリンタ４０のエンドポイントＥＰ１でバルク転送された印刷データを受信した後、ＣＰＵ４２の制御の下、印刷データに基づいてプリント部５０で印刷が実行される。
【００３８】
図７は、プリンタステータスに対応したキーコードの送信について説明するフローチャートである。図７のように、プリンタ４０のＣＰＵ４２は、プリンタステータスに異常が発生し、コンピュータ１０に通知すべきプリンタステータスがあるかどうかを判断する（ステップＳ２０）。通知すべきプリンタステータスがあると判断した場合は、ＣＰＵ４２は、記憶部４８に記憶されたプリンタステータスと対応付けされたキーコードに基づき、通知すべきプリンタステータスに対応したキーコードをエンドポイントＥＰ２からコンピュータ１０に送信する（ステップＳ２２）。通知すべきプリンタステータスがないと判断した場合は、ＣＰＵ４２は、エンドポイントＥＰ２からコンピュータ１０にＮＡＫを送信する（ステップＳ２４）。エンドポイントＥＰ２における転送方式はインタラプト転送であり、インタラプト転送の動作は、エンドポイント２・ディスクリプタのＥＰ＿ｂＩｎｔｅｒｖａｌで指定した間隔［ｍｓ］でＩＮトランザクションが発生する。つまり、ＣＰＵ４２は、ＩＮトランザクションに対してプリンタステータスに対応したキーコードあるいはＮＡＫを送信する。
【００３９】
図３に戻り、エンドポイントＥＰ２から送信されたプリンタステータスに対応したキーコードは、ＵＳＢホストコントローラ２８、ＵＳＢドライバスタック２６、およびキーボード用のドライバであるＨＩＤドライバ２５を介してＷｉｎｄｏｗｓ（登録商標）に標準装備されたユーザインタフェース２３に通知される。キーコードは、ユーザインタフェース２３でキーボードイベント（ＷＭ＿ＫＥＹＤＯＷＮ／ＷＭ＿ＫＥＹＵＰのウィンドウメッセージと仮想キーコード）に変換され、キーボードイベントとして印刷アプリケーション１２に通知される。
【００４０】
ここで、図８に、プリンタステータスと対応付けされたＵＳＢキーコードの例および夫々のＵＳＢキーコードに対応する実際のキーおよびＷｉｎｄｏｗｓ（登録商標）仮想キーコードの例を示す。図８のように、プリンタステータスの例として、用紙なし、ニアエンド、マーク未検出、カバーオープン、カッタ異常、ハードウェア異常、電源電圧異常、ヘッド温度異常などが挙げられ、夫々に対してＵＳＢキーコード６Ａから６Ｆ、７０、７１が割り当てられている。ＵＳＢキーコード６Ａから６Ｆ、７０、７１は、実際のキーではＦ１５からＦ２２に対応し、ユーザインタフェース２３でＷｉｎｄｏｗｓ（登録商標）仮想キーコードに変換されると、例えばＵＳＢキーコード６ＡはＷｉｎｄｏｗｓ（登録商標）仮想キーコード７Ｅ（ＶＫ＿Ｆ１５）となる。
【００４１】
なお、プリンタステータスと対応付けされたＵＳＢキーコードとして６Ａから６Ｆ、７０、７１を割り当てた理由は、ＵＳＢキーコード６Ａから６Ｆ、７０、７１に対応する実際のキーＦ１５からＦ２２は一般的には使用されないキーであるためである。したがって、プリンタステータスとの対応付けに割り当てるＵＳＢキーコードは、６Ａから６Ｆ、７０、７１に限られる訳ではないが、通常使用されないキーに対応するＵＳＢキーコードを割り当てる場合が好ましい。
【００４２】
図９（ａ）および図９（ｂ）は、プリンタステータスを通知する際に、プリンタ４０から送信されるパケットデータの例である。図９（ａ）は、用紙なしのプリンタステータスが発生した場合および解除された場合のパケットデータの例である。図９（ｂ）は、カバーオープンと用紙なしのプリンタステータスが同時に発生した場合、カバーオープンのプリンタステータスが解除された場合、カバーオープンと用紙なしのプリンタステータスが解除された場合のパケットデータの例である。パケットデータ数は、エンドポイント２・ディスクリプタのＥＰ＿ｗＭａｘＰａｃｋｅｔＳｉｚｅによって指定されたバイト数によって行われ（実施例１では８バイト）、プリンタステータスに対応したキーコードが第３バイト目から順に格納される。したがって、図９（ａ）の用紙なしのプリンタステータスが発生した場合では、用紙なしのキーコード０ｘ６Ａが第３バイト目に格納される。図９（ｂ）のカバーオープンと用紙なしのプリンタステータスが発生した場合では、カバーオープンのキーコード０ｘ６Ｄが第３バイト目に、用紙なしのキーコード０ｘ６Ａが第４バイト目に格納される。
【００４３】
図９（ａ）に示す用紙なし発生時のパケットデータがプリンタ４０から送信され、ユーザインタフェース２３にキーコードが通知されると、ユーザインタフェース２３でキーコード０ｘ６Ａがキーボードイベントに変換され、最終的には、ＷＭ＿ＫＥＹＤＯＷＮと仮想キーコード７Ｅ（ＶＫ＿Ｆ１５）とのキーボードイベントが印刷アプリケーション１２に通知される。同様に、図９（ｂ）に示すカバーオープンと用紙なし発生時のパケットデータの場合は、ＷＭ＿ＫＥＹＤＯＷＮと仮想キーコード８１（ＶＫ＿Ｆ１８）、７Ｅ（ＶＫ＿Ｆ１５）とのキーボードイベントが印刷アプリケーション１２に通知される。
【００４４】
また、図９（ａ）のように、用紙なしのプリンタステータスが解除されると０ｘ６Ａがクリアされたパケットデータがプリンタ４０から送信され、ＷＭ＿ＫＥＹＵＰと仮想キーコード７Ｅ（ＶＫ＿Ｆ１５）とのキーボードイベントが印刷アプリケーション１２に通知される。図９（ｂ）のように、カバーオープンのプリンタステータスのみが解除された場合は、０ｘ６Ｄがクリアされ、０ｘ６Ａが第３バイト目に格納されたパケットデータが送信され、ＷＭ＿ＫＥＹＵＰと仮想キーコード８１（ＶＫ＿Ｆ１８）とが印刷アプリケーション１２に通知される。その後に、用紙なしのプリンタステータスが解除された場合は、０ｘ６Ａがクリアされたパケットデータが送信され、ＷＭ＿ＫＥＹＵＰと仮想キーコード７Ｅ（ＶＫ＿Ｆ１５）とのキーボードイベントが印刷アプリケーション１２に通知される。
【００４５】
次に、キーボードイベントが通知された場合に、印刷アプリケーション１２で行なわれるプリンタステータスの判定処理について説明する。図１０は、印刷アプリケーション１２でのプリンタステータス判定処理を説明するフローチャートの例である。図１０のように、印刷アプリケーション１２は、ウィンドウメッセージを受信すると（ステップＳ３０）、ウィンドウメッセージがＷＭ＿ＫＥＹＤＯＷＮであるかどうか判断する（ステップＳ３２）。ＷＭ＿ＫＥＹＤＯＷＮである場合（Ｙｅｓの場合）は、印刷アプリケーション１２は、仮想キーコードが７Ｅ（ＶＫ＿Ｆ１５）から８５（ＶＫ＿Ｆ２２）のいずれかであるかを判断する（ステップＳ３４）。ステップＳ３４でＹｅｓの場合は、印刷アプリケーション１２は、仮想キーコードに対応したプリンタステータスを発生させる（ステップＳ３６）。ステップＳ３４でＮｏの場合は、印刷アプリケーション１２は、ウィンドウメッセージに従った処理を実行する（ステップＳ３８）。
【００４６】
ステップＳ３２でＮｏの場合、印刷アプリケーション１２は、ウィンドウメッセージがＷＭ＿ＫＥＹＵＰであるかどうかを判断する（ステップＳ４０）。ＷＭ＿ＫＥＹＵＰである場合（Ｙｅｓの場合）は、印刷アプリケーション１２は、仮想キーコードが７Ｅ（ＶＫ＿Ｆ１５）から８５（ＶＫ＿Ｆ２２）のいずれかであるかを判断する（ステップＳ４２）。ステップＳ４２でＹｅｓの場合は、印刷アプリケーション１２は、仮想キーコードに対応したプリンタステータスを解除する（ステップＳ４４）。
【００４７】
ステップＳ４２でＮｏの場合およびステップＳ４０でＮｏの場合は、印刷アプリケーション１２は、ウィンドウメッセージに従った処理を実行する（ステップＳ３８）。
【００４８】
以上説明してきたように、実施例１によれば、プリンタ４０は、複数のエンドポイントＥＰ０からＥＰｘのうちの１つのエンドポイントＥＰ２をＨＩＤクラスの通信に使用し、プリンタステータスに対応したキーコードをインタラプト転送する。これにより、コンピュータ１０は、Ｗｉｎｄｏｗｓ（登録商標）に標準装備のＨＩＤドライバ２５とユーザインタフェース２３とを用いることで、インタラプト転送により一定周期で送信されてきたキーコードをキーボードイベントに変換でき、プリンタステータスをキーボードイベントとして印刷アプリケーション１２に通知できる。このため、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、Ｗｉｎｄｏｗｓ（登録商標）に標準装備のＨＤＩドライバ２５とユーザインタフェース２３とにより、プリンタステータスに関するデータを容易に印刷アプリケーション１２に通知できる。
【００４９】
プリンタ４０は、コンピュータ１０からのプリンタコマンドやベンダリクエストなどの指示に基づき、記憶部４８に記憶されたプリンタステータスと対応付けされたキーコードを変更できる場合が好ましい。これにより、例えばユーザ毎の使用状況に応じて通常使用していないキーコードをプリンタステータスに対応したキーコードとして使用することができる。また、プリンタステータスと対応付けされたキーコードの変更は、印刷アプリケーションでのプリンタステータス判定処理との整合を取りつつ変更する場合が好ましい。
【００５０】
実施例１において、ＨＩＤクラスの通信に使用するエンドポイントＥＰ２からインタラプト転送されるキーコードは、プリンタステータスに対応したキーコードである場合を例に示したがこれに限られるわけではない。プリンタ４０からコンピュータ１０に送信されるデータであれば、プリンタステータス以外の事項に対応したキーコードである場合でもよい。また、エンドポイントＥＰ１とエンドポイントＥＰ２とを、実施例１とは反対の方法で使用する場合でもよい。即ち、エンドポイントＥＰ１を、プリンタステータスに対応したキーコードをインタラプト転送で送信するエンドポイントに使用し、エンドポイントＥＰ２を、バルク転送で送信された印刷データを受信するエンドポイントに使用してもよい。また、プリンタステータスに対応したキーコードをインタラプト転送で送信するエンドポイントを２つ以上設けた場合でもよい。即ち、複数のエンドポイントのうちの少なくとも１つのエンドポイントをＨＩＤクラスの通信に使用し、プリンタステータスに対応したキーコードをインタラプト転送する場合であればよい。
【００５１】
また、実施例１では、コンピュータ１０はＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムを備えている場合を例に示したが、プリンタ４０から送信されたキーコードをキーボードイベントに変換して印刷アプリケーション１２に通知する機能を有すれば、その他のオペレーティングシステムを備えている場合でもよい。また、プリンタ４０から送信されるプリンタステータスに対応したキーコードはＵＳＢキーコードの場合を例に示したが、割り当てられたキーの識別が可能なキーコードであればＵＳＢキーコード以外のキーコードである場合でもよい。
【実施例２】
【００５２】
実施例１に係るプリンタシステム１００では、プリンタステータスに対応したキーコードに基づいてユーザインタフェース２３でキーボードイベントを発生させ、キーボードイベントとして印刷アプリケーション１２に通知している。このため、キーボードイベントはアクティブなアプリケーションにのみ通知されることになる。そこで、実施例２では、アクティブでないアプリケーションなど、任意のアプリケーションにプリンタステータスに関するデータを通知することが可能な例を説明する。
【００５３】
図１１は、実施例２に係るプリンタシステムの全体構成を示すブロック図の例である。図１１のように、実施例２に係るプリンタシステム２００は、プリンタ４０とＵＳＢインタフェースケーブル５２で接続するコンピュータ６０が、例えばハードディスクである記憶部６２を有している点で、実施例１に係るプリンタシステム１００と異なる。記憶部６２は例えばレジストリであり、記憶部６２には、キーコードと対応付けされたウィンドウメッセージ、およびウィンドウメッセージを通知する通知先のアプリケーションのウィンドウ情報（ウィンドウ名とウィンドウクラス名）またはウィンドウハンドルが記憶されている。その他の構成については実施例１と同じであり、図２に示しているため、ここでは説明を省略する。
【００５４】
図１２は、実施例２に係るプリンタシステムの機能ブロック図の例である。図１２のように、コンピュータ６０は、図３で示したコンピュータ１０の機能ブロックに、第１アプリケーション６４、第２アプリケーション６６、および常駐アプリケーション６８を加えた構成をしている。第１アプリケーション６４および第２アプリケーション６６は、印刷アプリケーション１２以外の他の印刷アプリケーションやプリンタ４０を監視する専用のアプリケーションである。
【００５５】
Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムには、ＳｅｔＷｉｎｄｏｗｓ（登録商標）ＨｏｏｋＥｘ（）のＷｉｎ３２ＡＰＩ関数が用意されており、第１引数にＷＨ＿ＫＥＹＢＯＡＲＤ（０ｘ０００００００２）を指定することにより、プリンタ４０から送信されたキーコードをフックし、キーボードイベントが発生する前にキーコードを取得することができる。そこで、常駐アプリケーション６８では、ＳｅｔＷｉｎｄｏｗｓ（登録商標）ＨｏｏｋＥｘによるキーコードフックを行い、プリンタ４０から送信されたキーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前にキーコードを取得する。そして、記憶部６２に記憶されたキーコードと対応付けされたウィンドウメッセージに基づき、取得したキーコードをウィンドウメッセージに変換した後、ウィンドウメッセージを記憶部６２に記憶された通知先のアプリケーション（例えば、印刷アプリケーション１２、第１アプリケーション６４、および第２アプリケーション６６の中のいずれか１つのアプリケーションまたは選択した複数のアプリケーション）にＰｏｓｔＭｅｓｓａｇｅ（）で送信する。その他の構成については実施例１と同じであり、図３で示しているため、ここでは説明を省略する。
【００５６】
次に、図１３のフローチャートを用いて、プリンタ４０からプリンタステータスに対応したキーコードが送信された場合に、常駐アプリケーション６８で行われる制御処理を説明する。図１３のように、常駐アプリケーション６８は、まず起動後に、記憶部６２から通知先のアプリケーションのウィンドウ情報またはウィンドウハンドルを取得する（ステップＳ５０）。続いて、常駐アプリケーション６８は、記憶部６２からキーコードと対応付けされたウィンドウメッセージを取得する（ステップＳ５２）。実施例２では、プリンタステータスに対応したキーコードがＷＭ＿ＫＥＹＤＯＷＮ／ＷＭ＿ＫＥＹＵＰのウィンドウメッセージに変換される場合を例に説明する。即ち、実施例１と同様に、プリンタステータスに対応したキーコードがキーボードイベントに変換される場合を例に説明する。
【００５７】
次いで、常駐アプリケーション６８は、キーコードフックルーチンを登録する（ステップＳ５４）。これは、前述したように、ＳｅｔＷｉｎｄｏｗｓ（登録商標）ＨｏｏｋＥｘ（）の第１引数にＷＨ＿ＫＥＹＢＯＡＲＤ（０ｘ０００００００２）が指定されることで行われる。キーコードフックルーチンを登録することで、常駐アプリケーション６８は、キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前にキーコードを取得できる。即ち、例えばプリンタ４０からプリンタステータスに対応したキーコードが送信された場合、常駐アプリケーション６８は、ユーザインタフェース２３でキーボードイベントが発生する前にプリンタステータスに対応したキーコードを取得する（ステップＳ５６）。
【００５８】
次いで、常駐アプリケーション６８は、ステップＳ５２で取得したキーコードと対応付けされたウィンドウメッセージに基づき、ステップＳ５６で取得したキーコードをウィンドウメッセージに変換する（ステップＳ５８）。実施例２では、プリンタステータスに対応したキーコードをＷＭ＿ＫＥＹＤＯＷＮ／ＷＭ＿ＫＥＹＵＰのウィンドウメッセージと仮想キーコードに変換する。
【００５９】
次いで、常駐アプリケーション６８は、ウィンドウメッセージがＷＭ＿ＤＥＳＴＲＯＹであるかどうかを判断し（ステップＳ６０）、ＷＭ＿ＤＥＳＴＲＯＹではないと判断した場合（Ｎｏの場合）、各ウィンドウメッセージの処理を行う（ステップＳ６２）。ステップＳ６２では、ＷＭ＿ＫＥＹＤＯＷＮ／ＷＭ＿ＫＥＹＵＰ以外のウィンドウメッセージの処理を行う。また、ステップＳ６０でウィンドウメッセージがＷＭ＿ＤＥＳＴＲＯＹであると判断された場合（Ｙｅｓの場合）、常駐アプリケーション６８は、ＵｎｈｏｏｋＷｉｎｄｏｗｓ（登録商標）ＨｏｏｋＥｘ（）により、キーコードフックルーチンを抹消する（ステップＳ６４）。
【００６０】
ここで、図１４のフローチャートを用い、常駐アプリケーション６８内のキーコードフックルーチンの処理について詳しく説明する。図１４のように、常駐アプリケーション６８は、キーコードと共に受信するキーＯＮ／ＯＦＦ情報からキーダウンであるかどうかを判断する（ステップＳ７０）。キーダウンであると判断した場合（Ｙｅｓの場合）、常駐アプリケーション６８は、仮想キーコードが７Ｅ（ＶＫ＿Ｆ１５）から８５（ＶＫ＿Ｆ２２）であるかどうかを判断する（ステップＳ７２）。ステップＳ７２でＹｅｓの場合、常駐アプリケーション６８は、ステップＳ５０で取得した通知先のアプリケーションのウィンドウを検索し（ステップＳ７４）、ウィンドウがある場合（ステップＳ７６でＹｅｓの場合）は、通知先のアプリケーションにキーボードイベントを通知して、当該ウィンドウにプリンタステータスを発生させる（ステップＳ７８）。
【００６１】
ステップＳ７０でＮｏの場合、常駐アプリケーション６８は、キーアップであるかどうかを判断する（ステップＳ８０）。キーアップであると判断した場合（Ｙｅｓの場合）、常駐アプリケーション６８は、仮想キーコードが７Ｅ（ＶＫ＿Ｆ１５）から８５（ＶＫ＿Ｆ２２）であるかどうかを判断する（ステップＳ８２）。ステップＳ８２でＹｅｓの場合、常駐アプリケーション６８は、ステップＳ５０で取得した通知先のアプリケーションのウィンドウを検索し（ステップＳ８４）、ウィンドウがある場合（ステップＳ８６でＹｅｓの場合）は、通知先のアプリケーションにキーボードイベントを通知して、当該ウィンドウのプリンタステータスを解除する（ステップＳ８８）。
【００６２】
ステップＳ８０でＮｏの場合、または、ステップＳ７８およびステップＳ８８を実行した後、常駐アプリケーション６８は、ＣａｌｌＮｅｘｔＨｏｏｋＥｘ（）により別のアプリケーション等が登録しているキーコードフックルーチンに処理を渡す（ステップＳ９０）。
【００６３】
次に、図１５のフローチャートを用いて、常駐アプリケーション６８により記憶部６２に記憶された内容を変更する処理について説明する。図１５のように、常駐アプリケーション６８は、ユーザから入力された命令が、記憶部６２に記憶された通知先のアプリケーションを変更するものであるかどうかを判断する（ステップＳ１００）。通知先のアプリケーションを変更するものである場合（Ｙｅｓの場合）、常駐アプリケーション６８は、記憶部６２に記憶された通知先のアプリケーションを、ユーザから入力された命令に基づき変更する（ステップＳ１０２）。
【００６４】
次いで、常駐アプリケーション６８は、ユーザから入力された命令が、記憶部６２に記憶されたキーコードと対応付けされたウィンドウメッセージを変更するものであるかどうかを判断する（ステップＳ１０４）。ウィンドウメッセージを変更するものである場合（Ｙｅｓの場合）、常駐アプリケーション６８は、記憶部６２に記憶されたキーコードと対応付けされたウィンドウメッセージを、ユーザから入力された命令に基づき変更する（ステップＳ１０６）。
【００６５】
以上説明してきたように、実施例２によれば、常駐アプリケーション６８は、プリンタステータスに対応したキーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に、プリンタステータスに対応したキーコードを取得する。そして、常駐アプリケーション６８は、記憶部６２に記憶されたキーコードと対応付けされたウィンドウメッセージに基づき、取得したキーコードをウィンドウメッセージに変換し、変換したウィンドウメッセージを記憶部６２に記憶された通知先のアプリケーションに通知する。このような制御により、プリンタステータスに関するデータを、アクティブなアプリケーションだけではなく、任意のアプリケーションに通知することができる。
【００６６】
実施例２において、常駐アプリケーション６８は、プリンタステータスに対応したキーコードをキーボードイベント（ＷＭ＿ＫＥＹＤＯＷＮ／ＷＭ＿ＫＥＹＵＰのウィンドウメッセージと仮想キーコード）に変換する場合を例に示したがこれに限られる訳ではない。常駐アプリケーション６８は、記憶部６２に記憶されたキーコードと対応付けされたウィンドウメッセージに基づき、任意のウィンドウメッセージに変換する場合でもよい。
【００６７】
また、ウィンドウメッセージは、１つのアプリケーションに通知するようにしてもよいし、複数のアプリケーションに同時に通知するようにしてもよい。即ち、記憶部６２には、通知先のアプリケーションとして、１つのアプリケーションが記憶されている場合でも、複数のアプリケーションが記憶されている場合でもよい。また、記憶部６２に複数のアプリケーションが記憶され、その中から、通知先のアプリケーションを選択できるようにしてもよい。
【００６８】
図１５で説明したように、常駐アプリケーション６８は、記憶部６２に記憶されたウィンドウメッセージの通知先のアプリケーションおよびキーコードと対応付けされたウィンドウメッセージを変更できる場合が好ましい。なお、通知先のアプリケーションの変更およびキーコードと対応付けされたウィンドウメッセージの変更は、常駐アプリケーション６８が行う場合に限らず、例えば印刷アプリケーション１２、第１アプリケーション６４、第２アプリケーション６６が行う場合でもよい。
【００６９】
実施例２では、コンピュータ１０は、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムを備えている場合を例に説明したが、プリンタ４０から送信されたキーコードをキーボードイベント発生前に取得するキーコードフックが可能であれば、その他のオペレーティングシステムを備えている場合でもよい。また、実施例２では、プリンタ４０からのキーコードを取得する方法としてキーコードフックを用いているが、キーボードイベント発生前にキーコードの取得が可能であればその他の方法を用いてもよい。
【００７０】
なお、本発明は、上述した実施例に限定されるものではなく、その要旨を逸脱しない範囲内で種々変形して実施することが可能である。
【符号の説明】
【００７１】
１０  コンピュータ
１２  印刷アプリケーション
１４  ＧＤＩ
１６  プリンタドライバ
１８  スプーラ
２０  言語モニタ
２２  ポートモニタ
２３  ユーザインタフェース
２４  ＵＳＢバルクドライバ
２５  ＨＩＤドライバ
２６  ＵＳＢドライバスタック
２８  ＵＳＢホストコントローラ
３０  ＣＰＵ
３２  メモリ
３４  Ｉ／Ｆ
４０  プリンタ
４２  ＣＰＵ
４４  メモリ
４６  Ｉ／Ｆ
４８  記憶部
５０  プリント部
５２  ＵＳＢインタフェースケーブル
６０  コンピュータ
６２  記憶部
６４  第１アプリケーション
６６  第２アプリケーション
６８  常駐アプリケーション
１００  プリンタシステム
２００  プリンタシステム
ＥＰ０からＥＰｘ  エンドポイント
【図１】
2012213859.tif 000003
【図２】
2012213859.tif 000004
【図３】
2012213859.tif 000005
【図４】
2012213859.tif 000006
【図５】
2012213859.tif 000007
【図６】
2012213859.tif 000008
【図７】
2012213859.tif 000009
【図８】
2012213859.tif 000010
【図９】
2012213859.tif 000011
【図１０】
2012213859.tif 000012
【図１１】
2012213859.tif 000013
【図１２】
2012213859.tif 000014
【図１３】
2012213859.tif 000015
【図１４】
2012213859.tif 000016
【図１５】
2012213859.tif 000017