説明

プリンタ、プログラム、およびプリンタシステム

【課題】コンピュータに備わるアプリケーションにデータを容易に通知することが可能なプリンタ、プログラム、およびプリンタシステムを提供すること。
【解決手段】本発明は、コンピュータ10との通信に使用される複数のエンドポイント(EP0からEPx)と、複数のエンドポイント(EP0からEPx)のうちHID(Human Interface Device)クラスの通信に使用する少なくとも1つのエンドポイントEP2からキーコードをコンピュータ10にインタラプト転送するCPU42と、を備えるプリンタである。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プリンタ、プログラム、およびプリンタシステムに関する。
【背景技術】
【0002】
コンピュータと、キーボード、マウス、及びプリンタなどの各種コンピュータ周辺機器との接続インタフェースに、ユニバーサルシリアルバス(Universal Serial Bus:USB)が用いられることが多い。USBは、コンピュータ周辺機器に関するプラグ&プレイ機能、コネクタケーブルの共通化など、ユーザの使い易さを考慮した設計になっている。
【0003】
コンピュータとプリンタとの間では、コンピュータからプリンタへ印刷データが通信されるほか、プリンタからコンピュータへ例えばプリンタステータスのデータが通信される。特許文献1には、プリンタが有するデータ記憶領域の空き状態データをコンピュータにインタラプト転送する技術が開示されている。特許文献2には、コンピュータからのゲット・ディスクリプタに対して、製品名などのデータに続けて製品属性データを付加して送信する技術が開示されている。特許文献3には、デジタルプリンタからデジタルカメラにプリンタステータスデータをバルク転送する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2002−318778号公報
【特許文献2】特開2004−272570号公報
【特許文献3】特開2005−312080号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
コンピュータとプリンタとがUSBインタフェースを介して接続されている場合において、コンピュータとプリンタとの間の通信は一般的にバルク転送が使用される。即ち、プリンタからコンピュータに例えばプリンタステータスのデータを送信する場合にはバルク転送が使用される。コンピュータに送信されたプリンタステータスのデータは、最終的にはコンピュータの所定のアプリケーション(例えば、印刷アプリケーション)に通知されることとなる。
【0006】
しかしながら、例えば印刷アプリケーションにプリンタステータスのデータを通知しようとすると、複雑な処理を要することになる。そこで、本発明は、このような課題に鑑みなされたものであり、アプリケーションにデータを容易に通知することが可能なプリンタ、プログラム、およびプリンタシステムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明は、コンピュータとの通信に使用される複数のエンドポイントと、前記複数のエンドポイントのうちHIDクラスの通信に使用する少なくとも1つのエンドポイントからキーコードを前記コンピュータにインタラプト転送する制御部と、を備えることを特徴とするプリンタである。本発明によれば、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、コンピュータに備わるアプリケーションにデータを容易に通知できる。
【0008】
上記構成において、前記キーコードは、プリンタステータスに対応したキーコードである構成とすることができる。
【0009】
上記構成において、前記キーコードを記憶する記憶部を有し、前記制御部は、前記記憶部に記憶された前記キーコードを前記コンピュータにインタラプト転送すると共に、前記コンピュータからの指示に基づき、前記記憶部に記憶された前記キーコードを変更する構成とすることができる。この構成によれば、ユーザ毎の使用状況に応じたキーコードの設定ができる。
【0010】
本発明は、複数のエンドポイントを有するプリンタに接続され、前記複数のエンドポイントのうちHIDクラスの通信に使用される少なくとも1つのエンドポイントからキーコードがインタラプト転送されるコンピュータを、前記1つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得する取得手段、前記取得手段で取得した前記キーコードを、記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換する変換手段、前記変換手段で変換した前記ウィンドウメッセージを、前記記憶部に通知先として記憶されたアプリケーションに通知する通知手段、として機能させることを特徴とするプログラムである。本発明によれば、プリンタから送信されたデータを、アクティブなアプリケーションだけではなく、任意のアプリケーションに通知することができる。
【0011】
上記構成において、前記キーコードは、プリンタステータスに対応したキーコードである構成とすることができる。
【0012】
上記構成において、前記変換手段は、前記取得手段で取得した前記キーコードを、前記キーコードに対応したキーボードイベントに変換する構成とすることができる。
【0013】
上記構成において、前記記憶部に記憶された前記通知先のアプリケーションを変更する第1変更手段、を有する構成とすることができる。
【0014】
上記構成において、前記記憶部に記憶された前記ウィンドウメッセージを変更する第2変更手段、を有する構成とすることができる。
【0015】
本発明は、コンピュータと、前記コンピュータとの通信に使用される複数のエンドポイントのうちHIDクラスの通信に使用する少なくとも1つのエンドポイントからプリンタステータスに対応したキーコードを前記コンピュータにインタラプト転送するプリンタと、を備えることを特徴とするプリンタシステムである。本発明によれば、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、コンピュータに備わるアプリケーションにデータを容易に通知できる。
【0016】
上記構成において、前記コンピュータは、前記1つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得し、前記キーコードを記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換し、前記ウィンドウメッセージを前記記憶部に通知先として記憶されたアプリケーションに通知する構成とすることができる。この構成によれば、プリンタから送信されたデータを、アクティブなアプリケーションだけではなく、任意のアプリケーションに通知することができる。
【発明の効果】
【0017】
本発明によれば、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、コンピュータに備わるアプリケーションにデータを容易に通知できる。
【図面の簡単な説明】
【0018】
【図1】図1は、比較例1に係るプリンタシステムの機能ブロック図の例である。
【図2】図2は、実施例1に係るプリンタシステムの全体構成を示すブロック図の例である。
【図3】図3は、実施例1に係るプリンタシステムの機能ブロック図の例である。
【図4】図4は、コンピュータとプリンタとの間のコントロール転送の通信手順を示すシーケンス図の例である。
【図5】図5は、ディスクリプタ(その1)の例である。
【図6】図6は、ディスクリプタ(その2)の例である。
【図7】図7は、プリンタステータスに対応するキーコードの送信についてのフローチャートの例である。
【図8】図8は、プリンタステータスに対応したUSBキーコード、実際のキー、およびWindows(登録商標)仮想キーコードの例である。
【図9】図9(a)および図9(b)は、プリンタステータスを通知する際に、プリンタから送信されるパケットデータの例である。
【図10】図10は、印刷アプリケーションでのプリンタステータス判定処理を説明するフローチャートの例である。
【図11】図11は、実施例2に係るプリンタシステムの全体構成を示すブロック図の例である。
【図12】図12は、実施例2に係るプリンタシステムの機能ブロック図の例である。
【図13】図13は、常駐アプリケーションで行われる制御処理を説明するフローチャートの例である。
【図14】図14は、常駐アプリケーション内のキーコードフックルーチンの処理を説明するフローチャートの例である。
【図15】図15は、常駐アプリケーションにより記憶部に記憶された内容を変更する処理を説明するフローチャートの例である。
【発明を実施するための形態】
【0019】
まず初めに、比較例1に係るプリンタシステムを用いて、本発明が解決しようとする課題について詳細に説明する。図1は、比較例1に係るプリンタシステムを示す機能ブロック図の例である。図1のように、プリンタシステム300は、コンピュータ70とプリンタ80とがUSBインタフェースを介して接続している。コンピュータ70は、印刷アプリケーション12、GDI(Graphics Device Interface)14、プリンタドライバ16、スプーラ18、言語モニタ20、ポートモニタ22、USBバルクドライバ24、USBドライバスタック26、USBホストコントローラ28、およびドライバAPI(Application Programming Interface)72を備えている。ドライバAPI72は、プリンタ80のプリンタステータスデータを印刷アプリケーション12に通知するための専用のアプリケーションである。USBバルクドライバ24は、プリンタ80との通信に用いられるプリンタ用のドライバであり、USBドライバスタック26は、マイクロソフト(登録商標)社のWindows(登録商標)オペレーティングシステムで、USBホストコントローラ28を動かすためのドライバである。USBホストコントローラ28は、コンピュータ70のインタフェースに設けられ、プリンタ80との通信を管理する。
【0020】
プリンタ80のインタフェースには、複数のエンドポイント(EP0からEPx)が設けられている。エンドポイントEP0はコントロール転送に使用する。エンドポイントEP1は印刷データを受信するためのエンドポイントであり、コンピュータ70からみてOUTの一方向のバルク転送に使用する。エンドポイントEP2は例えばプリンタステータスデータを送信するためのエンドポイントであり、コンピュータ70からみてINの一方向のバルク転送に使用する。
【0021】
エンドポイントEP2からバルク転送されたプリンタステータスデータは、USBホストコントローラ28、USBドライバスタック26、USBバルクドライバ24、ポートモニタ22、言語モニタ20を経由してスプーラ18に渡される。このようなプリンタステータスデータを印刷アプリケーション12に通知する方法として例えば以下の4通りの方法が考えられる。
【0022】
一つ目の通知方法は、言語モニタ20がポートモニタ22に対して通信を行い、プリンタ80から送信されるデータを常時監視し、プリンタステータスデータを取得したらドライバAPI72を介して印刷アプリケーション12に通知する方法である。
【0023】
二つ目の通知方法は、ドライバAPI72がUSBバルクドライバ24に対して通信を行い、プリンタ80から送信されるデータを常時監視し、プリンタステータスデータを取得したら印刷アプリケーション12に通知する方法である。
【0024】
三つ目の通知方法は、印刷アプリケーション12がUSBバルクドライバ24に対して通信を行い、直接プリンタ80からのデータの監視を行い、プリンタステータスデータを取得する方法である。
【0025】
四つ目の通知方法は、USBバルクドライバ24がUSBドライバスタック26に対して通信を行い、プリンタ80からのデータを常時監視し、プリンタステータスデータを取得したらドライバAPI72を介してあるいは直接印刷アプリケーション12に通知する方法である。
【0026】
これら4通りの通知方法いずれにおいても、アプリケーションやドライバなどが周期的に通信を行い、プリンタステータスデータを読みに行かなければならない。また、プリンタステータスデータを印刷アプリケーション12に通知するための専用のアプリケーションであるドライバAPI72を用いる場合もある。このように、プリンタステータスデータを印刷アプリケーションに通知するには複雑な処理を要する。そこで、このような課題を解決すべく、以下において、アプリケーションにデータを容易に通知することが可能な実施例を説明する。
【実施例1】
【0027】
図2は、実施例1に係るプリンタシステムの全体構成を示すブロック図の例である。図2のように、実施例1に係るプリンタシステム100は、コンピュータ10とプリンタ40とがUSBインタフェースケーブル52を介して接続されている。コンピュータ10は、CPU30、ROMおよびRAMからなるメモリ32、およびI/F(インタフェース)34を有する。CPU30は、メモリ32に記憶された制御プログラムに従い、コンピュータ10全体を制御する。I/F34は、コンピュータ10とプリンタ40とを接続するインタフェースである。
【0028】
プリンタ40は、CPU42、ROMおよびRAMからなるメモリ44、I/F46、フラッシュROMなどからなる記憶部48、およびプリント部50を有する。CPU42は、メモリ44に記憶された制御プログラムに従い、プリンタ40全体を制御する。I/F46は、プリンタ40とコンピュータ10とを接続するインタフェースである。I/F46には、後述するように複数のエンドポイントが設けられている。記憶部48は、プリンタステータスと対応付けされたキーコードを記憶する。プリント部50は、コンピュータ10から送られてきた印刷データに基づいて印刷を実行する。
【0029】
図3は、実施例1に係るプリンタシステムの機能ブロック図の例である。図3のように、コンピュータ10は、印刷アプリケーション12、GDI(Graphics Device Interface)14、プリンタドライバ16、スプーラ18、言語モニタ20、ポートモニタ22、ユーザインタフェース23、USBバルクドライバ24、HID(Human Interface Device)ドライバ25、およびUSBドライバスタック26を備えている。また、I/F34に、プリンタ40との通信を管理するUSBホストコントローラ28を備えている。
【0030】
印刷アプリケーション12、GDI14、プリンタドライバ16、スプーラ18、言語モニタ20、ポートモニタ22、およびユーザインタフェース23はユーザモードに設けられている。USBバルクドライバ24、HIDドライバ25、およびUSBドライバスタック26はカーネルモードに設けられている。カーネルモードに設けられたUSBバルクドライバ24は、プリンタ40との通信に用いられるプリンタ用のドライバである。HIDドライバ25は、プリンタ40との通信に用いられるキーボード用のドライバである。USBドライバスタック26は、マイクロソフト(登録商標)社のWindows(登録商標)オペレーティングシステムで、USBホストコントローラ28を動かすためのドライバである。
【0031】
プリンタ40が有するI/F46には、複数のエンドポイント(EP0からEPx)が設けられている。エンドポイントEP0はコントロール転送に使用する。このコントロール転送を使って、コンフィグレーションを行い、プリンタ40の使い方の設定情報を、コンピュータ10とプリンタ40との間で双方向通信する。エンドポイントEP1は印刷データを受信するためのエンドポイントである。エンドポイントEP1は、コンピュータ10からみてOUTの一方向の通信である。転送方式としてはバルク転送を使用する。エンドポイントEP2は、プリンタステータスに対応したキーコードを送信するためのエンドポイントであり、コンピュータ10からみてINの一方向の通信である。転送方式としてはインタラプト転送を使用する。
【0032】
ここで、図4のシーケンス図を用い、コンピュータ10とプリンタ40との間のコントロール転送の通信手順について説明する。図4のように、コンピュータ10とプリンタ40とが接続された状態でプリンタ40の電源がONになった場合(ステップS10)、コンピュータ10は、プリンタ40の電源がONになったことを確認した後(ステップS12)、プリンタ40に対してゲット・ディスクリプタを転送する(ステップS14)。なお、ステップS10およびS12は、電源ON状態のプリンタ40が接続された場合でもよい。ゲット・ディスクリプタに対して、プリンタ40は、メモリ44に記憶されているディスクリプタ情報をコンピュータ10に返送する(ステップS16)。コンピュータ10は、返送されたディスクリプタ情報に基づき、適当なドライバの準備などの設定をする(ステップS18)。
【0033】
図5および図6に、メモリ44に記憶されたディスクリプタ情報の例を示す。図5および図6に示すディスクリプタ情報の例では、インタフェース1・ディスクリプタとエンドポイント1・ディスクリプタによって、プリンタクラスとバルク転送が指定されている。また、インタフェース2・ディスクリプタとエンドポイント2・ディスクリプタによって、HIDキーボードクラスとインタラプト転送が指定されている。これにより、コンピュータ10は、プリンタ40をプリンタとキーボードの2つのデバイスとして認識をし、図2および図4で説明したように、プリンタ用のドライバとしてUSBバルクドライバ24を準備し、キーボード用のドライバとしてHIDドライバ25を準備する。
【0034】
また、インタフェース1・ディスクリプタとエンドポイント1・ディスクリプタによってプリンタクラスとバルク転送が指定されていることから、エンドポイントEP1は、バルク転送された印刷データを受信するためのエンドポイントとして使用される。一方、インタフェース2・ディスクリプタとエンドポイント2・ディスクリプタによってHIDキーボードクラスとインタラプト転送が指定されていることから、エンドポイントEP2は、プリンタステータスに対応したキーコードをインタラプト転送で送信するためのエンドポイントとして使用される。
【0035】
ここで、印刷アプリケーション12で印刷処理が開始された場合に、プリンタ40のプリント部50で印刷されるまでの印刷処理について説明する。図3のように、印刷アプリケーション12で印刷処理が開始されると、印刷アプリケーション12はGDI14を呼び出し、GDI14がプリンタデバイスコンテキストへ描画を行う。その後、GDI14はプリンタドライバ16を呼び出し、プリンタドライバ16はプリンタ言語に基づいてプリンタ40で印刷可能な形の印刷データを生成する。生成された印刷データはスプーラ18に渡される。
【0036】
次いで、必要な場合は言語モニタ20で処理が行われた後、ポートモニタ22はプリンタポートの種類に合わせて印刷データの出力処理を行う。印刷データは、カーネルモードに設けられたUSBバルクドライバ24およびUSBドライバスタック26に通知された後、USBホストコントローラ28の管理の下でプリンタ40にバルク転送により送信される。
【0037】
プリンタ40のエンドポイントEP1でバルク転送された印刷データを受信した後、CPU42の制御の下、印刷データに基づいてプリント部50で印刷が実行される。
【0038】
図7は、プリンタステータスに対応したキーコードの送信について説明するフローチャートである。図7のように、プリンタ40のCPU42は、プリンタステータスに異常が発生し、コンピュータ10に通知すべきプリンタステータスがあるかどうかを判断する(ステップS20)。通知すべきプリンタステータスがあると判断した場合は、CPU42は、記憶部48に記憶されたプリンタステータスと対応付けされたキーコードに基づき、通知すべきプリンタステータスに対応したキーコードをエンドポイントEP2からコンピュータ10に送信する(ステップS22)。通知すべきプリンタステータスがないと判断した場合は、CPU42は、エンドポイントEP2からコンピュータ10にNAKを送信する(ステップS24)。エンドポイントEP2における転送方式はインタラプト転送であり、インタラプト転送の動作は、エンドポイント2・ディスクリプタのEP_bIntervalで指定した間隔[ms]でINトランザクションが発生する。つまり、CPU42は、INトランザクションに対してプリンタステータスに対応したキーコードあるいはNAKを送信する。
【0039】
図3に戻り、エンドポイントEP2から送信されたプリンタステータスに対応したキーコードは、USBホストコントローラ28、USBドライバスタック26、およびキーボード用のドライバであるHIDドライバ25を介してWindows(登録商標)に標準装備されたユーザインタフェース23に通知される。キーコードは、ユーザインタフェース23でキーボードイベント(WM_KEYDOWN/WM_KEYUPのウィンドウメッセージと仮想キーコード)に変換され、キーボードイベントとして印刷アプリケーション12に通知される。
【0040】
ここで、図8に、プリンタステータスと対応付けされたUSBキーコードの例および夫々のUSBキーコードに対応する実際のキーおよびWindows(登録商標)仮想キーコードの例を示す。図8のように、プリンタステータスの例として、用紙なし、ニアエンド、マーク未検出、カバーオープン、カッタ異常、ハードウェア異常、電源電圧異常、ヘッド温度異常などが挙げられ、夫々に対してUSBキーコード6Aから6F、70、71が割り当てられている。USBキーコード6Aから6F、70、71は、実際のキーではF15からF22に対応し、ユーザインタフェース23でWindows(登録商標)仮想キーコードに変換されると、例えばUSBキーコード6AはWindows(登録商標)仮想キーコード7E(VK_F15)となる。
【0041】
なお、プリンタステータスと対応付けされたUSBキーコードとして6Aから6F、70、71を割り当てた理由は、USBキーコード6Aから6F、70、71に対応する実際のキーF15からF22は一般的には使用されないキーであるためである。したがって、プリンタステータスとの対応付けに割り当てるUSBキーコードは、6Aから6F、70、71に限られる訳ではないが、通常使用されないキーに対応するUSBキーコードを割り当てる場合が好ましい。
【0042】
図9(a)および図9(b)は、プリンタステータスを通知する際に、プリンタ40から送信されるパケットデータの例である。図9(a)は、用紙なしのプリンタステータスが発生した場合および解除された場合のパケットデータの例である。図9(b)は、カバーオープンと用紙なしのプリンタステータスが同時に発生した場合、カバーオープンのプリンタステータスが解除された場合、カバーオープンと用紙なしのプリンタステータスが解除された場合のパケットデータの例である。パケットデータ数は、エンドポイント2・ディスクリプタのEP_wMaxPacketSizeによって指定されたバイト数によって行われ(実施例1では8バイト)、プリンタステータスに対応したキーコードが第3バイト目から順に格納される。したがって、図9(a)の用紙なしのプリンタステータスが発生した場合では、用紙なしのキーコード0x6Aが第3バイト目に格納される。図9(b)のカバーオープンと用紙なしのプリンタステータスが発生した場合では、カバーオープンのキーコード0x6Dが第3バイト目に、用紙なしのキーコード0x6Aが第4バイト目に格納される。
【0043】
図9(a)に示す用紙なし発生時のパケットデータがプリンタ40から送信され、ユーザインタフェース23にキーコードが通知されると、ユーザインタフェース23でキーコード0x6Aがキーボードイベントに変換され、最終的には、WM_KEYDOWNと仮想キーコード7E(VK_F15)とのキーボードイベントが印刷アプリケーション12に通知される。同様に、図9(b)に示すカバーオープンと用紙なし発生時のパケットデータの場合は、WM_KEYDOWNと仮想キーコード81(VK_F18)、7E(VK_F15)とのキーボードイベントが印刷アプリケーション12に通知される。
【0044】
また、図9(a)のように、用紙なしのプリンタステータスが解除されると0x6Aがクリアされたパケットデータがプリンタ40から送信され、WM_KEYUPと仮想キーコード7E(VK_F15)とのキーボードイベントが印刷アプリケーション12に通知される。図9(b)のように、カバーオープンのプリンタステータスのみが解除された場合は、0x6Dがクリアされ、0x6Aが第3バイト目に格納されたパケットデータが送信され、WM_KEYUPと仮想キーコード81(VK_F18)とが印刷アプリケーション12に通知される。その後に、用紙なしのプリンタステータスが解除された場合は、0x6Aがクリアされたパケットデータが送信され、WM_KEYUPと仮想キーコード7E(VK_F15)とのキーボードイベントが印刷アプリケーション12に通知される。
【0045】
次に、キーボードイベントが通知された場合に、印刷アプリケーション12で行なわれるプリンタステータスの判定処理について説明する。図10は、印刷アプリケーション12でのプリンタステータス判定処理を説明するフローチャートの例である。図10のように、印刷アプリケーション12は、ウィンドウメッセージを受信すると(ステップS30)、ウィンドウメッセージがWM_KEYDOWNであるかどうか判断する(ステップS32)。WM_KEYDOWNである場合(Yesの場合)は、印刷アプリケーション12は、仮想キーコードが7E(VK_F15)から85(VK_F22)のいずれかであるかを判断する(ステップS34)。ステップS34でYesの場合は、印刷アプリケーション12は、仮想キーコードに対応したプリンタステータスを発生させる(ステップS36)。ステップS34でNoの場合は、印刷アプリケーション12は、ウィンドウメッセージに従った処理を実行する(ステップS38)。
【0046】
ステップS32でNoの場合、印刷アプリケーション12は、ウィンドウメッセージがWM_KEYUPであるかどうかを判断する(ステップS40)。WM_KEYUPである場合(Yesの場合)は、印刷アプリケーション12は、仮想キーコードが7E(VK_F15)から85(VK_F22)のいずれかであるかを判断する(ステップS42)。ステップS42でYesの場合は、印刷アプリケーション12は、仮想キーコードに対応したプリンタステータスを解除する(ステップS44)。
【0047】
ステップS42でNoの場合およびステップS40でNoの場合は、印刷アプリケーション12は、ウィンドウメッセージに従った処理を実行する(ステップS38)。
【0048】
以上説明してきたように、実施例1によれば、プリンタ40は、複数のエンドポイントEP0からEPxのうちの1つのエンドポイントEP2をHIDクラスの通信に使用し、プリンタステータスに対応したキーコードをインタラプト転送する。これにより、コンピュータ10は、Windows(登録商標)に標準装備のHIDドライバ25とユーザインタフェース23とを用いることで、インタラプト転送により一定周期で送信されてきたキーコードをキーボードイベントに変換でき、プリンタステータスをキーボードイベントとして印刷アプリケーション12に通知できる。このため、複雑な処理を行うデバイスドライバやソフトウェアを使用することなく、Windows(登録商標)に標準装備のHDIドライバ25とユーザインタフェース23とにより、プリンタステータスに関するデータを容易に印刷アプリケーション12に通知できる。
【0049】
プリンタ40は、コンピュータ10からのプリンタコマンドやベンダリクエストなどの指示に基づき、記憶部48に記憶されたプリンタステータスと対応付けされたキーコードを変更できる場合が好ましい。これにより、例えばユーザ毎の使用状況に応じて通常使用していないキーコードをプリンタステータスに対応したキーコードとして使用することができる。また、プリンタステータスと対応付けされたキーコードの変更は、印刷アプリケーションでのプリンタステータス判定処理との整合を取りつつ変更する場合が好ましい。
【0050】
実施例1において、HIDクラスの通信に使用するエンドポイントEP2からインタラプト転送されるキーコードは、プリンタステータスに対応したキーコードである場合を例に示したがこれに限られるわけではない。プリンタ40からコンピュータ10に送信されるデータであれば、プリンタステータス以外の事項に対応したキーコードである場合でもよい。また、エンドポイントEP1とエンドポイントEP2とを、実施例1とは反対の方法で使用する場合でもよい。即ち、エンドポイントEP1を、プリンタステータスに対応したキーコードをインタラプト転送で送信するエンドポイントに使用し、エンドポイントEP2を、バルク転送で送信された印刷データを受信するエンドポイントに使用してもよい。また、プリンタステータスに対応したキーコードをインタラプト転送で送信するエンドポイントを2つ以上設けた場合でもよい。即ち、複数のエンドポイントのうちの少なくとも1つのエンドポイントをHIDクラスの通信に使用し、プリンタステータスに対応したキーコードをインタラプト転送する場合であればよい。
【0051】
また、実施例1では、コンピュータ10はWindows(登録商標)オペレーティングシステムを備えている場合を例に示したが、プリンタ40から送信されたキーコードをキーボードイベントに変換して印刷アプリケーション12に通知する機能を有すれば、その他のオペレーティングシステムを備えている場合でもよい。また、プリンタ40から送信されるプリンタステータスに対応したキーコードはUSBキーコードの場合を例に示したが、割り当てられたキーの識別が可能なキーコードであればUSBキーコード以外のキーコードである場合でもよい。
【実施例2】
【0052】
実施例1に係るプリンタシステム100では、プリンタステータスに対応したキーコードに基づいてユーザインタフェース23でキーボードイベントを発生させ、キーボードイベントとして印刷アプリケーション12に通知している。このため、キーボードイベントはアクティブなアプリケーションにのみ通知されることになる。そこで、実施例2では、アクティブでないアプリケーションなど、任意のアプリケーションにプリンタステータスに関するデータを通知することが可能な例を説明する。
【0053】
図11は、実施例2に係るプリンタシステムの全体構成を示すブロック図の例である。図11のように、実施例2に係るプリンタシステム200は、プリンタ40とUSBインタフェースケーブル52で接続するコンピュータ60が、例えばハードディスクである記憶部62を有している点で、実施例1に係るプリンタシステム100と異なる。記憶部62は例えばレジストリであり、記憶部62には、キーコードと対応付けされたウィンドウメッセージ、およびウィンドウメッセージを通知する通知先のアプリケーションのウィンドウ情報(ウィンドウ名とウィンドウクラス名)またはウィンドウハンドルが記憶されている。その他の構成については実施例1と同じであり、図2に示しているため、ここでは説明を省略する。
【0054】
図12は、実施例2に係るプリンタシステムの機能ブロック図の例である。図12のように、コンピュータ60は、図3で示したコンピュータ10の機能ブロックに、第1アプリケーション64、第2アプリケーション66、および常駐アプリケーション68を加えた構成をしている。第1アプリケーション64および第2アプリケーション66は、印刷アプリケーション12以外の他の印刷アプリケーションやプリンタ40を監視する専用のアプリケーションである。
【0055】
Windows(登録商標)オペレーティングシステムには、SetWindows(登録商標)HookEx()のWin32API関数が用意されており、第1引数にWH_KEYBOARD(0x00000002)を指定することにより、プリンタ40から送信されたキーコードをフックし、キーボードイベントが発生する前にキーコードを取得することができる。そこで、常駐アプリケーション68では、SetWindows(登録商標)HookExによるキーコードフックを行い、プリンタ40から送信されたキーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前にキーコードを取得する。そして、記憶部62に記憶されたキーコードと対応付けされたウィンドウメッセージに基づき、取得したキーコードをウィンドウメッセージに変換した後、ウィンドウメッセージを記憶部62に記憶された通知先のアプリケーション(例えば、印刷アプリケーション12、第1アプリケーション64、および第2アプリケーション66の中のいずれか1つのアプリケーションまたは選択した複数のアプリケーション)にPostMessage()で送信する。その他の構成については実施例1と同じであり、図3で示しているため、ここでは説明を省略する。
【0056】
次に、図13のフローチャートを用いて、プリンタ40からプリンタステータスに対応したキーコードが送信された場合に、常駐アプリケーション68で行われる制御処理を説明する。図13のように、常駐アプリケーション68は、まず起動後に、記憶部62から通知先のアプリケーションのウィンドウ情報またはウィンドウハンドルを取得する(ステップS50)。続いて、常駐アプリケーション68は、記憶部62からキーコードと対応付けされたウィンドウメッセージを取得する(ステップS52)。実施例2では、プリンタステータスに対応したキーコードがWM_KEYDOWN/WM_KEYUPのウィンドウメッセージに変換される場合を例に説明する。即ち、実施例1と同様に、プリンタステータスに対応したキーコードがキーボードイベントに変換される場合を例に説明する。
【0057】
次いで、常駐アプリケーション68は、キーコードフックルーチンを登録する(ステップS54)。これは、前述したように、SetWindows(登録商標)HookEx()の第1引数にWH_KEYBOARD(0x00000002)が指定されることで行われる。キーコードフックルーチンを登録することで、常駐アプリケーション68は、キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前にキーコードを取得できる。即ち、例えばプリンタ40からプリンタステータスに対応したキーコードが送信された場合、常駐アプリケーション68は、ユーザインタフェース23でキーボードイベントが発生する前にプリンタステータスに対応したキーコードを取得する(ステップS56)。
【0058】
次いで、常駐アプリケーション68は、ステップS52で取得したキーコードと対応付けされたウィンドウメッセージに基づき、ステップS56で取得したキーコードをウィンドウメッセージに変換する(ステップS58)。実施例2では、プリンタステータスに対応したキーコードをWM_KEYDOWN/WM_KEYUPのウィンドウメッセージと仮想キーコードに変換する。
【0059】
次いで、常駐アプリケーション68は、ウィンドウメッセージがWM_DESTROYであるかどうかを判断し(ステップS60)、WM_DESTROYではないと判断した場合(Noの場合)、各ウィンドウメッセージの処理を行う(ステップS62)。ステップS62では、WM_KEYDOWN/WM_KEYUP以外のウィンドウメッセージの処理を行う。また、ステップS60でウィンドウメッセージがWM_DESTROYであると判断された場合(Yesの場合)、常駐アプリケーション68は、UnhookWindows(登録商標)HookEx()により、キーコードフックルーチンを抹消する(ステップS64)。
【0060】
ここで、図14のフローチャートを用い、常駐アプリケーション68内のキーコードフックルーチンの処理について詳しく説明する。図14のように、常駐アプリケーション68は、キーコードと共に受信するキーON/OFF情報からキーダウンであるかどうかを判断する(ステップS70)。キーダウンであると判断した場合(Yesの場合)、常駐アプリケーション68は、仮想キーコードが7E(VK_F15)から85(VK_F22)であるかどうかを判断する(ステップS72)。ステップS72でYesの場合、常駐アプリケーション68は、ステップS50で取得した通知先のアプリケーションのウィンドウを検索し(ステップS74)、ウィンドウがある場合(ステップS76でYesの場合)は、通知先のアプリケーションにキーボードイベントを通知して、当該ウィンドウにプリンタステータスを発生させる(ステップS78)。
【0061】
ステップS70でNoの場合、常駐アプリケーション68は、キーアップであるかどうかを判断する(ステップS80)。キーアップであると判断した場合(Yesの場合)、常駐アプリケーション68は、仮想キーコードが7E(VK_F15)から85(VK_F22)であるかどうかを判断する(ステップS82)。ステップS82でYesの場合、常駐アプリケーション68は、ステップS50で取得した通知先のアプリケーションのウィンドウを検索し(ステップS84)、ウィンドウがある場合(ステップS86でYesの場合)は、通知先のアプリケーションにキーボードイベントを通知して、当該ウィンドウのプリンタステータスを解除する(ステップS88)。
【0062】
ステップS80でNoの場合、または、ステップS78およびステップS88を実行した後、常駐アプリケーション68は、CallNextHookEx()により別のアプリケーション等が登録しているキーコードフックルーチンに処理を渡す(ステップS90)。
【0063】
次に、図15のフローチャートを用いて、常駐アプリケーション68により記憶部62に記憶された内容を変更する処理について説明する。図15のように、常駐アプリケーション68は、ユーザから入力された命令が、記憶部62に記憶された通知先のアプリケーションを変更するものであるかどうかを判断する(ステップS100)。通知先のアプリケーションを変更するものである場合(Yesの場合)、常駐アプリケーション68は、記憶部62に記憶された通知先のアプリケーションを、ユーザから入力された命令に基づき変更する(ステップS102)。
【0064】
次いで、常駐アプリケーション68は、ユーザから入力された命令が、記憶部62に記憶されたキーコードと対応付けされたウィンドウメッセージを変更するものであるかどうかを判断する(ステップS104)。ウィンドウメッセージを変更するものである場合(Yesの場合)、常駐アプリケーション68は、記憶部62に記憶されたキーコードと対応付けされたウィンドウメッセージを、ユーザから入力された命令に基づき変更する(ステップS106)。
【0065】
以上説明してきたように、実施例2によれば、常駐アプリケーション68は、プリンタステータスに対応したキーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に、プリンタステータスに対応したキーコードを取得する。そして、常駐アプリケーション68は、記憶部62に記憶されたキーコードと対応付けされたウィンドウメッセージに基づき、取得したキーコードをウィンドウメッセージに変換し、変換したウィンドウメッセージを記憶部62に記憶された通知先のアプリケーションに通知する。このような制御により、プリンタステータスに関するデータを、アクティブなアプリケーションだけではなく、任意のアプリケーションに通知することができる。
【0066】
実施例2において、常駐アプリケーション68は、プリンタステータスに対応したキーコードをキーボードイベント(WM_KEYDOWN/WM_KEYUPのウィンドウメッセージと仮想キーコード)に変換する場合を例に示したがこれに限られる訳ではない。常駐アプリケーション68は、記憶部62に記憶されたキーコードと対応付けされたウィンドウメッセージに基づき、任意のウィンドウメッセージに変換する場合でもよい。
【0067】
また、ウィンドウメッセージは、1つのアプリケーションに通知するようにしてもよいし、複数のアプリケーションに同時に通知するようにしてもよい。即ち、記憶部62には、通知先のアプリケーションとして、1つのアプリケーションが記憶されている場合でも、複数のアプリケーションが記憶されている場合でもよい。また、記憶部62に複数のアプリケーションが記憶され、その中から、通知先のアプリケーションを選択できるようにしてもよい。
【0068】
図15で説明したように、常駐アプリケーション68は、記憶部62に記憶されたウィンドウメッセージの通知先のアプリケーションおよびキーコードと対応付けされたウィンドウメッセージを変更できる場合が好ましい。なお、通知先のアプリケーションの変更およびキーコードと対応付けされたウィンドウメッセージの変更は、常駐アプリケーション68が行う場合に限らず、例えば印刷アプリケーション12、第1アプリケーション64、第2アプリケーション66が行う場合でもよい。
【0069】
実施例2では、コンピュータ10は、Windows(登録商標)オペレーティングシステムを備えている場合を例に説明したが、プリンタ40から送信されたキーコードをキーボードイベント発生前に取得するキーコードフックが可能であれば、その他のオペレーティングシステムを備えている場合でもよい。また、実施例2では、プリンタ40からのキーコードを取得する方法としてキーコードフックを用いているが、キーボードイベント発生前にキーコードの取得が可能であればその他の方法を用いてもよい。
【0070】
なお、本発明は、上述した実施例に限定されるものではなく、その要旨を逸脱しない範囲内で種々変形して実施することが可能である。
【符号の説明】
【0071】
10 コンピュータ
12 印刷アプリケーション
14 GDI
16 プリンタドライバ
18 スプーラ
20 言語モニタ
22 ポートモニタ
23 ユーザインタフェース
24 USBバルクドライバ
25 HIDドライバ
26 USBドライバスタック
28 USBホストコントローラ
30 CPU
32 メモリ
34 I/F
40 プリンタ
42 CPU
44 メモリ
46 I/F
48 記憶部
50 プリント部
52 USBインタフェースケーブル
60 コンピュータ
62 記憶部
64 第1アプリケーション
66 第2アプリケーション
68 常駐アプリケーション
100 プリンタシステム
200 プリンタシステム
EP0からEPx エンドポイント

【特許請求の範囲】
【請求項1】
コンピュータとの通信に使用される複数のエンドポイントと、
前記複数のエンドポイントのうちHIDクラスの通信に使用する少なくとも1つのエンドポイントからキーコードを前記コンピュータにインタラプト転送する制御部と、を備えることを特徴とするプリンタ。
【請求項2】
前記キーコードは、プリンタステータスに対応したキーコードであることを特徴とする請求項1記載のプリンタ。
【請求項3】
前記キーコードを記憶する記憶部を有し、
前記制御部は、前記記憶部に記憶された前記キーコードを前記コンピュータにインタラプト転送すると共に、前記コンピュータからの指示に基づき、前記記憶部に記憶された前記キーコードを変更することを特徴とする請求項1または2記載のプリンタ。
【請求項4】
複数のエンドポイントを有するプリンタに接続され、前記複数のエンドポイントのうちHIDクラスの通信に使用される少なくとも1つのエンドポイントからキーコードがインタラプト転送されるコンピュータを、
前記1つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得する取得手段、
前記取得手段で取得した前記キーコードを、記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換する変換手段、
前記変換手段で変換した前記ウィンドウメッセージを、前記記憶部に通知先として記憶されたアプリケーションに通知する通知手段、として機能させることを特徴とするプログラム。
【請求項5】
前記キーコードは、プリンタステータスに対応したキーコードであることを特徴とする請求項4記載のプログラム。
【請求項6】
前記変換手段は、前記取得手段で取得した前記キーコードを、前記キーコードに対応したキーボードイベントに変換することを特徴とする請求項4または5記載のプログラム。
【請求項7】
前記記憶部に記憶された前記通知先のアプリケーションを変更する第1変更手段、を有することを特徴とする請求項4から6のいずれか一項記載のプログラム。
【請求項8】
前記記憶部に記憶された前記ウィンドウメッセージを変更する第2変更手段、を有することを特徴とする請求項4から7のいずれか一項記載のプログラム。
【請求項9】
コンピュータと、
前記コンピュータとの通信に使用される複数のエンドポイントのうちHIDクラスの通信に使用する少なくとも1つのエンドポイントからプリンタステータスに対応したキーコードを前記コンピュータにインタラプト転送するプリンタと、を備えることを特徴とするプリンタシステム。
【請求項10】
前記コンピュータは、前記1つのエンドポイントからインタラプト転送される前記キーコードがキーボードイベントとしてアクティブなアプリケーションに通知される前に前記キーコードを取得し、前記キーコードを記憶部に記憶された前記キーコードに対応したウィンドウメッセージに変換し、前記ウィンドウメッセージを前記記憶部に通知先として記憶されたアプリケーションに通知することを特徴とする請求項9記載のプリンタシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2012−213859(P2012−213859A)
【公開日】平成24年11月8日(2012.11.8)
【国際特許分類】
【出願番号】特願2011−78890(P2011−78890)
【出願日】平成23年3月31日(2011.3.31)
【出願人】(501398606)富士通コンポーネント株式会社 (848)
【Fターム(参考)】