本発明の実施の形態について図面を参照しながら説明する。本実施の形態に係る情報処理システムは図1に例示するように、キーボード10と、情報処理装置20とを含んで構成される。ここでキーボード10は、複数のキーを含むキー入力部11と、制御部12と、記憶部13と、インタフェース部14とを含んで構成されている。また情報処理装置20は、制御部21と、記憶部22と、インタフェース部23と、表示部24とを含んで構成されている。
キー入力部11は、複数のキーを具備する。そしてこのキー入力部11は、当該複数のキーのいずれかが押下開始(メイク)されるか、または押下終了(ブレーク)されたことを検出する。キー入力部11は、いずれかのキーが押下開始または押下終了したことを検出すると、その時点で押下されているキーを表す情報のセット(押下中のキーのスキャンコードのセット)を出力するキー・スキャン・デバイスを含む。
制御部12は、マイクロプロセッサ等であり、記憶部13に格納されたプログラムに従って動作する。この制御部12は、キー入力部11から前回入力されたスキャンコードのセットを記憶するバッファを管理する。なお、初期状態ではこのバッファはクリアしておく。制御部12は、キー入力部11からスキャンコードのセットが入力されると、前回入力されたスキャンコードのセット(バッファに記憶している情報)との差分を演算する。そして制御部12は、この差分から、押下開始となったキーのスキャンコードまたは押下終了となったキーのスキャンコードを検出し、当該検出したスキャンコードで特定されるキーの情報(キー特定情報と呼ぶ)を得る。そして制御部12は、今回入力されたスキャンコードのセットをバッファに格納する。
一例として、前回入力されたスキャンコードのセットに、「A」のキーを表すスキャンコードが含まれており、今回入力されたスキャンコードのセットに「A」のキーを表すスキャンコードが含まれていなければ、「A」のキーはブレーク(離された)と判断する。また、前回入力されたスキャンコードのセットに、「B」のキーを表すスキャンコードは含まれていないが、今回入力されたスキャンコードのセットに「B」のキーを表すスキャンコードが含まれていれば、「B」のキーはメイク(押下された)と判断する。さらに、前回入力されたスキャンコードのセットに、「C」のキーを表すスキャンコードが含まれており、今回入力されたスキャンコードのセットにも「C」のキーを表すスキャンコードが含まれていれば、「C」のキーは押下され続けていると判断する。
制御部12は、キー入力部11から入力されたスキャンコードのセットをインタフェース部14を介して出力する。このような制御部12の動作については、いわゆるUSB(Universal Serial Bus)キーボードの動作として広く知られているので、詳しい説明を省略する。
本実施の形態において特徴的なことの一つは、この制御部12が、上記広く知られた動作のほかに、次の動作を行うことである。すなわち本実施の形態の制御部12は、インタフェース部14を介して情報処理装置20から、後に述べるアプリケーション特定情報、またはウィンドウ特定情報を取得する。そしてこれらアプリケーション特定情報やウィンドウ特定情報とともに、操作されたキーを特定するキー特定情報を記憶部13に、時系列順に記録する(記録処理)。
またこの制御部12は、利用者の指示により、当該記録されている各種情報を情報処理装置20へ出力する処理(再生処理)を行ってもよい。これら制御部12の記録処理や再生処理については後に述べる。
また本実施の形態の別の例では、キー入力部11と制御部12とは次のようにして押下(メイク)または押下終了(ブレーク)されたキーを特定するキー特定情報を得てもよい。すなわち本実施の形態の別の例ではキー入力部11は、当該複数のキーのそれぞれについて、押下開始と押下終了(リリース)とを検出し、検出ごとに押下された(または押下されていた)キーを特定するスキャンコードと、キーが押下開始されたか押下終了となったかのいずれであるかを表す操作内容情報とを出力するキー・スキャン・デバイスを含む。
この例において、制御部12は、マイクロプロセッサ等であり、記憶部13に格納されたプログラムに従って動作する。そしてこの制御部12は、キー入力部11から入力される、スキャンコードと操作内容情報とを受け入れ、操作内容情報によりキーが押下開始されたことを検出したときには、当該押下開始となったキーを、スキャンコードから特定する。制御部12は、当該特定したキーを表す情報(キー特定情報)と、キーが押下されたことを表す情報(メイクコード)とをインタフェース部14を介して出力する。またこの制御部12は、押下されているキーについて、押下終了の操作内容情報が入力されるまで、予め定めたタイミングごとに繰返して、当該キーを特定するキー特定情報とメイクコードとをインタフェース部14を介して出力してもよい。この制御部12は、複数のキーが一斉に押下されているときには、各キーについてこの処理を行う。さらに、キー入力部11から入力されるスキャンコードと操作内容情報により、当該スキャンコードで表されるキーが押下終了となったことを検出すると、制御部12は、当該押下終了となったキーを、スキャンコードから特定する。そして制御部12は、当該特定したキーを表す情報(キー特定情報)と、キーが押下終了となったことを表す情報(ブレークコード)とをインタフェース部14を介して出力する。このような制御部12の動作についても、広く知られているので詳しい説明を省略する。
なお、この例においても、制御部12は、インタフェース部14を介して情報処理装置20から、後に述べるアプリケーション特定情報、またはウィンドウ特定情報を取得する。そしてこれらアプリケーション特定情報やウィンドウ特定情報とともに、操作されたキーを特定するキー特定情報を記憶部13に、時系列順に記録する(後に述べる記録処理)。またこの例においても、制御部12は、利用者の指示により、当該記録されている各種情報を情報処理装置20へ出力する処理(後に述べる再生処理)を行ってもよい。
記憶部13は、制御部12によって実行されるプログラムを保持する。このプログラムはDVD−ROM(Digital Versatile Disc Read Only Memory)や半導体メモリデバイス等、コンピュータ可読な記録媒体に格納されて提供され、この記憶部13に格納されたものであってもよい。また、このプログラムはネットワークを介してダウンロードされて、この記憶部13に格納されたものであってもよい。
またこの記憶部13は制御部12のワークメモリとしても機能する。そして記憶部13は、制御部12の記録処理により、制御部12から記録の対象として指示された情報を保持する。
インタフェース部14は、例えばUSB(Universal Serial Bus)等のインタフェースであり、ここでは情報処理装置20と接続される。このインタフェース部14は、制御部12から入力される指示に従って各種情報を出力する。またこのインタフェース部14は、情報処理装置20が出力する情報を受け入れて制御部12に出力する。
情報処理装置20の制御部21は、例えばマイクロプロセッサであり、記憶部22に格納されたプログラムに従って動作する。この制御部21は、例えばマイクロソフト社のウィンドウズ(登録商標)や、グーグル社のアンドロイド等のオペレーティングシステム(OS)を稼働させる。また、このOSの制御の下、種々のアプリケーションプログラム(以下アプリケーションと略称する)を実行する。
本実施の形態においてこの制御部21が実行するOSは、例えば複数のアプリケーションを並行的に実行する(処理自体は時分割的であってもよい)、いわゆるマルチタスク型のものであってもよい。この場合、ある時点で利用者からの指示操作を受け入れる状態にあるアプリケーションは一般には一つに定まる。このように利用者からの指示操作を受け入れる状態にあるアプリケーションを、フォアグラウンドにて実行中のアプリケーションと呼ぶ。
また本実施の形態における制御部21が実行するOSは、グラフィカルユーザインタフェースを提供可能となっていてもよい。一例としてウィンドウズ(登録商標)のように、アプリケーションが複数のウィンドウを表示可能となっているものであってもよい。このように、複数のウィンドウが表示可能となっているときには、入力操作の対象となるウィンドウを利用者が特定し、当該特定したウィンドウに対して操作を行うこととなる。このように入力操作の対象となっているウィンドウを、ここではフォーカスされているウィンドウと呼ぶ。
制御部21は、キーボード10から受信する情報から、入力された情報から押下されたキーまたは押下終了したキーを表す情報を得る。具体的に、キーボード10から入力される情報が、いずれかのキーが押下または押下終了したタイミングごとに受け入れたスキャンコードのセットである場合は、前回入力されたスキャンコードのセットとの差分を演算する。そして制御部21は、この差分から、押下開始となったキーのスキャンコードまたは押下終了となったキーのスキャンコードを検出し、当該検出したスキャンコードで特定されるキーの情報(キー特定情報と呼ぶ)と、キーが押下されたか、押下終了となったのか、あるいは押下され続けているかを判断する。そして制御部21は、今回入力されたスキャンコードのセットを記憶しておく。
一例として、前回入力されたスキャンコードのセットに、「A」のキーを表すスキャンコードが含まれており、今回入力されたスキャンコードのセットに「A」のキーを表すスキャンコードが含まれていなければ、「A」のキーはブレーク(離された)と判断する。また、前回入力されたスキャンコードのセットに、「B」のキーを表すスキャンコードは含まれていないが、今回入力されたスキャンコードのセットに「B」のキーを表すスキャンコードが含まれていれば、「B」のキーはメイク(押下された)と判断する。さらに、前回入力されたスキャンコードのセットに、「C」のキーを表すスキャンコードが含まれており、今回入力されたスキャンコードのセットにも「C」のキーを表すスキャンコードが含まれていれば、「C」のキーは押下され続けていると判断する。
制御部21は、予め定められたタイミングごとに、前回の判断の結果、押下されている、あるいは押下されて続けていると判断されるキーを特定するキー特定情報を、キーイベントのキュー(待ち行列)に登録する。
また制御部21は、キーボード10から受信する情報が、キー特定情報とメイクコードとである場合、制御部21は、当該キー特定情報で特定されるキーが押下されたと判断して、当該キー特定情報を、キーイベントのキュー(待ち行列)に登録する。
またキーボード10から受信する情報が、キー特定情報とブレークコードとである場合は、制御部21は、当該キー特定情報で特定されるキーの押下が終了したと判断する。
制御部21はさらに、フォアグラウンドで実行中のアプリケーションにおける処理として、キーイベントのキューを予め定めたタイミングごとに調べて、キューに登録されたキー特定情報のうち、最初に登録されたキー特定情報を読み出して、キーイベントに関連する処理を実行する。これにより、フォアグラウンドで実行中のアプリケーション、またはフォーカスされたウィンドウを管理するアプリケーションに対し、キーボード10から受信する情報が出力される。例えば、制御部21は、このアプリケーションとしてのキーイベントに関連する処理として、キューからキー特定情報を読み出した時点でフォーカスされているウィンドウに、当該キー特定情報で表される文字を表示する。
また本実施の形態において特徴的なことの一つは、この制御部21が、フォアグラウンドで実行中のアプリケーションが切替えられるごと、またはフォーカスされているウィンドウが切り替るごとに、当該切替えを検出することである。そして制御部21は、切替えが検出されると、切替え後にフォアグラウンドで実行中のアプリケーションを特定するアプリケーション特定情報、または切替え後にフォーカスされたウィンドウを特定するウィンドウ特定情報の少なくとも一方を、キーボード10へ送出する。
ここでアプリケーション特定情報は、アプリケーション名などでよく、ウィンドウ特定情報はウィンドウのタイトル(開かれているファイル名など)でよい。
また制御部21は、利用者からキー操作の記録開始指示を受け入れると、当該指示を受け入れた時点においてフォアグラウンドで実行中のアプリケーションを特定するアプリケーション特定情報、または当該指示を受け入れた時点においてフォーカスされたウィンドウを特定するウィンドウ特定情報の少なくとも一方を、キーボード10へ送出する。ここでキー操作の記録開始指示は、情報処理装置20側にて例えばマウス操作等により利用者から受け入れてもよい。この場合は情報処理装置20の制御部21は、キーボード10に対してキー操作の記録開始指示があった旨の情報を送出する。また制御部21は利用者からキー操作の記録終了指示を受け入れると、キーボード10に対してキー操作の記録終了指示があった旨の情報を送出する。またこのキー操作の記録開始指示はキーボード10にて行われるものであってもよい。この場合は、制御部21はキーボード10からキー操作の記録開始指示があった旨の情報を受け入れる。
さらに制御部21は、キーボード10から、情報を表示するべき旨の指示とともに、表示するべき情報を受け入れて、当該情報を表示部24に表示出力する。
記憶部22は、メモリデバイスや、ハードディスク等のディスクデバイスを含んで構成される。この記憶部22は、制御部21によって実行されるプログラムを保持する。このプログラムは、DVD−ROMや半導体メモリデバイス等のコンピュータ可読な記録媒体に格納されて提供され、この記憶部22に格納されたものであってもよい。また、このプログラムはネットワークを介して受信され、この記憶部22に格納されたものであってもよい。さらに、この記憶部22は、制御部21のワークメモリとしても動作する。
インタフェース部23は、例えばUSBインタフェースであり、マウスMやキーボード10に接続される。このインタフェース部23は、マウスMやキーボード10から受け入れる情報を制御部21に出力する。またこのインタフェース部23は、制御部21から入力される指示に従い、アプリケーション特定情報やウィンドウ特定情報をキーボード10へ送出する。
表示部24は、ディスプレイ等であり、制御部21から入力される指示に従って情報を表示する。また、この情報処理装置20は、ネットワークインタフェース等を備えて、インターネット等を介して、ウェブサーバ等と通信し、ウェブサーバ側から提供される情報を制御部21に出力し、また制御部21から入力される指示に従ってウェブサーバ側へ情報を送出することとしてもよい。
次に、本実施の形態のキーボード10における制御部12の記録処理と再生処理とについて説明する。本実施の形態の制御部12は、キー操作の記録開始指示と記録終了指示とを受け入れる。この記録開始指示や記録終了指示は、既に述べたように、キーボード10側のキー操作にて行われてもよい。また、マウスM等により、情報処理装置20に対してキーボード10に対する以外の操作にて行われてもよい。後者の場合、制御部12は、情報処理装置20側からキー操作の記録開始指示と記録終了指示とを受け入れることとなる。
本実施の形態の制御部12は、キー操作の記録開始指示を受けて、新規の操作履歴データベースを記憶部13内に生成する。そして制御部12は、記録終了指示を受けるまでの間、図2に例示する記録処理を実行する。
この記録処理では、図2(a)に示すように、制御部12がキー特定情報を得るとともに、当該キー特定情報で特定されたキーが押下されたことを検出すると(S1)、押下された時刻を表す時刻情報を、図示しない時刻計時用のIC(Integrated Circuit)から取得する(S2)。そして制御部12は、インタフェース部14を介して、押下されたキーに関する情報(スキャンコードのセットや、キー特定情報等)を情報処理装置20へ送出する(S3)。また制御部12は、キー特定情報と、キーが押下されたことを表す情報と、押下された時刻を表す時刻情報とを関連付けて操作履歴データベースに記録(レコード)として格納する(記録:S4)。ここでステップS3は、ステップS1以降のどのタイミングでおこなってもよい。
またこの制御部12は、図2(b)に示すように、キー特定情報を得るとともに、当該キー特定情報で特定されたキーの押下が終了したことを検出すると(S6)、当該押下終了を検出した時刻を表す時刻情報を、図示しない時刻計時用のICから取得する(S7)。そして制御部12は、キー特定情報と、キーの押下が終了したことを表す情報と、押下終了の時刻を表す時刻情報とを関連付けて、操作履歴データベースに記録として格納する(記録:S8)。
また制御部12は、ステップS6において押下が終了したキーを特定するキー特定情報と、押下が終了したことを表す情報とを受け入れたときに、当該押下が終了したキーに関する情報(スキャンコードのセットや、キー特定情報等)を情報処理装置20へ送出してもよい。
なお、制御部12は、例えばシフトキーが押下されてから「A」のキーが押下され、次に「A」のキーが離されて、次いでシフトキーが離される、という順序で操作が行われる場合、シフトキーについてステップS1からS4までの処理を行い、「A」のキーについてステップS1からS4までの処理を行う。
そして「A」のキーが離されると、「A」のキーについてステップS6からS8の処理を行い、シフトキーが離されたときに、シフトキーについてステップS6からS8の処理を行う。これにより本実施の形態では、複数のキーが一斉に押下されている状態(キーコンビネーションの入力がされている状態)も、記録可能としている。
さらに本実施の形態の制御部12は、キー操作の記録開始指示があった時点と、アプリケーションやフォーカスされたウィンドウが切替えられた時点とにおいて、情報処理装置20からインタフェース部14を介してアプリケーション特定情報、またはウィンドウ特定情報を受け入れる。そして制御部12は、当該情報を受け入れた時刻を表す情報を、図示しない時刻計時用のICから取得する。そして制御部12は、受け入れた情報(アプリケーション特定情報、またはウィンドウ特定情報)と押下された時刻を表す情報とを関連付けて、記憶部13に格納する。
ここで制御部12は、記憶部13に情報を記録する際に、過去に記録されている情報に続けて(前回記録した情報の次の情報として)、情報の記録を行う。従って制御部12の処理により、記憶部13には、記録開始指示を受けるごとに、当該記録開始指示を受けてから記録終了指示を受けるまでの操作履歴データベースとして、図3に例示するような情報が蓄積されることとなる。図3に例示するように、操作履歴データベースの記録(レコード)は、それぞれ情報の種別(タイプ)と、値(バリュー)と、時刻情報とを関連付けたものである。ここで情報の種別は、値が、アプリケーションやフォーカスされたウィンドウを切替えたときの、当該切替え後のアプリケーションやウィンドウを特定する情報と、操作されたキー特定情報とのいずれであるかを表す。
値は、アプリケーションやフォーカスされたウィンドウを切替えたときの、当該切替え後のアプリケーションやウィンドウを特定する情報そのもの、または操作されたキー特定情報であり、時刻情報は、それぞれの値を受け入れた時刻(キー特定情報の場合は押下された時刻または押下を終了した時刻)を表す情報となる。
このように操作履歴データベースはアプリケーションやフォーカスされたウィンドウを切替えたときの、当該切替え後のアプリケーションやウィンドウを特定する情報と、操作されたキー特定情報とを時系列順に記録したものとなる。本実施の形態では、記録開始指示を受けるごとに作成された複数の操作履歴データベースが記憶部13に記録されることとなる。
本実施の形態では、このような記録がされることにより、あるキー特定情報を送信した時点で、情報処理装置20にて実行されていたアプリケーションは、当該キー特定情報を送信した時点から記録を遡って、最初に見出されたアプリケーション特定情報で特定されるアプリケーションということになる。
また、あるキー特定情報を送信した時点で、情報処理装置20にてフォーカスされていたウィンドウは、当該キー特定情報を送信した時点から記録を遡って、最初に見出されたウィンドウ特定情報で特定されるウィンドウということになる。
つまり、この例では、キー特定情報を送信した時点で情報処理装置20にて実行されていたアプリケーションを特定するアプリケーション特定情報、または当該キー特定情報を送信した時点で情報処理装置20にてフォーカスされていたウィンドウを特定するウィンドウ特定情報とともに、キー特定情報が時系列順に記録されていることとなる。
次に、本実施の形態のキーボード10における制御部12の再生処理について説明する。この再生処理では、キーボード10は、利用者からどの記録を再生するかの指定を受け入れる。具体的にキーボード10の制御部12は、再生処理の開始指示を受けると、記録開始指示を受けるごとに作成され、記憶部13に格納された複数の操作履歴データベースの一覧を作成して、情報処理装置20に送出し、利用者に提示させる。
ここで操作履歴データベースの一覧を生成するにあたっては、制御部12は、例えば各操作履歴データベースにおいて時系列上、最初に記録されているアプリケーション特定情報ないしウィンドウ特定情報と、最初のN個(Nは自然数)のキー特定情報により、入力された文字の列とを抽出する。制御部12はまた、各操作履歴データベースに固有の識別情報と、各識別情報で識別される操作履歴データベースから抽出した情報とを関連付けた、操作履歴データベースの一覧を生成する。そして制御部12は、この操作履歴データベースの一覧を表示するべき情報として、当該情報を表示するべき旨の指示を情報処理装置20へ送出する。ここで識別情報は例えば記録された順序を表す連番であってもよい。
またこの操作履歴データベースの一覧を、表示すべき情報として受け入れた情報処理装置20は、例えば図4に例示するように、操作履歴データベースの一覧を表示して利用者に提供する。また情報処理装置20は提供した一覧から操作履歴データベースの一つが選択されると、当該選択された操作履歴データベースを識別する識別情報を、キーボード10へ送出する。
キーボード10の制御部12は、情報処理装置20から選択された操作履歴データベースを識別する識別情報を受け入れる。そして制御部12は、当該識別情報で識別される操作履歴データベースから各情報を、記録順に記憶部13から読み出しながら、再生の処理を行う。具体的にこの再生の処理は、USBキーボードであれば図5に例示するようなものとなる。
すなわち制御部12は、スキャンコードのセットを表す変数を初期化する(初期化処理:S11)。制御部12は、次に、情報処理装置20から受け入れた識別情報で識別される操作履歴データベースを記憶部13から読み出す(S12)。そして制御部12は、当該読み出した操作履歴データベースの先頭から順に、記録(レコード)を読み出す(S13)。
制御部12は当該読み出した記録がアプリケーション特定情報と、ウィンドウ特定情報と、キー特定情報とのどれを含むものかを判断する(S14)。このステップS14において、制御部12は、読み出した記録がアプリケーション特定情報を含むものであれば、当該アプリケーション特定情報を情報処理装置20へ送出する(S15)。そして制御部12は、情報処理装置20からアプリケーション特定情報として、ステップS15で送出したアプリケーション特定情報と同じ値の情報が受信されるまで待機する(S16)。ここで情報処理装置20からアプリケーション特定情報として、ステップS15で送出したアプリケーション特定情報と同じ値の情報が受信されると、制御部12は、次の記録がまだあるか否かを調べる(S17)。
制御部12は、次の記録はないと判断すると(Noであると)、処理を終了する。また制御部12は、ステップS17において、次の記録があると判断すると(Yesであると)、ステップS13に戻って次の記録を読み出して処理を続ける。
また、ステップS14において、読み出した記録がウィンドウ特定情報を含むものであれば、当該ウィンドウ特定情報を情報処理装置20へ送出する(S18)。そして制御部12は、情報処理装置20からウィンドウ特定情報として、ステップS18で送出したウィンドウ特定情報と同じ値の情報が受信されるまで待機する(S19)。ここで情報処理装置20からステップS18で送出したウィンドウ特定情報と同じ値の情報が受信されると、制御部12は、ステップS17に移行して処理を続ける。
さらにステップS14において、読み出した記録がキー特定情報を含むものであれば、制御部12は、当該記録に、キーが押下されたことを表す情報と、キーの押下が終了したことを表す情報のいずれが含まれているかを調べる(S20)。ここで記録に含まれる情報がキーが押下されたことを表す情報である場合は、制御部12は記録に含まれるキー特定情報が表すキーに対応するスキャンコードを、スキャンコードのセットを表す変数にセットする(S21)。そして制御部12は、当該変数にセットされたスキャンコードのセットを情報処理装置20へ送出する(S22)。制御部12はステップS17に移行して処理を続ける。
一方、ステップS20において、記録に含まれる情報がキーの押下が終了したことを表す情報である場合は、制御部12は記録に含まれるキー特定情報が表すキーに対応するスキャンコードを、スキャンコードのセットを表す変数から取り除く(S23)。そして制御部12は、ステップS22に移行して処理を続ける。
またUSBキーボードでなく、キー特定情報を送信するキーボードの場合は、ステップS21にてステップS14で読み出した記録に含まれるキー特定情報と、メイクコードとを情報処理装置20に送出してステップS17へ移行する。またステップS23ではステップS14で読み出した記録に含まれるキー特定情報と、ブレークコードとを情報処理装置20に送出してステップS17へ移行する。この例ではステップS21の処理は必要ない。またこの例では初期化処理においてスキャンコードのセットを表す変数を初期化する必要はない。
情報処理装置20では、キーボード10からアプリケーション特定情報やウィンドウ特定情報を受信して、次のように動作する。すなわち本実施の形態の一態様では、この情報処理装置20の制御部21は受信したアプリケーション特定情報で特定されるアプリケーションをフォアグラウンドで実行するよう求めるメッセージを表示する。また制御部21は、ウィンドウ特定情報を受信したときには、当該受信したウィンドウ特定情報で特定されるウィンドウをフォーカスするべき旨のメッセージを表示する。利用者はこれらのメッセージを見て情報処理装置20を操作し、指定されたアプリケーションの起動やフォアグラウンド実行指示、ないしウィンドウのフォーカスを行うこととなる。
また、本実施の形態のある例では、情報処理装置20の制御部21は、受信したアプリケーション特定情報で特定されるアプリケーションを人為的操作を受けることなしに起動してもよい。具体的にアプリケーション特定情報がアプリケーションの名称である場合、情報処理装置20は、当該名称のアプリケーションをフォアグラウンドで実行するよう設定することとすればよい。
さらに制御部21は、ウィンドウ特定情報を受信したときには、当該受信したウィンドウ特定情報で特定されるウィンドウをフォーカスする。具体的に制御部21は、フォアグラウンドで実行しているアプリケーションに対して、ウィンドウ特定情報で特定されるウィンドウをフォーカスするよう指示する。
制御部21は、オペレーティングシステムやアプリケーションとしての処理を行う際に、これらの指示を受けて、特定されたアプリケーションを起動し、また特定されたウィンドウをフォーカスする。なお制御部21は、特定されたアプリケーションが見つからないなど起動ないしフォアグラウンド実行できないとき、または特定されたウィンドウがフォーカスできない場合は、エラーを報知する。このようにエラーを報知したときには、制御部21は、キーボード10に対して再生処理を中断するべき旨の信号を送信してもよい。
また制御部21は、キーボード10からスキャンコードのセットが受信されると、当該スキャンコードのセットからキーの押下や押下終了を検出する。そして当該検出した結果に従い、押下されているキーを特定するキー特定情報を、キーイベントのキュー(待ち行列)に登録する。
本実施の形態の情報処理システムは以上の構成を備えてなるので、次のように動作する。以下の例では、アプリケーションXがフォアグラウンドで起動され、ウィンドウαがフォーカスされている状態で、文字列「abcde」を入力してリターンキーが入力されると、ウィンドウβがポップアップし(開いてフォーカスされた状態になり)、利用者がこのウィンドウβに対して文字列「xyz」を入力する…というような動作が行われる例について述べる。
まず操作履歴を記録するときには、利用者は例えば情報処理装置20にてアプリケーションXがフォアグラウンドで起動され、ウィンドウαがフォーカスされている状態で、キー操作の記録開始指示を行う。すると情報処理装置20は、キー操作の記録開始指示が行われた旨の情報をキーボード10へ出力する。情報処理装置20は、また、フォアグラウンドで実行されているアプリケーションXを特定するアプリケーション特定情報と、フォーカスされているウィンドウαを特定するウィンドウ特定情報とをキーボード10へ出力する。
キーボード10では、記録開始指示を受けて、新たな操作履歴データベースを生成し、この操作履歴データベースに対して、情報処理装置20から受信するアプリケーション特定情報と、ウィンドウ特定情報とを、それぞれ受信した時刻を表す情報に関連付けて記録する。
ここで利用者がキーボード10を操作して文字列「abcde」を入力してリターンキーを押下すると、キーボード10は各キーの押下及び押下終了を検出するごとに、押下または押下終了を検出したキーを特定するキー特定情報を、当該検出の時刻情報とともに記録する。
ここで情報処理装置20側でウィンドウβがポップアップしてフォーカスされた状態となると、情報処理装置20は、ウィンドウβがフォーカスされたことを検出し、ウィンドウβを特定するウィンドウ特定情報を生成してキーボード10へ出力する。
キーボード10ではこのウィンドウ特定情報を、それを受信した時刻を表す情報に関連付けて記録する。そして利用者がキーボード10を操作して文字列「xyz」を入力すると、キーボード10は各キーの押下及び押下終了を検出するごとに、押下または押下終了を検出したキーを特定するキー特定情報を、当該検出の時刻情報とともに記録する。このようにして、記録終了指示を受けるまで、操作履歴データベースへの記録が行われる。例えばこの操作履歴データベースにはアプリケーション特定情報と、記録されているキー特定情報の先頭数文字を採用して、「X-abcdexyz」などといった名称が関連付けて記憶部13に保持される。
次に、利用者が情報処理装置20に対して、操作履歴データベースからの再生処理を指示すると、情報処理装置20はキーボード10に対して操作履歴データベースの一覧を要求する。キーボード10では記憶部13に格納されている操作履歴データベースの一覧を生成して情報処理装置20に提供する。情報処理装置20では、この一覧を表示する。
利用者が、表示された一覧から再生の対象となる操作履歴データベースを特定すると、情報処理装置20は、当該再生の対象として特定された操作履歴データベースを特定する情報(その名称等でよい)をキーボード10に出力する。ここでは先に説明した「X-abcdexyz」の操作履歴データベースが選択されたものとする。
キーボード10は、利用者に選択された操作履歴データベースから、記録されている各情報を、記録順に読み出しながら、再生の処理を行う。すなわちキーボード10は、最初に記録されているアプリケーション特定情報「X」を参照し、情報処理装置20に対して、このアプリケーション特定情報を送出する。そしてキーボード10は、情報処理装置20からアプリケーション特定情報として、ここで送出したアプリケーション特定情報と同じ値の情報が受信されるまで待機する。
情報処理装置20ではこのアプリケーション特定情報を受けて、当該アプリケーション特定情報で特定されるアプリケーションをフォアグラウンドで実行するよう設定する。例えばアプリケーションXは起動されているが、フォアグラウンドで実行されているアプリケーションがYであった場合、情報処理装置20はアプリケーションXをフォアグラウンドアプリケーションとする。
また、これによりフォアグラウンドで実行されているアプリケーションが切り替わるので、情報処理装置20は、切り替え後にフォアグラウンドで実行されているアプリケーションを特定するアプリケーション特定情報をキーボード10へ送信する。ここで送信されるアプリケーション特定情報は、キーボード10から送出したアプリケーション特定情報と同じ値となる。従ってキーボード10は、このアプリケーション特定情報が情報処理装置20から受信されると、処理を再開する。
またキーボード10は、次に記録されているウィンドウ特定情報「α」を参照し、情報処理装置20に対して、このウィンドウ特定情報を送出する。そしてキーボード10は、情報処理装置20からウィンドウ特定情報として、ここで送出したウィンドウ特定情報と同じ値の情報が受信されるまで待機する。
情報処理装置20ではこのウィンドウ特定情報を受けて、当該ウィンドウ特定情報で特定されるウィンドウをフォーカスするよう設定する。また、これによりフォーカスされているウィンドウが切り替わるので、情報処理装置20は、切り替え後にフォーカスされているウィンドウαを特定するウィンドウ特定情報をキーボード10へ送信する。ここで送信されるウィンドウ特定情報は、先行してキーボード10から送出したウィンドウ特定情報と同じ値となる。従ってキーボード10は、このウィンドウ特定情報が情報処理装置20から受信されると、処理を再開する。
さらにキーボード10は続けて記録されている文字列「abcde」及びリターンキーに係るキー特定情報を読み出し、これらが順次押下され、押下終了した旨の情報(実際にキーが操作された場合と同じ情報)を、情報処理装置20へ送出する。またキーボード10は記録に基づいて、ウィンドウ特定情報「β」を情報処理装置20へ送出する。そしてキーボード10は、情報処理装置20からウィンドウ特定情報として、ここで送出したウィンドウ特定情報と同じ値の情報が受信されるまで待機する。
情報処理装置20では、キーボード10から受信した情報に基づいて押下されたキーを検出し、文字列abcde及びリターンキーの入力を受け入れる。そしてウィンドウβをポップアップする。ここで情報処理装置20においてフォーカスされているウィンドウが切り替わるため、情報処理装置20は、切り替え後にフォーカスされているウィンドウβを特定するウィンドウ特定情報をキーボード10へ送信する。
キーボード10では、このウィンドウ特定情報の値が、先行して送信したウィンドウ特定情報の値に一致しているので、このウィンドウ特定情報が情報処理装置20から受信されると、処理を再開する。キーボード10は、そして文字列「xyz」に係るキー特定情報を含む記録を読み出して、これらのキーが操作されたときに送信する情報を生成して、情報処理装置20へ当該生成した情報を送出する。
なお、ここまでの説明においてキーボード10は、内蔵するメモリ等の記憶部13に操作履歴データベースを格納することとしていたが、本実施の形態はこれに限られない。例えばキーボード10は、SDカード等の外部記憶メディアのインタフェースを備えてもよい。そしてキーボード10は操作履歴データベースを、このインタフェースに接続された外部記憶メディアに格納してもよい。また、操作履歴データベースを記憶するデバイスを、不揮発性のメモリとしておくこととしてもよい。
このようにしておくと、外部記憶メディアやキーボード10自体を携行し、外出先で情報処理装置20に接続して記録を再生することも可能となる。
[一部の再生]
なお、キーボード10は再生処理の対象として、操作履歴データベースではなく、その一部の指定を受けて再生処理を実行してもよい。この例では、キーボード10は、利用者に選択された操作履歴データベースに含まれる情報の一覧を、情報処理装置20に送信して利用者に提示する。そして利用者が再生の開始位置となる情報を指定すると、キーボード10は当該指定を受け入れて、選択された操作履歴データベースに記録されている情報のうち、当該指定された情報以降に記録されている情報を読み出して再生処理を行う。
この場合、キーボード10は、指定された情報から記録をさかのぼって、最初に見出されたアプリケーション特定情報またはウィンドウ特定情報の少なくとも一方を検索する。そして、検索により見出されたアプリケーション特定情報またはウィンドウ特定情報を情報処理装置20に対して送信する。そしてそれから指定された情報以後にあるキー特定情報から順に、図5に例示した再生処理を行う。
例えば、先に述べた例において利用者が、文字列「xyz」に係るキー特定情報を含む記録から再生するよう指示する(文字列「xyz」に係るキー特定情報を含む記録を再生の開始位置として指定した)場合、キーボード10は、当該文字列「xyz」の記録から、記録順にさかのぼって最初に見出されるウィンドウ特定情報(ウィンドウβを特定する情報)と、アプリケーション特定情報(アプリケーションXを特定する情報)とを見出す。
そしてキーボード10は、当該見出したアプリケーション特定情報を、情報処理装置20へ送出する。そしてキーボード10は、情報処理装置20からアプリケーション特定情報として、ここで送出したアプリケーション特定情報と同じ値の情報が受信されるまで待機する。
情報処理装置20ではこのアプリケーション特定情報を受けて、当該アプリケーション特定情報で特定されるアプリケーションをフォアグラウンドで実行するよう設定する。例えばアプリケーションXは起動されているが、フォアグラウンドで実行されているアプリケーションがYであった場合、情報処理装置20はアプリケーションXをフォアグラウンドアプリケーションとする。
また、これによりフォアグラウンドで実行されているアプリケーションが切り替わるので、情報処理装置20は、切り替え後にフォアグラウンドで実行されているアプリケーションを特定するアプリケーション特定情報をキーボード10へ送信する。ここで送信されるアプリケーション特定情報は、キーボード10から送出したアプリケーション特定情報と同じ値となる。従ってキーボード10は、このアプリケーション特定情報が情報処理装置20から受信されると、処理を再開する。
またキーボード10は、先の処理で見出したウィンドウβを特定するウィンドウ特定情報を、情報処理装置20に対して送出する。そしてキーボード10は、情報処理装置20からウィンドウ特定情報として、ここで送出したウィンドウ特定情報と同じ値の情報が受信されるまで待機する。
情報処理装置20ではこのウィンドウ特定情報を受けて、当該ウィンドウ特定情報で特定されるウィンドウをフォーカスするよう設定する。また、これによりフォーカスされているウィンドウが切り替わるので、情報処理装置20は、切り替え後にフォーカスされているウィンドウβを特定するウィンドウ特定情報をキーボード10へ送信する。ここで送信されるウィンドウ特定情報は、先行してキーボード10から送出したウィンドウ特定情報と同じ値となる。従ってキーボード10は、このウィンドウ特定情報が情報処理装置20から受信されると、処理を再開する。
さらにキーボード10は開始位置以降に記録されている文字列「xyz」に係るキー特定情報を読み出し、これらが順次押下され、押下終了した旨の情報(実際にキーが操作された場合と同じ情報)を、情報処理装置20へ送出する。以下は図5に例示した処理と同様となる。
[時間通りの再生]
また本実施の形態の操作履歴データベースでは各情報に対して、各情報が記録された時刻情報が関連付けられているので、この時刻情報を利用して、操作が行われた時間間隔通りの再生を行ってもよい。
例えば制御部12は、図5に示した処理を行う際に、ステップS13で読み出した記録に含まれる時刻情報と、前回読み出した時刻情報との差を求める。そして制御部12は、当該差の時刻だけ待ってから(実行待機)ステップS14へ移行することとしてもよい。なお、前回読み出した時刻情報がない場合(最初の記録である場合)は、実行待機することなく、ステップS14へ移行する。
[記録開始指示の別の例]
さらにここまでの例では、情報処理装置20において明示的に記録開始の指示が入力されることとしていたが、本実施の形態はこれに限られない。例えば、プログラム開発中に、デバッガーがアプリケーションを起動したときに、記録開始指示をキーボード10へ送出することとしてもよい。