(57)【要約】【課題】  挿入位置の状況に基づいて、データ入力パネルなど、データ入力ユーザインタフェースの振舞いを制御する技術を開示すること。【解決手段】  例えば、データ入力パネルの位置および内容は、挿入位置の検出された特徴に基づいて提供される。さらに、データ入力ユーザインタフェースを呼び出す、または消すための技術を挿入位置の状況に基づいて提供することができる。【選択図】  図２
2004234651.tif 000002
【特許請求の範囲】
【請求項１】
データ入力ユーザインタフェースを制御する方法であって、
データ入力ユーザインタフェースを制御するために挿入位置の特徴を取得すること、および、
前記挿入位置の前記取得した特徴に基づいてデータ入力ユーザインタフェースを制御すること
を備えたことを特徴とする方法。
【請求項２】
前記挿入位置の前記取得した特徴から、前記挿入位置はランダムな配列の文字を受け取るエディットコントロール内に配置されていると判定すること、および、
データ入力ユーザインタフェースにランダムな配列の文字を入力するためのキーボード面を提供すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項３】
前記挿入位置の前記取得した特徴から、前記挿入位置は言語種類に関連付けられていると判定すること、および、
データ入力ユーザインタフェースに前記言語種類で書かれた電子インクを受け取るための書き込み面を提供すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項４】
前記挿入位置の特徴を含む複数の挿入位置メッセージを受信すること、および、
前記複数の挿入位置メッセージのうちの少なくとも１つから制御するための特徴を取得すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項５】
前記受信した複数の挿入位置メッセージの各々を格納すること、および、
前記複数の格納された挿入位置メッセージから挿入位置メッセージを定期的にサンプリングすること
をさらに備えたことを特徴とする請求項４に記載の方法。
【請求項６】
第１のプログラミングスレッドを使用して前記受信した複数の挿入位置メッセージの各々を格納すること、および、
第２のプログラミングスレッドを使用して前記複数の格納された挿入位置メッセージから挿入位置メッセージを定期的にサンプリングすること
をさらに備えたことを特徴とする請求項５に記載の方法。
【請求項７】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示すること、および、
前記ソフトウェアアプリケーションプロセスによって維持されるスレッドを前記第１のスレッドとして使用すること
をさらに備えたことを特徴とする請求項６に記載の方法。
【請求項８】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示すること、および、
前記ソフトウェアアプリケーションプロセスによって維持されるスレッドを前記第２のスレッドとして使用すること
をさらに備えたことを特徴とする請求項６に記載の方法。
【請求項９】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示すること、および、
前記ソフトウェアシステムプロセスによって維持されるスレッドを前記第１のスレッドとして使用すること
をさらに備えたことを特徴とする請求項６に記載の方法。
【請求項１０】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示すること、および、
前記ソフトウェアシステムプロセスによって維持されるスレッドを前記第２のスレッドとして使用すること
をさらに備えたことを特徴とする請求項６に記載の方法。
【請求項１１】
前記受信した複数の挿入位置メッセージのそれぞれに含まれる前記挿入位置の前記特徴を監視すること、および、
前記受信した複数の挿入位置の特徴に含まれる前記挿入位置の前記特徴の変化に基づいて前記データ入力ユーザインタフェースを制御すること
をさらに備えたことを特徴とする請求項４に記載の方法。
【請求項１２】
前記受信した複数の挿入位置メッセージのそれぞれに含まれる前記挿入位置の前記特徴を監視すること、
前記挿入位置メッセージが発行された順序に基づいて前記挿入位置の現在の特徴を決定することおよび、
前記挿入位置の特徴の前記決定された現在の特徴に基づいて前記データ入力ユーザインタフェースを制御すること
をさらに備えたことを特徴とする請求項４に記載の方法。
【請求項１３】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示することをさらに備え、
前記挿入位置の前記特徴は、前記ソフトウェアアプリケーションプロセスによって提供されることを特徴とする請求項１に記載の方法。
【請求項１４】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示することをさらに備え、
前記挿入位置の前記特徴は、前記ソフトウェアシステムプロセスによって提供されることを特徴とする請求項１に記載の方法。
【請求項１５】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示すること、
前記ソフトウェアアプリケーションプロセスのデータ入力フォーカス状態に関するフォーカスメッセージを受信すること、および、
前記受信したフォーカスメッセージに基づいて前記データ入力ユーザインタフェースの動作をさらに制御すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１６】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示すること、
前記ソフトウェアアプリケーションプロセスによって提供されるアプリケーションユーザインタフェースのアプリケーションユーザインタフェース状態に関するアプリケーションユーザインタフェースメッセージを受信すること、および、
前記受信したアプリケーションユーザインタフェースメッセージに基づいて前記データ入力ユーザインタフェースの動作をさらに制御すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１７】
前記挿入位置の前記特徴は、前記挿入位置の場所情報を含むことを特徴とする請求項１に記載の方法。
【請求項１８】
ソフトウェアシステムプロセスがホストしているソフトウェアアプリケーションプロセスにデータを挿入するために前記データ入力ユーザインタフェースを表示することをさらに備え、
前記挿入位置の前記特徴は、前記挿入位置が配置されているアプリケーションユーザインタフェースを識別するアプリケーションユーザインタフェース情報を含むことを特徴とする請求項１に記載の方法。
【請求項１９】
前記言語種類は、アルファベットであることを特徴とする請求項１に記載の方法。
【請求項２０】
前記言語種類は、絵文字であることを特徴とする請求項１に記載の方法。
【請求項２１】
前記挿入位置の前記取得した特徴から、前記挿入位置は作業スペースの境界に近いと判定すること、および、
前記データ入力ユーザインタフェースが前記作業スペースの前記境界内に留まるような位置に前記データ入力ユーザインタフェースをレンダリングすること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２２】
前記挿入位置の前記取得した特徴から、前記挿入位置は作業スペースの境界に近いと判定すること、および、
前記データ入力ユーザインタフェースが前記作業スペースの前記境界内に留まるようなサイズで前記データ入力ユーザインタフェースをレンダリングすること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２３】
前記挿入位置の前記取得した特徴から、前記挿入位置はインターネットユニバーサルリソースアドレス位置（Internet universal resource address location）を受け取るエディットコントロール内に配置されていると判定すること、および、
データ入力ユーザインタフェースに、「ｗｗｗ」、「ｏｒｇ」、「ｃｏｍ」、「ｎｅｔ」、および「ｇｏｖ」から成るグループの文字列のうちの１または複数の専用キーを有するキーボード面を提供すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２４】
前記挿入位置の前記取得した特徴から、前記挿入位置は数値データを受け取るエディットコントロール内に配置されていると判定すること、および、
前記データ入力ユーザインタフェースに、数値キーを有するキーボード面を提供すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２５】
前記挿入位置の前記取得した特徴から、前記挿入位置は数値データを受け取るエディットコントロール内に配置されていると判定すること、および、
前記データ入力ユーザインタフェースに、稼動されると数値キーを有するキーボード面を提供するボタンを提供すること
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項２６】
データ入力ユーザインタフェースを制御する方法であって、
挿入位置の状態を判定すること、および、
前記挿入位置の前記判定された状態に基づいてデータ入力ユーザインタフェースを呼び出す呼出しインタフェースを提供すること
を備えたことを特徴とする方法。
【請求項２７】
ポインティング装置が目的の呼出しインタフェース上を通過することに応答してデータ入力ユーザインタフェースが呼び出されるように、前記目的の呼出しインタフェースを提供することをさらに備えたことを特徴とする請求項２６に記載の方法。
【請求項２８】
ポインティング装置が目的の呼出しインタフェースの近くを通過することに応答してデータ入力ユーザインタフェースが呼び出されるように、前記目的の呼出しインタフェースを提供することをさらに備えたことを特徴とする請求項２６に記載の方法。
【請求項２９】
挿入位置の検出された場所に応答して目的の呼出しインタフェースを提供することをさらに備えたことを特徴とする請求項２６に記載の方法。
【請求項３０】
所望のコントロール内の挿入位置の検出に応答して目的の呼出しインタフェースを提供することをさらに備えたことを特徴とする請求項２６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の様々な実施形態は、一般に、挿入位置の状況に基づく自動応答の生成に関する。本発明の様々な例は、特に、挿入位置の検出された状況に基づくデータ入力ユーザインタフェースの呼出しに適用する。
【背景技術】
【０００２】
コンピュータが進化するにつれて、ユーザ体験を向上させ、コンピュータをより多機能にする様々な技術が開発されている。例えば、多くのソフトウェアアプリケーションは、ユーザ体験をより便利にするためにユーザのアクションに対する様々な自動応答を提供する。これらのアプリケーションは、例えばユーザが入力している単語を自動的に完成させ、アプリケーション内の１つの場所から別の場所に移動しているテキストの再フォーマットを行い、あるいはユーザがあるネットワーク位置の参照内に挿入ポイントを置くと、インターネットＷｅｂサイトなどのネットワーク位置に自動的に接続することができる。ユーザのアクションに対するこうした自動応答は、ユーザ体験を向上させるが、典型的には、アプリケーション内に含まれている、またはアプリケーションにリンクされているリソースに限定される。従って、使用している特定のアプリケーション外のリソースにユーザが自動的にアクセスできるようにすることも有用となり得る。例えば、様々なアプリケーションについて一貫性のあるやり方で、データ入力ユーザインタフェースをユーザに自動的に提供することが有用となる。
【０００３】
Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムは、ユーザがペンまたはスタイラスを使用してデータをコンピュータに送る、Tablet PC Input Panel、テキスト入力パネル、またはＴＩＰと呼ばれるデータ入力ユーザインタフェースを提供する。この種のユーザインタフェースは、より広範なカテゴリのデータ入力グラフィカルユーザインタフェースに分類される。これは、一般にはデータ入力パネルと呼ぶこともできる。データ入力パネルは、その表面にわたるスタイラスの動きを電子インクに変換する書き込み面を備えることができる。データ入力パネルの一部のバージョンは、電子インクをテキストに変換することができ、他の種類のデータ入力パネルは、その代わりに、またはそれに加えてコンピュータ上で動作しているアプリケーションに直接電子インクを提供することができる。また、データ入力パネルは、従来のキーボードの文字を表示する「ソフト」キーボード面を備えていることもある。ユーザがスタイラスを使用して表示されたキー上でタップすると、コンピュータは、そのキーに関連付けられた文字を入力データとして受信する。他の種類のデータ入力パネルは、特化した入力面を有していることがある。例えば、ＩＭＥ（Mictosoft Input Method Editors）が提供するユーザインタフェースは、東アジアのアルファベットの文字を入力として受ける複数の文字サイズの書き込み面を提供し得る。
【０００４】
代替のデータ入力技術の提供に加えて、様々な種類のデータ入力パネルは、データ入力に関するあいまいさを明確にする手助けも行う。例えば、アプリケーションの中には、ユーザが電子インクを直接コントロールに書き込み、前に入力されたインクまたはテキストを表示できるようにするエディットコントロールを含むこともできる。しかし、この種類のエディットコントロールでは、ユーザが新しいデータの挿入と既存の表示データの操作とを区別するのが難しいことがある。例えば、ユーザインタフェースが既存のテキストまたはインクを表示する場合、スタイラスを使用して既存のテキストまたはインクを選択しようとする試行を、「−」文字を作成しようとする試行と混同することがあり得る。多くの種類のデータ入力パネルでは、既存のインクまたはテキストを新しいテキストの入力と区別し、それによってユーザがアプリケーションにデータを追加しているか、単に既存のデータを操作しているかについての任意のあいまいさを明確にするのを助けることが好都合である。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
これら種類のデータ入力パネルは、スタイラス入力装置を使用するコンピュータの有用性を実質的に向上させるが、従来のデータ入力パネルに関連する不都合が依然としていくつかある。第１に、データ入力パネルは、具体的にはユーザによって呼び出される必要がある。従って、データ入力パネルを使用してアプリケーションにデータを入力するには、ユーザは、アプリケーションの外部から手動でデータ入力パネルを稼動させる必要がある。しかし、多くのコンピュータユーザは、データ入力パネルに不慣れであり、このリソースを見落とす、またはその呼出し方法を知らないおそれがある。その結果、ソフトウェアアプリケーションを作成する開発者は、ユーザがデータをアプリケーションに入力するようデータ入力パネルに手動で要求する方法を知っていることを確信できない。代わりに開発者は、ユーザがデータ入力パネルを稼動させ、使用できることを願う、あるいは代替のデータ入力方法を提供する必要がある。
【０００６】
第２に、データ入力パネルは、アプリケーションから独立して呼び出されるグラフィカルユーザインタフェースであるため、典型的には、同様にアプリケーションから独立して表示される。一部の状況では、ユーザインタフェースは、アプリケーション上に重ね合わせることができる。この配置によってユーザは、アプリケーションのその入力先の近くにデータを入力することはできるが、ユーザインタフェースが偶発的にその入力先またはその付近を隠してしまうことがあり得る。しかし、たとえユーザインタフェースが所望の入力先を最初に隠すことはないとしても、ユーザインタフェースがそのデータの新しい挿入先を隠すのを防ぐために、ユーザは、新しいデータがアプリケーションに入力されると、ユーザインタフェースを絶えず配置し直す必要がある。さらに別の種類のデータ入力パネルでは、ユーザインタフェースは、アプリケーションの下のスペースに「ドッキング」される。データ入力パネルをこのように配置することによって、ユーザが新しいデータの所望の入力先を見るのを妨げることは確実になくなるが、アプリケーションを制御し、データをアプリケーションに入力するために、ユーザがアプリケーションとデータ入力パネルとの間でスタイラスを絶えず前後に動かすのは不便である。
【０００７】
第３に、典型的なデータ入力パネルによって提供されるデータ入力技術は多岐にわたるため、ユーザがあるアプリケーションの特定の位置にデータを入力するのにどの技術が最適であるかを決定することはしばしば不便である。例えば、あるアプリケーションは、大文字と小文字が区別されるパスワードを受けるエディットコントロールを含んでいることがある。しかし、ユーザがデータ入力パネルの書き込み面に電子インクを書き込むことによってエディットコントロールにパスワードを入力しようとした場合、ユーザの手書きが誤って認識されることがある。さらに、エディットコントロールが、許可されていない傍観者がパスワードを見るのを防ぐために、誤って認識されたテキストを意図的に隠す場合、ユーザは、そのパスワードがなぜ受け付けられないのかを理解することさえできないことがある。この状況では、ユーザは、書き込み面ではなく代わりにキーボード面を使用してデータをエディットコントロールに入力することが好ましいかもしれない。しかし、従来の多くのデータ入力パネルでは、ユーザは、キーボード面がそのタスクにより適していることを理解し、データ入力パネルをその表示面に自ら変更する必要がある。
【課題を解決するための手段】
【０００８】
好適には、本発明の様々な実装形態は、ユーザのアクションに対する自動応答を提供することに関する。特に、本発明の一部の例は、挿入位置の検出された状況に基づいてデータ入力ユーザインタフェースを自動的に生成するツールに関連する。これらの実装形態によれば、例えば、ユーザインタフェースは、挿入位置の近くに、しかしその位置に入力されるデータを隠すことなくレンダリングされる。さらに、本発明の様々な例では、データ入力ユーザインタフェースは、ユーザがそのデータ入力ユーザインタフェースを介してデータを入力するのに適したスタイラスなどの装置を使用して挿入位置を設定したときにのみレンダリングされる。さらに、本発明の一部の例では、データ入力ユーザインタフェースの機能を、挿入位置の検出された状況に基づいて構成する。例えば、挿入位置がパスワードを受け取るエディットコントロール内にある場合、データ入力ユーザインタフェースは、電子インクを受け取り、認識する書き込み面の代わりに、ソフトキーボード面を提供するように自動的に構成されたデータ入力パネルでもよい。本発明のさらに別の例では、代わりに、またはそれに加えて、挿入位置の検出された状況に基づいてデータ入力ユーザインタフェースを呼び出す方法を割り当てる。
【０００９】
本発明の一部の実装形態によれば、挿入位置追跡ツール（insertion location tracking tool）は、挿入位置の状況を常に追跡する。このツールは、例えば挿入位置状況情報を、オペレーティングシステムまたは他の適切なシステムの様々な構成要素を介してアプリケーションから収集することができる。ツールは、取得した各情報に基づいて挿入位置の状況を決定する、または取得された全情報の一部のみをサンプリングして挿入位置の状況を決定することができる。例えば、このツールは、挿入位置状況情報を含む多数のイベントメッセージを受信し、各イベントメッセージをキューに入れ、最後にキューに入れられたイベントメッセージを定期的にサンプリングして挿入位置の状況を決定する。サンプリング期間は、時間に基づいていても、または受信されたイベントメッセージの総数に基づいていてもよい。
【００１０】
本発明の様々な例では、挿入位置の状況を使用して、ユーザにデータ入力パネルなどのデータ入力ユーザインタフェースを提供する。データ入力ユーザインタフェースは、例えば検出された挿入位置の近くにレンダリングすることができる。代わりに、あるいはそれに加えて、データ入力ユーザインタフェースの特徴を、挿入位置の検出された状況に従って構成することができる。従って、検出された挿入位置が、パスワード、または他の予測できない各種の文字を受け取るエディットコントロール内の位置ポイントである場合、データ入力ユーザインタフェースは、電子インクを受け取り、認識するために、書き込み面ではなくキーボード面を含んでいてもよい。
【００１１】
さらに、検出された挿入位置の状況を使用して、データ入力ユーザインタフェースを呼び出す特定の技術を決定することができる。例えば、検出された挿入位置がそれに続くデータを有していない挿入ポイントである、そうでない場合は新しいデータを入力するためだけに使用する可能性が高い場合、データ入力ユーザインタフェースを直接呼び出すことができる。しかし、検出された挿入位置が、ドラッグされる、または新しいデータに置き換えられる可能性の高い置換え可能なテキストの選択である場合、個別アイコンまたは「ターゲット」を介してデータ入力ユーザインタフェースを呼び出すことができる。例えば、ユーザがポインタにターゲットを通過させたとき、ポインタをターゲットの上で維持したとき、またはスタイラスでターゲットに触れたときにデータ入力ユーザインタフェースをレンダリングすることができる。また、挿入位置の状況を使用して、データ入力ユーザインタフェースをどのように消すかを決定することができる。すなわち、挿入位置の状況の変化が、エディットコントロールが入力フォーカスを失ったことを示す場合、この指示を使用して、そのエディットコントロールに関連するデータ入力ユーザインタフェースを自動的に閉じることができる。
【発明を実施するための最良の形態】
【００１２】
（概要）
以下で詳しく説明するように、本発明の様々な実施形態は、挿入位置の状況を監視する。これらの実施形態は、例えば、挿入位置、挿入位置が存在するフィールド、エディットコントロール、またはユーザインタフェースの場所を監視し得る。本発明の様々な実施形態は、挿入位置の特徴に基づいて１または複数のアクションを実行することができる。代わりに、またはそれに加えて、本発明の様々な実施形態は、この状況情報を別のオブジェクトまたはプロセスに提供し、この挿入位置状況情報に基づいて１または複数のアクションが実行される。例えば、一部の実施形態では、挿入位置の特徴に基づいてデータ入力用のユーザインタフェースを制御することができる。従って、本発明の異なる実施形態を実施できる様々な動作環境を、本発明の様々な実施形態に従って挿入位置の状況を監視する様々な技術とともに説明する。挿入位置の監視された特徴に基づくデータ入力ユーザインタフェースの制御の様々な例についても説明する。
【００１３】
（動作環境の例）
本発明の様々な実施形態による挿入位置の状況に基づいてユーザインタフェースを制御するツールは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せを使用して実施することができる。例えば、本発明の一部の実施形態は、挿入位置の状況を追跡し、データ入力ユーザインタフェースの動作を制御する機能モジュールによって実施することができる。各モジュールは、単にアナログまたはデジタルの電子回路で実施することができる。しかし、当業者にはわかるように、モジュールは、例えばパーソナルコンピュータやラップトップコンピュータなど従来のプログラム可能コンピューティング装置にみられるようなプログラム可能電子回路を制御する実行可能ソフトウェア命令を使用して実施することもできる。
【００１４】
より具体的には、本発明の様々な実施形態による挿入位置追跡およびユーザインタフェース制御ツールは、１または複数のプログラム可能コンピューティング装置によって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般にプログラムモジュールは、特定のタスクを実行する、あるいは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み得る。一般に、様々な実施形態では、必要に応じてプログラムモジュールの機能を組み合わせる、あるいは分散させることができる。
【００１５】
本発明の様々な実施形態は、ソフトウェアでプログラムされたプログラム可能コンピュータ装置を使用して実施できるため、本発明の様々な実施形態を使用できる一般のプログラム可能コンピューティング装置（以下、単にコンピュータと呼ぶ）の構成要素および動作を簡単に説明することが、本発明をよりよく理解するのに役立つであろう。図１は、本発明の様々な態様の実施に使用できる従来の汎用デジタルコンピューティング環境の例を示す機能ブロック図である。図１では、コンピュータ１００は、処理ユニット１１０、システムメモリ１２０、およびシステムメモリを含む様々なシステム構成要素を処理ユニット１１０に結合するシステムバス１３０を含む。システムバス１３０は、様々なバス構造のうちの任意のものを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスなど、あらゆる種類のバス構造とすることができる。システムメモリ１２０は、読取り専用メモリ（ＲＯＭ）１４０およびランダムアクセスメモリ（ＲＡＭ）１５０を含む。
【００１６】
起動時などコンピュータ１００の要素間で情報の転送を助ける基本ルーチンを含む基本入出力システム１６０（ＢＩＯＳ）は、ＲＯＭ１４０に格納されている。コンピュータ１００は、ハードディスク（図示せず）からの読出し、およびそこへの書込みを行うためのハードディスクドライブ１７０、取外し可能磁気ディスク１９０からの読出し、またはそこへの書込みを行うための磁気ディスクドライブ１８０、ＣＤ  ＲＯＭまたは他の光媒体など取外し可能光ディスク１９２からの読出し、またはそこへの書込みを行うための光ディスクドライブ１９１も含む。ハードディスクドライブ１７０、磁気ディスクドライブ１８０、および光ディスクドライブ１９１は、それぞれハードディスクドライブインタフェース１９２、磁気ディスクドライブインタフェース１９３、および光ディスクドライブインタフェース１９４によってシステムバス１３０に接続されている。ドライブおよびその関連するコンピュータ読取り可能媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびパーソナルコンピュータ１００用の他のデータの不揮発性記憶装置を提供する。動作環境の例では、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）など、コンピュータでアクセス可能なデータを格納することができる他のタイプのコンピュータ読取り可能媒体も使用できることを、当業者であれば理解されよう。
【００１７】
オペレーティングシステム１９５、１または複数のアプリケーションプログラム１９６、他のプログラムモジュール１９７、およびプログラムデータ１９８を含むいくつかのプログラムモジュールを、ハードディスクドライブ１７０、磁気ディスク１９０、光ディスク１９２、ＲＯＭ１４０、またはＲＡＭ１５０に格納することができる。ユーザは、キーボード１０１やポインティング装置１０２などの入力装置を介してコマンドおよび情報をコンピュータ１００に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらおよび他の入力装置は、しばしばシリアルポートインタフェース１０６を介して処理ユニット１１０に接続される。シリアルポートインタフェース１０６は、システムバスに結合されているが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースによって接続することもできる。さらに、これらの装置を、適切なインタフェース（図示せず）を介して直接システムバス１３０に結合することもできる。モニタ１０７または他の種類の表示装置も、ビデオアダプタ１０８などのインタフェースを介してシステムバス１３０に結合される。モニタに加えて、パーソナルコンピュータは一般に、スピーカ、プリンタなど他の周辺出力装置（図示せず）を含む。一例として、インクなどフリーハンド入力をデジタル式に捕捉するためにペンデジタイザ１６５および付属ペンまたはスタイラス１６６が設けられている。ペンデジタイザ１６５とシリアルポートの間の直接接続を示しているが、実際にはペンデジタイザ１６５は、当分野で知られているように、処理ユニット１１０に直接、パラレルポートまたは他のインタフェースおよびシステムバス１３０を介して結合することができる。さらに、デジタイザ１６５をモニタ１０７から離して示しているが、本発明の多くの実施形態では、デジタイザ１６５の使用可能なエリアは、モニタ１０７の表示エリアと同程度の範囲を占める。さらに、デジタイザ１６５をモニタ１０７に統合する、またはモニタ１０７に重ねる個別の装置として存在させる、そうでない場合はモニタ１０７に取り付けることができる。
【００１８】
アプリケーションプログラム１９６およびプログラムモジュール１９７は、スタイラス１６６を介してインク入力を受け取り、分析する際に使用する解析モジュール、および認識モジュールを含むことができる。解析モジュールを使用して、受信したストロークを分析し、ストロークをインクオブジェクト（文字、単語、図など）にグループ分けすることができる。認識モジュールを使用してインクオブジェクトを分析し、英数字の手書き入力に対応するインクオブジェクトに対して文字認識を行う。認識情報は、インクオブジェクトのプロパティとして格納することができる。こうした解析モジュールおよび認識モジュールの例は、ワシントン州レドモンドのMicrosoft CorporationのTablet PC Platform Software Development Kit（ＳＤＫ）で入手可能である。
【００１９】
コンピュータ１００は、リモートコンピュータ１０９など１または複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。リモートコンピュータ１０９は、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の一般のネットワークノードとすることができ、図１にはメモリ記憶装置１１１のみを示しているが、一般にコンピュータ１００に関連して上述した多くの、またはすべての要素を含む。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１１２、およびワイドエリアネットワーク（ＷＡＮ）１１３を含む。こうしたネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的であり、有線および無線の通信プロトコルを使用する。
【００２０】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ１００は、ネットワークインタフェースまたはアダプタ１１４を介してローカルネットワーク１１２に接続される。ＷＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ１００は一般に、モデム１１５、またはインターネットなどワイドエリアネットワーク１１３を介して通信を確立する他の手段を含む。モデム１１５は、内蔵型または外付けでもよく、シリアルポートインタフェース１０６を介してシステムバス１３０に接続される。ネットワーク環境では、パーソナルコンピュータ１００に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。
【００２１】
図示したネットワーク接続は、例示であり、コンピュータ間の通信リンクを確立する他の技術を使用できることは理解されよう。ＴＣＰ／ＩＰ、Ｅｔｈｅｒｎｅｔ（登録商標）、ＦＴＰ、ＨＴＴＰなどよく知られている様々な任意のプロトコルの存在が想定され、システムは、クライアント−サーバ構造でユーザがＷｅｂベースのサーバからＷｅｂページを取り出すことができるように動作することができる。従来の様々なＷｅｂブラウザのうちの任意のものを使用してＷｅｂページ上でデータを表示し処理することができる。
【００２２】
上述の通り、本発明の１または複数の態様は、１または複数のコンピュータまたは他の装置によって実行される１または複数のプログラムモジュールなどのコンピュータ実行可能命令で実施することができる。一般にこれらのプログラムモジュールは、コンピュータまたは他の装置のプロセッサによって実行されたときに特定のタスクを実行する、あるいは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含むことができる。コンピュータ実行可能命令は、ハードディスク、光ディスク、取外し可能媒体、固体メモリ、ＲＡＭなどのコンピュータ可読媒体に格納することができる。様々な実施形態で、必要に応じてプログラムモジュールの機能を組み合わせる、あるいは分散させることができる。さらに機能は、集積回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）など、ファームウェア、またはハードウェアの同等物で全体または一部実施することができる。
【００２３】
（挿入位置の状態の決定）
（ユーザインタフェースでの挿入位置の使用）
ほとんどのソフトウェアアプリケーションは、典型的には、ユーザから入力データを受け付けるある種の機能または構成要素を有する。グラフィカルユーザインタフェースを有するアプリケーションでは、これらの特徴または構成要素は、一般にコントロールと呼ばれる。従ってコントロールは、アクションを実行するためにユーザが操作できる表示オブジェクトでもよい。コントロールには、ユーザがポインティング装置の使用により「チェック」できるボタン、およびこれもまたポインティング装置を介して操作できるスクロールバーの２つの例がある。ウィンドウ表示ユーザインタフェースのコンテナウィンドウ（containing window）は、さらに別の種類のコントロールであり、これによってユーザは、ウィンドウ表示ユーザインタフェースの内容を操作することができる。コントロールの特徴および振舞いは、一般にコントロールをホストしているアプリケーションによって指定される。
【００２４】
ユーザが、例えば、キーボードなどでテキストデータを入力できる境界エリアは、一般にエディットコントロールと呼ばれる。当業者には明らかなように、異なる様々な種類のエディットコントロールがある。例えば、キーボードから文字データを受け付ける従来のエディットコントロールに加えて、Microsoft WINDOWS（登録商標）ブランドのＸＰオペレーティングシステムなどの一部のオペレーティングシステムによって、アプリケーションは、リッチエディットコントロールを含むことができる。リッチエディットコントロールは、入力テキスト、および挿入されたテキストに関連する様々な種類のメタデータを受け付ける。さらに、代わりに、またはそれに加えて、Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Versionオペレーティングシステムなどの一部のオペレーティングシステムによって、アプリケーションは、インクエディットコントロールを含むことができる。インクエディットコントロールは、一種のリッチエディットコントロールであり、これによってさらにユーザは、スタイラスタイプのポインティング装置を操作して、電子インクを作成することによって、コントロールにデータを入力することができる。インクエディットコントロールの中には、インクをテキストに変換できるものもあれば、テキストに変換することなく電子インクを処理できるものもある。
【００２５】
典型的には、アプリケーション、またはアプリケーションをホストしているシステム（オペレーティングシステムなど）は、入力装置によって作成されるデータがコントロールに挿入される挿入位置を提供する。例えば、アプリケーションは、挿入ポイントを表示して、入力装置によって作成されたデータを挿入する場所を示すことができる。挿入ポイントは、典型的には、点滅する縦線として表示される。挿入ポイントの場所は、従来、１または複数の入力装置によって制御される。従って、ユーザは、ペン１６６、マウス、トラックボール、ジョイスティック、タッチパッド、または他のポインティング装置を使用して、カーソルを所望のコントロール内の所望の位置に配置し、コントロールコマンドを稼動させて（「クリッキング」とも呼ばれる）挿入ポイントをその位置に配置することができる。スタイラス１６６を使用する一部のソフトウェアアプリケーションおよびオペレーティングシステムでは、ユーザは、単に所望の位置に相当する場所においてスタイラス１６６によりデジタイザ１６５に触れることによって、挿入ポイントをコントロールの境界エリア内に配置することができる。さらに、コントロール内の挿入ポイントの位置を、挿入ポイントでのデータの入力に応答して移動させることができる。例えば、キーボードからテキストデータを受け付けるコントロールでは、挿入ポイントを、自動的かつ連続的にコントロールに挿入される任意のテキストの端部に移動させることができる。
【００２６】
あるいは、挿入位置は、置換え可能なテキストの選択でもよい。より詳細には、ユーザがテキストまたは他の文字（スペース文字など）の選択を新しい入力データに置き換えたいとき、ユーザは、置き換えるテキスト全体を選択することができる。例えばユーザは、ポインティング装置に関連するコマンドボタンを稼動させ、次いで表示されたポインタが置き換えるテキスト上を通過するようにポインティング装置を移動させる（このプロセスは、テキストの選択の「ブロッキング」とも呼ばれる）。ユーザがデータをコントロールに入力すると、選択されたテキスト全体が新しく入力されたデータに置き換えられる。
【００２７】
挿入位置の状況を制御するソフトウェアアプリケーションまたはホスティングソフトウェアシステム（hosting software system）は、挿入位置の状況を他のソフトウェアプロセスに報告するレポーティング機能を含むことができる。例えば、Microsoft WINDOWS（登録商標）ブランドのＸＰオペレーティングシステムは、テキストサービスフレームワークを提供する。このオペレーティングシステム構成要素は、電子インク入力を受け取り、例えば変換されたテキストの元の電子インク入力など任意のメタデータをアプリケーションに組み込む機能など、テキストサービスフレームワークによって提供されたサービスを使用するよう構成されているソフトウェアアプリケーションに、強化された機能を提供する。しかし、テキストサービスフレームワークのサービスを使用するために、アプリケーションは、アプリケーション内の挿入ポイント「カレット」（または挿入ポイントを示すマーカ）のすべての動きを報告し、挿入ポイントがユーザに見えるかどうかを識別する必要がある。またアプリケーションは、アプリケーションによって維持されているエディットコントロールの任意のテキスト範囲の表示位置を報告できなければならない。テキストサービスフレームワークの一部の実装形態によれば、挿入位置状況情報（挿入ポイントカレットの場所の変更など）を含むイベントメッセージを、オペレーティングシステムがホストする他のアプリケーションに同報通信することができる。さらに、テキストサービスフレームワークの一部の実装形態は、他のアプリケーションからの問合せに応答して挿入位置状況情報を提供することができる。従ってテキストサービスフレームワークは、例えば、データ入力ユーザインタフェースを制御するオペレーティングシステムの別の構成要素を含めて、他のソフトウェアプロセスに挿入位置の状況を報告することができる。
【００２８】
同様に、Microsoft WINDOWS（登録商標）ブランドのオペレーティングシステムの一部のバージョンは、Microsoft Active Accessibility（登録商標）構成要素を含む。この構成要素は、例えば、従来のグラフィカルユーザインタフェースでは挿入位置を見ることができない可能性がある視覚障害者のためのユーザインタフェースに、挿入位置の状況を報告するために頻繁に使用される。テキストサービスフレームワーク構成要素と同様に、Microsoft Active Accessibility（登録商標）構成要素の様々な実装形態では、挿入位置状況情報を含むイベントメッセージを同報通信することができる。
【００２９】
代わりに、またはそれに加えて、一部のオペレーティングシステムまたは他のソフトウェアプロセスは、その情報についての直接の問合せに応答して様々な種類の挿入位置状況情報を提供することができる。例えば、一部のソフトウェアアプリケーションは、様々な種類の挿入位置状況情報をそこから取得できる１または複数のコントロールを含むことができる。こうした種類のコントロールには、Microsoft Internet Explorerブラウザアプリケーションおよび他の種類のソフトウェアアプリケーションでＷｅｂブラウジングにしばしば使用するMicrosoft「ＭＳＨＴＭＬ」コントロールがある。例えば、この種類のコントロールに容易にアクセスして、コントロール内の挿入ポイントカレットの位置を取得することができる。
【００３０】
代わりに、またはそれに加えて、一部のソフトウェアアプリケーションは、アプリケーションプログラミングインタフェース（ＡＰＩ）を使用して表示プロセスに挿入位置の現在の状況を知らせ、従って挿入位置をユーザに表示することができる。こうした種類のアプリケーションプログラミングインタフェースには、Microsoft WINDOWS（登録商標）ブランドのオペレーティングシステムが使用するＷＩＮ３２アプリケーションプログラミングインタフェースがある。こうした種類のアプリケーションプログラミングインタフェースには他に、東アジア言語のテキスト入力にしばしば使用されるMicrosoft Input Method Editor（ＩＭＥ）インタフェースなどがある。この種類のアプリケーションプログラミングインタフェースを使用するソフトウェアアプリケーションは、例えば、インタフェースにアプリケーション内の挿入ポイントカレットの位置を提供することができる。
【００３１】
従って、１または複数のソフトウェアプロセスを使用して、挿入位置の状況を取得または受け取ることができる。さらに、挿入位置の状況情報がその挿入位置に関連する任意の特徴を含み得ることを理解されたい。例えば、挿入位置状況情報は、挿入位置の場所を識別する場所情報、挿入ポイントカレットが可視かどうかを示す可視情報、および挿入ポイントカレットの高さを示す高さ情報を含むことができる。さらに、挿入位置状況情報は、典型的には、挿入位置が配置されているコントロールを識別するコントロール情報を含むことができる。例えば、コントロール情報は、コントロールを含むアプリケーションユーザインタフェース、およびアプリケーションユーザインタフェース内のコントロールを識別する識別情報を指定することができる。また、挿入位置情報は、挿入位置を含むコントロールの種類、およびコントロールの状態に関連する情報を識別することもできる。以下でより詳しく説明するように、本発明の様々な実施形態による挿入位置制御ツールは、この挿入位置情報を監視し、挿入位置の特徴に基づいてデータ入力ユーザインタフェースなどのユーザインタフェースの動作を制御する。
【００３２】
（挿入位置制御ツール）
図２を参照すると、この図は、本発明の様々な実施形態で使用できる挿入位置制御ツール２０１を示している。挿入位置制御ツール２０１は、挿入位置追跡モジュール２０３、およびユーザインタフェース決定モジュール２０５を含む。挿入位置追跡モジュール２０３は、様々なソースから挿入位置に関する特徴情報を抽出し、この情報をユーザインタフェース決定モジュール２０５に提供する。ユーザインタフェース決定モジュール２０５は、取得した挿入位置の特徴（および以下でより詳しく説明する他の種類のイベントメッセージから受け取った情報）に基づいて、ユーザインタフェースアプリケーションプログラミングインタフェース２０７が提供するデータ入力ユーザインタフェースなどのユーザインタフェースの動作を制御する。当業者にはわかるように、ユーザインタフェース決定モジュール２０５からの命令に応答して、ユーザインタフェースアプリケーションプログラミングインタフェース２０７は、ディスプレイ１０７を介してユーザインタフェースを提供する。
【００３３】
上述したように、挿入位置追跡モジュール２０３は、オペレーティングシステム（または他の適切なソフトウェアシステム）の構成要素、アプリケーション内に含まれるコントロール、およびアプリケーションが使用するアプリケーションユーザインタフェースを含めて、様々なソースから挿入位置状況情報を取得し得る。例えば、図２に示した本発明の実施形態では、挿入位置追跡モジュール２０３は、テキストサービスフレームワークインタフェース２０９およびＭＳＡＡアプリケーションプログラミングインタフェース２１３から挿入位置状況情報を備えるイベントメッセージを受け取ることができる。さらに、挿入位置追跡モジュール２０３は、様々な種類の挿入位置状況情報を取得するために、ＭＳＨＴＭＬコントロール２１１、Ｗｉｎ３２アプリケーションプログラミングインタフェース２１５、およびＩＭＥ（Input Method Editor）インタフェース２１７に問合せを伝えることができる。
【００３４】
本発明の様々な実施形態によれば、挿入位置追跡モジュール２０３は、所与の状況において最も正確なソースからの挿入位置情報を使用することできる。例えば、挿入位置追跡モジュール２０３は、ＭＳＡＡ（Microsoft Active Accessibility）アプリケーションプログラミングインタフェース２１３およびＷｉｎ３２アプリケーションプログラミングインタフェース２１５の両方から挿入位置の現在の状況に関する特徴データを取得することができる。しかし、ＭＳＡＡアプリケーションプログラミングインタフェース２１３およびＷｉｎ３２アプリケーションプログラミングインタフェース２１５は、挿入位置状況情報を提供するが、一部の状況では、アプリケーションプログラミングインタフェースの一方の精度が他方より高い場合がある。例えば、挿入ポイントカレットの多くの場所で、ＭＳＡＡアプリケーションプログラミングインタフェース２１３が挿入ポイントの現在の状況に関するより正確な情報を提供し得る。しかし、挿入ポイントカレットが「リッチエディット」コントロールに配置されている場合、Ｗｉｎ３２アプリケーションプログラミングインタフェース２１５が挿入ポイントの現在の状況に関するより正確な情報を提供し得る。
【００３５】
さらに、アプリケーションプログラミングインタフェース２１３および２１５の一方から挿入位置メッセージによって提供される情報フォーマットは、他方のアプリケーションプログラミングインタフェースによって提供されるフォーマットより処理がより効率的となり得る。例えば、一部の状況では、挿入ポイントカレットの可視特性（すなわち挿入ポイントが可視であるかどうかを示すデータ）を、ＭＳＡＡアプリケーションプログラミングインタフェース２１３が提供するデータフォーマットよりＷｉｎ３２アプリケーションプログラミングインタフェース２１５が提供するデータフォーマットから取得する方がより便利であり得る。さらに、挿入ポイントがウィンドウ無しコントロール内に配置されている場合、ＭＳＡＡアプリケーションプログラミングインタフェース２１３が提供する特徴情報によって、挿入位置追跡モジュール２０３は、依然としてウィンドウ無しコントロールの境界長方形を決定することができる。従って、本発明の一部の実施形態では、挿入位置状況の特徴情報は、例えばＭＳＡＡアプリケーションプログラミングインタフェース２１３など、主に１つのソースから取得され、例えば、Ｗｉｎ３２アプリケーションプログラミングインタフェース２１５など、別のソースからの挿入位置状況情報は、第２のソースが第１のソースより高い精度を提供する状況の場合のバックアップチェックとして使用する。
【００３６】
本発明の例では、テキストサービスフレームワークは、典型的には、挿入位置状況情報の最も正確なソースである。従って、挿入位置追跡モジュール２０３がテキストサービスフレームワークインタフェース２０９から挿入位置状況情報を含むイベントメッセージを受信した場合、挿入位置追跡モジュール２０３は、この状況情報をユーザインタフェース決定モジュール２０５に提供する。しかし、オペレーティングシステムがテキストサービスフォーマットを使用しない場合、挿入位置追跡モジュール２０３は、挿入位置状況情報を含むＭＳＡＡアプリケーションプログラミングインタフェース２１３からのイベントメッセージを処理する。これらのイベントメッセージが、挿入位置はコントロールに配置されている（または、ＭＳＡＡアプリケーションプログラミングインタフェース２１３自体からのイベントメッセージより正確な挿入位置状況情報を提供できるアプリケーションユーザインタフェースに関連付けられている）ことを示す場合、挿入位置追跡モジュール２０３は、このより正確な挿入位置状況情報を要求する。例えば、ＭＳＡＡアプリケーションプログラミングインタフェース２１３からのイベントメッセージが、挿入ポイントカレットがＭＳＨＴＭＬコントロール２１１に配置されていることを示す場合、挿入位置追跡モジュール２０３は、ＭＳＡＡアプリケーションプログラミングインタフェース２１３ではなく、ＭＳＨＴＭＬコントロール２１１からの挿入位置状況情報を取得する。そうでない場合、挿入位置追跡モジュール２０３は、ＭＳＡＡアプリケーションプログラミングインタフェース２１３からのイベントメッセージによって提供される挿入位置状況情報を使用し、該当する場合、Ｗｉｎ３２アプリケーションプログラミングインタフェース２１５やＩＭＥインタフェース２１７など他のソースからより正確な挿入位置状況情報を取得することによってこの情報を補う。
【００３７】
さらに他のアプリケーションプロセスまたはソースを使用して、挿入位置の現在の状況に関する挿入位置特徴情報を提供できることに注意されたい。例えば、Apple MacintoshベースのシステムまたはＵｎｉｘ（登録商標）ベースのシステムは、異なるアプリケーションプロセスを使用して、挿入位置の現在の状況に関する挿入位置特徴情報を監視し、提供する。従って、本発明の様々な実施形態は、これら代替のアプリケーションプロセスを、テキストサービスフレームワークインタフェース２０９、ＭＳＨＴＭＬコントロール２１１、ＭＳＡＡアプリケーションプログラミングインタフェース２１３、Ｗｉｎ３２アプリケーションプログラミングインタフェース２１５、およびＩＭＥインタフェース２１７の代わりに、またはそれに加えて使用することができる。
【００３８】
理想的には、挿入位置追跡モジュール２０３は、挿入位置の状況に関する最新の特徴情報をユーザインタフェース決定モジュール２０５に引き続き提供しながら、受信したすべての挿入位置メッセージに含まれる特徴情報を分析するのに十分に速く、挿入位置情報を備える入メッセージを処理できる。しかし、実際問題として、メッセージの発行が速すぎて、挿入位置追跡モジュール２０３は、その挿入位置特徴情報をリアルタイムベースに監視することができない。従って、本発明の様々な実施形態は、図３に示した挿入位置追跡モジュール２０３を使用することができる。次に挿入位置追跡モジュール２０３のこの特定の実施形態の動作について、図４に示したフロー図との関連で説明する。
【００３９】
ステップ４０１で始まり、挿入位置追跡モジュール２０３は、最初にしきい値タイマを開始する。このしきい値タイマは、例えば、１００ミリ秒の期間とすることができる。以下の説明からわかるように、しきい値タイマは、例えばＭＳＡＡアプリケーションプログラミングインタフェース２１３からのイベントメッセージなど、挿入位置追跡モジュール２０３が挿入位置状況情報を含む受信したメッセージの特徴をどのくらいの頻度でサンプリングするかを決定する。次に、ステップ４０３で、検索スレッド３０１は、ＭＳＡＡアプリケーションプログラミングインタフェース２１３から挿入位置メッセージを取り出す（または受け取る）。ステップ４０５で、検索スレッド３０１は、受信した挿入位置メッセージをイベントメッセージキュー３０３に入れる。
【００４０】
ステップ４０７で、タイミングスレッド３０５は、しきい値時間が満期になっているかどうかを決定する。しきい値時間が満期になった場合、検索スレッド３０１は、引き続き挿入位置メッセージを受信し、受信したメッセージおよびイベントメッセージキュー３０３を格納する。しかし、タイミングスレッド３０５は、しきい値時間が満期になっていると判定した場合、ステップ４０９で、タイミングスレッド３０５は、最後に格納された挿入位置メッセージをイベントメッセージキュー３０３から取り出す。次に、挿入位置追跡モジュール２０３は、取り出された挿入位置メッセージに含まれる関連する特徴情報を分析し、その情報をユーザインタフェース決定モジュール２０５に提供する。従って、受信した各挿入位置メッセージからの特徴情報を分析しようと試みることより、挿入位置追跡モジュール２０３は、最後に受信された挿入位置メッセージ内の特徴情報を定期的に分析する。入ってくる挿入位置メッセージの抽出および記憶は、格納された挿入位置メッセージのサンプリングと同じプロセスの一部として説明しているが、タイミングスレッド３０５は、本発明の様々な実施形態で検索スレッド３０１と異なっていてよいことに注意されたい。スレッドが異なる場合、検索スレッド３０１は、タイミングスレッド３０５がイベントキュー３０３から格納された挿入位置メッセージをサンプリングするのと同時に、入ってくる挿入位置メッセージを引き続き受信し、格納することができる。
【００４１】
本発明の様々な実施形態では、挿入位置の状況の特定の変化によって、キューイングプロセスが一時的に中断することがある。例えば、本発明の一部の実施形態では、データ入力フォーカスが１つのユーザインタフェースから別のユーザインタフェースに変わったときに、キューイングプロセスが一時的に中断する。キューイングプロセスのこの一時的な中断によって、データ入力フォーカスを失ったユーザインタフェースに関してはデータ入力ユーザインタフェースパネルを直ちに非表示にし、データ入力フォーカスを取得したユーザインタフェースに関してはデータ入力ユーザインタフェースパネルを直ちに表示できるようになる。
【００４２】
また、本発明の一部の実施形態では、スレッド３０１および３０５の一方または両方は、「プロセス中」スレッドであり得る。より詳細には、スレッドは、挿入位置が配置されているユーザインタフェースの提供も行うソフトウェアアプリケーションプロセスによって提供され得る。当業者にはわかるように、スレッドは、アプリケーションプロセス自体の一部なので、プロセス中スレッドの使用によって、スレッドがアプリケーションプロセスによって提供された挿入位置の状況に関する特徴情報をより容易に変換できるようになる。あるいは、スレッド３０１および３０５の一方または両方は、挿入位置に関してユーザインタフェースを維持するアプリケーションプロセスからは独立した「プロセス外」スレッドであり得る。例えば、スレッドの一方または両方は、オペレーティングシステムなど、アプリケーションをホストするソフトウェアシステムによって提供することができる。当業者にはわかるように、この種類のスレッドは、アプリケーションの動作を管理するルールによって制約されないので、プロセス外スレッドの使用によって、動作の自由度がより高くなる。さらに、この種類のスレッドは、アプリケーションが偶発的に終了した場合、突然動作を停止することがない。
【００４３】
本発明の他の実施形態は、異なる技術を使用して一連の挿入位置メッセージに含まれる特徴情報を効率良く捕捉できることを理解されたい。例えば、本発明の一部の実施形態では、挿入位置追跡モジュール２０３は、１または複数のスレッドを使用して、受信された各挿入位置メッセージに含まれる特徴情報を処理することができる。挿入位置メッセージの処理中にスレッドが遅れ始めた場合、スレッドは、未処理の挿入位置メッセージの処理を停止して、挿入位置の現在の状況に追いつくまで、最後に受信された挿入位置メッセージのみを処理する。あるいは、本発明の実施形態の中には、挿入位置メッセージによって提供される特徴情報の変化を単に監視するだけのものもある。例えば、挿入ポイントカレットの状況に関する一連のメッセージが大量にある場合、典型的には、位置情報のみが変わり、挿入ポイントカレットが配置されているコントロールまたはユーザインタフェースに関連する特徴情報は一定のままである。位置情報は、挿入位置追跡モジュール２０３によって容易に処理することができる。コントロールまたはユーザインタフェースに関する特徴情報への変更は、かなり大きい処理オーバーヘッドを要するが、これらの変更は、比較的まれにしか起こらないため、これらの特徴の変化に気づいたときにのみ処理される。さらに、本発明の一部の実施形態では、１群の挿入位置メッセージを一度に処理して、メッセージのイベント順および最後に受信されたメッセージの特徴に基づいて、挿入位置の現在の状況を識別することができる。当然、さらに他の技術を使用して、挿入位置メッセージから挿入位置特徴情報を取得することができる。
【００４４】
上述したように、インタフェース決定モジュール２０５は、挿入位置メッセージから取得した挿入位置特徴情報を使用して、データ入力ユーザインタフェースなどユーザインタフェースの動作を制御する。例えば、挿入位置特徴情報は、Ｘ軸およびＹ軸において挿入ポイントカレットの場所を提供することができる。ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、挿入ポイントカレットの場所の近くにユーザインタフェースを配置するよう指示することができる。ユーザインタフェースの動作を制御するための挿入位置特徴情報のさらに別のアプリケーションについて、以下でより詳しく説明する。
【００４５】
挿入位置メッセージの監視に加えて、挿入位置追跡モジュール２０３は、本発明の様々な実施形態に従って他の種類のメッセージを監視することもできる。例えば、本発明の一部の実施形態では、挿入位置追跡モジュール２０３は、アプリケーションの入力フォーカスがいつ変わるかを示すフォーカス変更イベントメッセージの状況を監視することができる。ユーザインタフェース決定モジュール２０５は、フォーカス変更情報を使用して、例えば、ユーザインタフェースの可視性を変更することができる。さらに、ある状況では、挿入位置は、もはや入力フォーカスを有していないユーザインタフェースに配置されていることを示す挿入位置追跡メッセージが誤って生成され続けることがある。従って、挿入位置追跡モジュール２０３は、フォーカス変更イベントメッセージによって提供される情報を使用して、誤った挿入位置特徴情報を取り除くことができる。
【００４６】
本発明の様々な実施形態では、代わりに、またはそれに加えて、アプリケーションユーザインタフェースの境界での移動プロセスまたはサイズ変更プロセス（ウィンドウ表示ユーザインタフェースの移動またはサイズ変更など）の開始および終了を監視することができる。本発明の一部の実施形態では、例えば、挿入位置を含むアプリケーションユーザインタフェースが移動またはサイズ変更されている間に、ツール２０１が、挿入位置の場所に対するデータ入力ユーザインタフェースの場所を維持するのに、十分に速く挿入位置メッセージからの特徴情報を処理するのが難しい場合がある。従って、ツール２０１は、アプリケーションユーザインタフェースの移動またはサイズ変更の開始を示すイベントメッセージに気づき、それに応答してデータ入力ユーザインタフェースの表示を停止する。ツール２０１は、アプリケーションユーザインタフェースの移動またはサイズ変更が終了したことを示すイベントメッセージに気づくと、データ入力ユーザインタフェースを再表示することができる。
【００４７】
さらに、本発明の一部の実施形態は、アプリケーションユーザインタフェースのメニューの状態、または挿入位置の状態に影響は与えるが、挿入位置メッセージの挿入位置の特徴の変化を引き起こさないユーザインタフェース内の他の論理動作を監視することができる。例えば、アプリケーションユーザインタフェースの固定メニューが稼動された場合、挿入ポイントは、そのメニューに引き続き表示され得る。しかし、アプリケーションユーザインタフェースは、挿入ポイントが固定メニューにある間入力データを受け付けない。従って、ユーザインタフェース決定モジュール２０５は、挿入ポイントが固定メニューに配置されている間、データ入力パネルインタフェースの表示を停止することができる。当然、本発明のさらに別の実施形態では、アプリケーションまたはアプリケーションをホストするシステムの状況に関するさらに他のイベントメッセージを監視し、それに応答することができる。
【００４８】
（データ入力ユーザインタフェースの振舞い）
（概要）
上述したように、本発明の様々な実施形態による挿入位置追跡ツールを使用して、データ入力ユーザインタフェースの任意の特徴を制御することができる。例えば、本発明の一部の実施形態によるツールは、挿入位置の状況に基づいて、データ入力パネルなどのユーザインタフェースの位置および外観を制御することができる。本発明の様々な環境によるこうした特定の特徴の実装形態について、以下で詳しく説明する。
【００４９】
（ユーザインタフェースの配置）
本発明の様々な実施形態による挿入位置制御ツール２０１の１つの機能は、挿入位置の位置特徴に基づいて作業スペースのどこかに、データ入力パネルなどのデータ入力グラフィカルユーザインタフェースを配置する能力である。本発明の一部の実施形態では、作業スペースは、ユーザに表示される任意のスペースでよい。あるいは、作業スペースは、データ入力グラフィカルユーザインタフェースがユーザから入力データを受け取ることができる任意のスペースでもよい。例えば、データ入力グラフィカルユーザインタフェースがデジタイザ１６５のある面にわたるスタイラス１６６の動きを介して入力データを受け取る場合、作業スペースは、スタイラス１６６の動きを検出することができるその面の部分に対応するスペースとすることができる。
【００５０】
従って、本発明の一部の実施形態による挿入位置制御ツール２０１は、ユーザインタフェースからのデータが入力されるコントロールの近くにデータ入力グラフィカルユーザインタフェースを配置することができる。例えば、コントロールがエディットコントロールである場合、挿入位置制御ツール２０１のいくつかの実施形態は、データ入力ユーザインタフェースをエディットコントロールの近くに配置することができ、その結果ユーザは、ユーザインタフェースおよびコントロールへのデータの入力の両方を同時に見ることができる。この機能は、例えば、ユーザがデータ入力ユーザインタフェースを使用してフォームなど広いエリアにわたって広がる様々なエディットコントロールにデータを入力しているときに特に有用である。
【００５１】
図５は、アプリケーションユーザインタフェースのコントロールへのデータ入力に使用できる１つの種類のデータ入力グラフィカルユーザインタフェースを示している。データエントリグラフィカルユーザインタフェースは、本明細書ではデータ入力パネル５０１と呼ばれ、境界５０３を含む。境界５０３の内側が書き込み面５０５である。当業者にはわかるように、ユーザは、スタイラス１６６など、適切なポインティング装置を使用して電子インクを面５０５上に書き込むことができる。電子インクを、アプリケーションのユーザインタフェースへの挿入前に、テキストとして認識することができる。または、電子インクを、電子インクの形態でアプリケーションに直接入力することができる。（本発明の実施形態による一部のデータ入力パネルでは、書き込み面は、スタイラスからの接触に応答して電子インクを生成するだけの場合がある）。本発明の様々な実施形態では、スタイラスによって示された特定のジェスチャを、代わりにある機能を実行するコマンドとして認識する場合もある。データ入力パネル５０１は、送信ボタン５０７、複数のコントロールボタン５０９、および補助インタフェースボタン５１１および５１３も含む。
【００５２】
ユーザが書き込み面５０５上に電子インクを書き込んだ後、データ入力パネル５０１は、所定の期間の後、電子インクをテキストに変換する。しかし、ユーザは、認識プロセスのスピードアップを望む場合、ポインティング装置を使用して送信ボタン５０７を活性化させてもよい。テキストは、電子インクから認識されると、一般にアプリケーションの挿入位置に挿入される。認識されたテキストを挿入位置に挿入することに加えて、ユーザは、コントロールボタン５０９を使用して、文字以外のアクションも挿入位置で実施することができる。さらに、コントロールボタン５０９を使用して、ユーザは、挿入ポイントを既存のテキストにわたって前方または後方に移動させ、削除し、バックスペースし、改行を作成することができる。
【００５３】
以下でより詳しく説明するように、補助インタフェースボタン５１１および５１３の活性化によって、データ入力パネル５０１に、それぞれ数字および記号を含む補助ソフトキーボードを表示するよう命令し、クローズボタン５１５を活性化させることによってデータ入力パネル５０１を閉じる。データ入力パネル５０１は、面選択ボタン５１７および５１９も含む。以下でも詳しく説明するように、面選択ボタンによってユーザは、データ入力パネル５０１によって表示されるデータ入力面の間を切り換えることができる。図５で、書き込み面ボタン５１７が活性化されると、データ入力パネル５０１に、書き込み面５０５を表示するよう促す。
【００５４】
図６Ａは、アプリケーションのグラフィカルユーザインタフェースの一例を示している。この図からわかるように、アプリケーションのグラフィカルユーザインタフェースが表示される作業スペースは、境界６０１を有する。上述したように、境界６０１は表示エリアの縁とすることができる。あるいは境界６０１は、データ入力ユーザインタフェースの入力データを受け付けることができるエリアに対応する表示スペースの縁とすることができる。これもまたこの図からわかるように、アプリケーションのユーザインタフェースは、３つのエディットコントロール６０３〜６０７を含み、それぞれは境界ボックスによって境界が定められている。各境界ボックスの下には、それぞれ関連付けられているエディットコントロール６０３〜６０７に入力すべきデータを識別するタイトル６０９〜６１３がある。従って、図６Ａで示すアプリケーションのユーザインタフェースは、例えばユーザに個人情報を要求するコンピュータ上にレンダリングされたフォームでもよい。
【００５５】
ユーザは、エディットコントロールにデータを挿入したいとき、最初に、例えばスタイラスやマウスなどのポインティング装置を使用してエディットコントロールに挿入ポイントを設定する。次に図６Ｂを参照すると、例えば、エディットコントロール６０３にデータを挿入することを望んでいるユーザは、エディットコントロール６０３の境界内に挿入ポイント６１５を設定する。典型的には、エディットコントロール内に挿入ポイントを配置することによって、コンピュータのオペレーティングシステムが入力フォーカスをそのエディットコントロールにシフトする。つまり、オペレーティングシステムは、ユーザによる将来のデータ入力がそのエディットコントロールに引き渡されることを認識する。詳しく上述したように、挿入位置追跡モジュール２０３は、挿入ポイント６１５の状況の変化を検出する。
【００５６】
より詳細には、挿入位置追跡モジュール２０３は、コントロール６０５を提供するアプリケーションが今フォーカスしていることを示すフォーカス変更メッセージを検出する。さらに、挿入位置追跡モジュール２０３は、挿入ポイント６１５がコントロール６０５内にあり、挿入ポイントの場所が作業スペース６０１内（またはコントロール６０５内）に配置されていると判定する。挿入ポイントの状況の決定に応答して、本発明の様々な実施形態によるユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データをエディットコントロール６０５に入力するために、データ入力パネル５０１を表示するよう指示する。以下で詳しく説明するように、共有グラフィカルユーザインタフェースの特徴は、ユーザインタフェースを制御するオブジェクトによって提供されるデータに応じて異なる。
【００５７】
本発明の一部の実施形態では、ユーザインタフェース決定モジュール２０５は、ユーザが挿入位置をエディットコントロール内に配置するときはいつでも、データ入力パネル５０１を表示するようユーザインタフェースアプリケーションプログラミングインタフェース２０７に指示することができる。しかし、本発明の別の実施形態では、ユーザインタフェース決定モジュール２０５は、ユーザがスタイラスでコントロール内に挿入位置を配置したことのみに応答して、データ入力パネル５０１を表示するようユーザインタフェースアプリケーションプログラミングインタフェース２０７に指示することができる。挿入ポイント６１５がスタイラスのポインティング装置で配置されたときのみデータ入力パネル５０１を提供することによって、ユーザインタフェース決定モジュール２０５は、ユーザがキーボードやマウスなどの異なるデータ入力ツールを使用しているときに、データ入力パネル５０１が表示されないようにする。従って、データ入力パネル５０１は、実際にデータをコントロールに入力するのに必要なときのみに表示される。
【００５８】
挿入位置追跡モジュール２０３が、エディットコントロール６０５が入力フォーカスを受けていると判定したとき、ユーザインタフェース決定モジュール２０５は、エディットコントロール６０５に対して特定の位置にデータ入力パネル５０１を表示するようにユーザインタフェースアプリケーションプログラミングインタフェース２０７に指示することができる。例えば、ユーザインタフェース決定モジュール２０５は、データ入力パネル５０１の最も近い水平方向の境界の縁と、エディットコントロール６０５の最も近い水平方向の境界の縁との間の垂直方向のオフセットを指定することができる。同様に、ユーザインタフェース決定モジュール２０５は、データ入力パネル５０１の最も近い垂直方向の境界の縁と、エディットコントロール６０５の最も近い垂直方向の境界の縁との間の水平方向のオフセットを指定することができる。本発明の一部の実施形態では、ユーザインタフェース決定モジュール２０５は、データ入力パネル５０１の高さおよび幅を指定して、関連のエディットコントロールの近くにあるままで所定の作業スペース内に確実に収まるようにすることさえできる。
【００５９】
実施形態の例では、スペースが作業スペースの境界６０１内で使用可能な場合、ユーザインタフェース決定モジュール２０５は、データ入力パネル５０１をエディットコントロール６０５の境界の下側に、右側にシフトさせて表示するようユーザインタフェースアプリケーションプログラミングインタフェース２０７に指示する。例えば、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１の上側の境界を、エディットコントロール６０５の下側の境界の０．２５インチ（０．６３５ｃｍ）に相当するピクセル下方に配置するよう指図することができる。同様に、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１の左側の垂直方向の境界をエディットコントロール６０５の左側の垂直方向の境界の１インチ（２．５４ｃｍ）の１／１６に相当するピクセル右方に配置するように指図することができる。
【００６０】
この位置構成は、特に、アプリケーションが様々なエディットコントロールを備えるフォームを表示しているときに便利である。データ入力パネル５０１をエディットコントロール６０３の下側に、わずかに右側にシフトさせて配置することにより、データ入力パネル５０１は、エディットコントロール６０５の近くに配置されたまま、しかし、エディットコントロール６０５に入力されるテキストを見るユーザの視界を妨げることはない。また、この配置によって、ユーザは、エディットコントロール６０５の少なくとも一部をエディットコントロール６０５のすぐ下で見ることができ、その結果ユーザは、エディットコントロール６０５へのデータ入力を忘れることもない。さらに、エディットコントロール６０５は部分的に可視であり、その結果ユーザは、スタイラスを使用して入力フォーカスをエディットコントロール６０５に移動させコントロールをターゲットにすることができる。さらに、エディットコントロール６０５に関連付けられたタイトル６０９が左寄せの場合、データ入力パネル５０１を右側にシフトさせた位置に配置することによって、ユーザは、タイトル６０９の少なくとも最初の数文字を見ることができ、従って、ユーザがどのデータをエディットコントロール６０５に入力すべきかを覚えておくのを助ける。
【００６１】
データ入力パネル５０１が表示されると、ユーザは、データ入力パネル５０１の書き込み面を使用して、テキストをエディットコントロール６０５に入力することができる。例えば、図６Ｃに示すように、ユーザは、名前「John Doe」を電子インク６１７で書き込み面に手書きするかもしれない。所定の時間の後、またはユーザが送信ボタン５０７を活性化させた場合、データ入力パネル５０１は、インク６１７からテキストを認識する。次いで、図６Ｄに示すように、データ入力パネル５０１は、認識されたテキスト６１９をエディットコントロール６０５に挿入する。
【００６２】
本発明の様々な実施形態で、ユーザインタフェース決定モジュール２０５は、データ入力パネル５０１のデフォルトの位置を使用すると関連するエディットコントロールを隠さざるを得ない状況を補償することさえできる。例えば、図７に示すように、データ入力パネル５０１を使用してエディットコントロール６０７にテキストを挿入している。エディットコントロール６０７は作業スペースの境界６０１のすぐ上にあるため、データ入力パネル５０１をエディットコントロール６０７の下に挿入することはできない。この状況で、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１をエディットコントロール６０７の上側に、右側にシフトさせた位置にレンダリングするよう指示することができる。より具体的には、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に垂直方向の負のオフセットを提供し、それによってデータ入力パネル５０１はエディットコントロール６０７の上側に配置されるようになる。
【００６３】
同様に、データ入力パネル５０１をエディットコントロールの右側にシフトさせて表示する余裕が十分ない場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１をエディットコントロールの左側にシフトさせてレンダリングするよう指示することができる。例えば、図８に示すように、エディットコントロール６０５は、作業スペースの境界６０１の垂直方向部分に近すぎて、データ入力パネル５０１をエディットコントロール６０５の右側にシフトさせて表示することができない。代わりに、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１をエディットコントロール６０５の左側にシフトさせて配置するよう指示する。つまり、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に水平方向の負のオフセット値を提供する。従って、データ入力パネル５０１は、背後にあるエディットコントロール６０５を完全には隠さない。また、アプリケーションがそのユーザインタフェースの右辺に沿ってエディットコントロールを含んでいる場合、これらのエディットコントロールの右寄せされたタイトルは、本発明のこれらの実施形態によるデータ入力パネル５０１を使用するユーザには、依然として部分的に可視である。同様に、データ入力パネル５０１をエディットコントロールの下側に、左側にシフトさせて表示する余裕が十分ない場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、図９に示すように、データ入力パネル５０１をエディットコントロールの上側に、左側にシフトさせて表示するよう指示することができる。
【００６４】
場合によっては、ユーザは、データ入力パネル５０１を使用して、データをマルチラインエディットコントロールに入力したいことがある。本発明の様々な実施形態によれば、データ入力パネル５０１を、上記のシングルラインエディットコントロールを基準にして配置したのと同じように、マルチラインエディットコントロールを基準にして配置することができる。しかし、マルチラインエディットコントロールが大きすぎてデータ入力パネル５０１をマルチラインエディットコントロールの上側または下側に配置できない場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１をエディットコントロール自体の中に配置するよう指示することができる。例えば、挿入ポイント６１５がマルチラインエディットコントロールの上半分（あるいは作業スペースの上半分）に配置されている場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１をマルチラインエディットコントロールの一番下の位置（または作業スペース内の一番下の使用可能な位置）に配置するよう指示することができる。
【００６５】
同様に、挿入ポイント６１５がマルチラインエディットコントロールの下半分（または作業スペースの下半分）に配置されている場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力パネル５０１をマルチラインエディットコントロールの一番上の位置または作業スペース内の一番上の使用可能な位置に配置するよう指示することができる。しかし、当業者にはわかるように、ユーザを混乱させる、あるいはユーザの作業の流れおよびデータの入力を妨害するのを避けるために、使用中、データ入力パネル５０１の動きを最小限に抑えることが有利である。従って、本発明の様々な実施形態では、ユーザが挿入ポイント６１５をマルチラインエディットコントロールの上半分から下半分に、またはその逆に移動させたときだけデータ入力パネル５０１を配置し直す。
【００６６】
（ユーザインタフェースの外観）
データ入力グラフィカルユーザインタフェースのサイズおよび位置を指定することに加えて、本発明の様々な実施形態によるユーザインタフェース決定モジュール２０５は、データ入力グラフィカルユーザインタフェースの外観を指定することもできる。従って、本発明の様々な実施形態によるユーザインタフェース決定モジュール２０５は、表示されたデータ入力パネル５０１に含まれる特徴を決定することができる。
【００６７】
ここで図５に戻ると、データ入力パネル５０１は、上述したように、異なる２つ以上のデータ入力面を提供することができる。データ入力パネル５０１は、その図に示すように書き込み面５０５を表示しているとき、書き込み面５０５にわたるスタイラスの動きに対応する電子インクを生成する。一方、データ入力パネル５０１は、キーボード面を表示している場合、ソフトキーボード上で活性化される各キーに対応するテキストの文字を生成する。上述したように、ユーザは、面ボタン５１７，５１９を活性化させることによってこれらの面の間を前後に切り換えることができる。しかし、本発明の様々な実施形態では、ユーザインタフェース決定モジュール２０５は、入力フォーカスがコントロールにシフトされたときにデータ入力パネル５０１が最初に特定の面を表示することを指定することができる。
【００６８】
例えば、アプリケーションは、パスワードや製品の型式番号など、数字および文字のランダムな組合せを受け取るエディットコントロールを含むことができる。この種のデータでは、書き込み面５０５は、データを入力するのに最適な面ではないことがある。多くの手書き認識器では、ランダムな文字を認識することは困難である。さらに、多くのパスワードエディットコントロールは、そのデータを正確には表示せず、代わりに「＊」など単一の文字のみを表示して、傍観者があるユーザのパスワードをうっかり見ることを防ぐようにする。従って、ユーザの手書きが誤って認識された場合、ユーザは、認識結果を見てどの文字が誤って認識されているかを判断することさえできない。本発明の様々な実施形態では、挿入位置追跡モジュール２０３が、挿入位置はこの種類のコントロール内に配置されていると判定した場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、最初にキーボード面を表示するよう指示することができる。キーボード面は、ユーザに、各種数字および文字を入力するのにより信頼性の高い技術を提供するためである。
【００６９】
書き込み面５０５またはキーボード面の最初の表示を指定することに加えて、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７によって表示できる任意の面の最初の表示または永続的な表示を指定することができる。例えば、図１０は、アジア言語ユーザが使用するデータ入力パネル１００１を示す。単一エリアを備える書き込み面５０５の代わりに、このデータ入力パネル１００１の書き込み面は、ユーザが単一のアジア言語文字を各エリア１００３に書き込むことができるように複数の書き込みエリア１００３を同時に表示する。従って、挿入位置追跡モジュール２０３が、挿入位置はデータをアジア言語文字の形で受け取るように構成されているエディットコントロールに配置されていることを検出した場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７がアジア言語のデータ入力パネル１００１を最初に表示するよう指定することができる。ラテン語書き込み面５０５に加えて、アジア言語書き込み面をデータ入力パネル５０１に含めることができることに注意されたい。従って、本発明の一部の実施形態では、ユーザは、アジア言語書き込みエリア１００３、ラテン語書き込み面５０５、およびキーボード面の間で切り換えることができる。
【００７０】
さらに別の実施形態では、任意の数の様々な特化された面を使用することができる。例えば、挿入位置追跡モジュール２０３が、挿入位置はＵＲＬアドレスを受け取るように構成されているブラウザのエディットコントロール内にあることを検出した場合、ユーザインタフェース決定モジュール２０５は、文字列「ｗｗｗ．」、「．ｃｏｍ」、「．ｎｅｔ」、「．ｏｒｇ」、および「．ｇｏｖ」のキーを含むソフトキーボードの表示を指定することができる。同様に、ユーザインタフェース決定モジュール２０５は、例えばデータ入力パネル５０１がパスワードや部品の型式番号のランダムな文字をよりよく認識するのを助けるために、ラテン語ユーザ用の分割された書き込み面を有する面の表示を指定することができる。また、本発明の様々な実施形態によるユーザインタフェース決定モジュール２０５は、ユーザインタフェースが電子インクをテキストに変換することなく電子インクを集める面を含むことを指定することもできる。この種類の面は、例えばユーザの原本の署名を捕捉するときに有用となり得る。
【００７１】
本発明の様々な実施形態で使用するデータ入力ユーザインタフェースは、所望の任意のソースから実施できることに注意されたい。例えば、ユーザインタフェースの異なる面は、ユーザインタフェース決定モジュールからの指示に応答してユーザインタフェースをレンダリングするユーザインタフェースアプリケーションプログラミングインタフェースによって提供することができる。あるいは、ユーザインタフェース決定モジュールは、１または複数の面を、ユーザインタフェースアプリケーションプログラミングインタフェースに提供することができる。さらに、アプリケーションは、１または複数の面をユーザインタフェース決定モジュールに提供し、その面をユーザインタフェースアプリケーションプログラミングインタフェースに提供することができる。本発明の一部の実施形態では、ユーザインタフェースアプリケーションプログラミングインタフェースは、ユーザインタフェース自体をインスタンス化する実行可能構成要素とすることができる。さらに、本発明の一部の実施形態では、ユーザインタフェースアプリケーションプログラミングインタフェースをまったく除外することができる。こうした実施形態では、ユーザインタフェース決定モジュールは、データ入力グラフィカルユーザインタフェース自体をレンダリングすることができる。
【００７２】
インタフェース面の表示を指定することに加えて、本発明の様々な実施形態では、挿入位置制御ツール２０１は、データ入力ユーザインタフェースが任意の特徴を最初に、または永続的に表示することを指定することができる。例えば、データ入力パネル５０１は、補助キーボードボタン５１１および５１３を含む。補助キーボードボタン５１１が活性化すると、データ入力パネル５０１は、図１１に示すように、数字０〜９、「，」文字、および「．」文字を含む補助キーボード１１０１を表示する。同様に、補助キーボードボタン５１７が活性化すると、データ入力パネル５０１は、図１２に示すように、様々な記号のキーを含む補助記号キーボード１２０１を表示する。本発明の様々な実施形態では、挿入位置制御ツール２０１は、データ入力パネル５０１が挿入位置の状況に応じてこれらのボタン、またはユーザに便利となり得る任意の追加の補助表示を表示または非表示できるようにすることを指定することができる。
【００７３】
さらに、本発明の様々な実施形態による挿入位置制御ツール２０１は、単にデータ入力ユーザインタフェース内の構成要素の構成を定義するだけとすることができる。例えば、図１３に示すデータ入力パネル５０１の特徴は、図５に示すデータ入力パネル５０１のものと逆である。典型的には、この構成は、右手または左手で書き込む際のユーザの好みに基づく。ただし、この構成は、ユーザインタフェース決定モジュール２０５によって指定することもできる。さらに、挿入位置制御ツール２０１は、挿入位置の検出された状況に基づいて、データ入力パネルの手書きの認識にバイアスをかけて特定のコントロールの認識の精度を向上させるために疑似事実または他のヒューリスティックスの使用を指定することができる。例えば、挿入位置追跡モジュール２０３が、挿入位置がユーザの年齢を受け取るコントロール内に配置されていると判定した場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７が、入力電子インクを文字ではなく数字として認識するようにデータ入力パネルにバイアスをかける疑似事実を使用することを指定することができる。
【００７４】
本発明の一部の実施形態では、ユーザインタフェース決定モジュール２０５は、ユーザに表示するために、インタフェースの一部または全体をユーザインタフェースアプリケーションプログラミングインタフェース２０７に提供することに注意されたい。あるいは、挿入位置制御ツール２０１は、データ入力ユーザインタフェースの特徴をユーザインタフェースアプリケーションプログラミングインタフェース２０７に提供することができる。つまり、ユーザインタフェース決定モジュール２０５は、所定の値をユーザインタフェースアプリケーションプログラミングインタフェース２０７に提供し、ユーザインタフェースアプリケーションプログラミングインタフェース２０７は、これらの特徴に基づいて以前に格納されたユーザインタフェースをレンダリングする。
【００７５】
例えば、本発明の一部の実施形態では、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に高さ、幅、水平方向のオフセット、垂直方向のオフセットの値を提供することができる。上述したように、ユーザインタフェースアプリケーションプログラミングインタフェース２０７は、水平方向および垂直方向のオフセット値をユーザインタフェースアプリケーションプログラミングインタフェース２０７に提供して、挿入ポイントを含むエディットコントロールに対するデータ入力パネルの場所を定義することができる。水平方向のオフセット値のデフォルトは、例えば、１インチ（２．５４ｃｍ）の１／１６に相当するピクセルとすることができ、垂直方向のオフセット値のデフォルトは、０．２５インチ（０．６３５ｃｍ）に相当するピクセルとすることができる。高さの値は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、テキストパネルユーザインタフェースの高さを提供する。本発明の様々な実施形態では、様々な画面解像度に適したパネルの一貫した外観サイズを維持するために、高さプロパティのデフォルト値を、例えば、９６ｄｐｉのディスプレイでは１５７ピクセル、１２０ｄｐｉのディスプレイでは１９６．２５ピクセル、１３３ｄｐｉのディスプレイでは２１７．５１ピクセルとすることができる。同様に、幅の値は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７にデータ入力パネルの幅を提供する。本発明の一部の実施形態では、様々な画面解像度に適したパネルの一貫した外観サイズを維持するために、幅プロパティのデフォルトの値を、９６ｄｐｉのディスプレイでは５７０ピクセル、１２０ｄｐｉのディスプレイでは７１２．５ピクセル、１３３ｄｐｉのディスプレイでは７８９．７ピクセルとすることができる。
【００７６】
ユーザインタフェース決定モジュール２０５は、さらに、ユーザインタフェースアプリケーションプログラミングインタフェース２０７にデータ入力パネルの左縁の水平方向の位置を提供する左側の値、およびユーザインタフェースアプリケーションプログラミングインタフェース２０７にデータ入力パネルの上縁の垂直方向の位置を提供する上側の値を含むことができる。また、ユーザインタフェース決定モジュール２０５は、入力パネルの可視状態を取り出す、あるいは設定する可視プロパティを含むこともできる。従って、挿入位置追跡モジュール２０３が、挿入ポイントはアプリケーションが入力データを受け取らない可能性があるような状況（例えば、挿入ポイントが前に固定されたメニューリスト内に配置されているなど）であると判定した場合、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７が入力パネルを非表示するように可視値を変更することができる。
【００７７】
上述したプロパティに加えて、本発明の様々な実施形態による挿入位置制御ツール２０１は、挿入位置の状況に基づいてデータ入力グラフィカルユーザインタフェースの特徴を設定する任意の所望のプロパティを指定することができることを理解されたい。例えば、挿入位置追跡モジュール２０３は、特定の認識辞書、入力された手書きの認識にバイアスをかける疑似事実ヒューリスティック、一般的な、または特定のコントロールに挿入されるテキストを認識するための特定の認識エンジンの使用、あるいはユーザが新しい手書きを入力するのをやめるのを待つことなくユーザインタフェースが入力された手書きのバックグラウンド認識を行うようにする命令など、ユーザインタフェースに１または複数の認識コンテキストの特徴の使用を指定することができる。さらに、挿入位置追跡モジュール２０３は、ユーザインタフェースに、認識されたテキストを戻す割り当てられた認識タイムアウト値、特定の電子インクの濃さまたは色を使用させる、またキーボード面の所望のキーを強調表示させるプロパティを指定することができる。挿入位置制御ツール２０１によって指定されたプロパティまたはメソッドによって、さらに入力パネルは、インクを直接コントロールに挿入できる、またはすでにコントロールに挿入されているインクにアクセスできるようになる。また、挿入位置制御ツール２０１は、データ入力パネルに複数行を書き込み面に表示させる、またはユーザが自発的にデータ入力パネルを閉じるかどうかを決定することもできる。
【００７８】
また、上述したプロパティに加えて、本発明の様々な実施形態による挿入位置制御ツール２０１は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、様々なアクションを実行するよう指示することができる。例えば、挿入位置制御ツール２０１は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、未処理の任意の手書きに対して直ちに手書き認識を行い、認識結果を、挿入位置を含むエディットコントロールに送信するよう指示することができる。挿入位置制御ツール２０１は、例えば、挿入位置追跡モジュール２０３が、挿入位置がその既存のコントロールから動かされたことを検出したとき、または挿入位置追跡モジュール２０３がアプリケーションはシャットダウンしていることを検出したときに、このアクションを使用することができる。
【００７９】
さらに、挿入位置制御ツール２０１が、Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Versionオペレーティングシステムなど、テキストサービスフレームワークを提供するオペレーティングシステムとともに使用されている場合、挿入位置制御ツール２０１は、挿入位置追跡モジュール２０３が挿入位置はリッチエディットコントロールまたはインクエディットコントロールに（つまりテキストサービスをサポートするエディットコントロールとともに）配置されていると判定したときにテキストサービスフレームワークを実行可能にすることができる。当業者にはわかるように、テキストサービスフレームワークは、様々なメタデータをテキストに関連付けることができる。例えば、テキストが手書きまたは音声から認識された場合、そのテキストは別の認識選択を有する。アプリケーションがテキストサービスフレームワークをサポートしている場合、アプリケーションがテキストを受信したとき、そのテキストに関連付けられている任意のメタデータも受信し、維持する。従って、挿入位置制御ツール２０１はユーザインタフェースアプリケーションプログラミングインタフェース２０７に、結び付けられているコントロール上で適切なテキストサービスフレームワーク（Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Versionオペレーティングシステムとともに使用するCommon Text Frameworkなど）を開始するよう指示する。
【００８０】
修正機能の提供とともに、テキストサービスフレームワークを使用して、認識された入力データが確実にその宛先エディットコントロールと正確に一致するようにすることもできる。より具体的には、リッチエディットコントロールまたはインクエディットコントロールがCommon Text Frameworkを呼び出したとき、Common Text Frameworkは、認識されたテキストをコントロールと関連付ける、その後認識されるテキストのメタデータを作成する。従って、入力フォーカスがコントロールからシフトされた後でさえ、Common Text Frameworkは、認識されたテキストをコントロールと一致させ、認識されたテキストが確実にコントロールに挿入されるようにすることができる。しかし、Common Text Frameworkでは、挿入位置制御ツール２０１は、リッチエディットコントロールに、Common Text Frame workへのＯＬＥインタフェースを要求するよう指示するメッセージが与えられていることを確実にする必要がある（つまりリッチエディットコントロールは、ＣＯＭインタフェースへのポインタにＣＯＭの特徴にアクセスするよう要求する必要がある）ことに注意されたい。
【００８１】
（データユーザインタフェースの呼出）
データ入力ユーザインタフェースなどのユーザインタフェースの外観または他のプロパティを決定することに加えて、挿入位置の特徴または他のイベント情報を使用して、ユーザインタフェースがどのように呼び出されるかを制御することもできる。例えば、本発明の一部の実施形態では、挿入位置追跡モジュール２０３は、デジタイザ１６６の面に対するスタイラス１６５の場所に関するイベントメッセージを監視することができる。この情報に基づいて、ツール２０１は、スタイラスまたはペンが挿入位置を含むコントロールに関連付けられている境界エリア内で動いている否かを決定することができる。それに応答して、ユーザインタフェース決定モジュール２０５は、ペンが境界エリアの内側で動いているか外側で動いているかに従って、インタフェースアプリケーションプログラミングインタフェース２０７に、データ入力ユーザインタフェースを自動的に表示または非表示するよう指示することができる。この境界エリアは、コントロールのまさに境界に接することができる、あるいはペンが可視のコントロールの境界に近づくだけでよいようにより大きいエリアをカバーするようにすることができる。
【００８２】
さらに、ペンが挿入位置を含むコントロールの範囲に移動するとき、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、データ入力ユーザインタフェースをすぐに、あるいはわずかの遅延の後で表示するよう指示することができる。遅延によってユーザは、他の隣接するコントロールを対象としているときに挿入位置を含むコントロールにわたって、またはその上をペンでドラッグし、その結果ユーザが挿入位置を含むコントロールの内側またはその上で瞬間的にペンを持つことによって、データ入力ユーザインタフェースにアクセスしたいことを明示的に示したときにのみ、データ入力ユーザインタフェースが表示されるようにすることができる。本発明の代替実施形態では、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、ペンが全画面の範囲内にあるときにのみデータ入力ユーザインタフェースが可視になるように、ペンが全表示エリアの範囲内にあるときにのみデータ入力ユーザインタフェースを表示するよう指示することができる。
【００８３】
本発明のさらに別の実施形態によれば、ユーザインタフェース決定モジュール２０５は、挿入位置がいくつかの種類のコントロール内に配置されているとき、または挿入位置が特定の種類であるときに、データ入力ユーザインタフェース表示ターゲットを作成することができる。例えば、挿入位置が挿入ポイントである場合、ユーザは、挿入ポイントの後にテキストを追加するために挿入位置を配置しているかもしれない。従って、ユーザがデータ入力パネルにアクセスして新しいテキストを挿入することを望んでいるという想定で、ユーザインタフェース決定モジュール２０５は、データ入力パネルを直ちにユーザに提示することができる。しかし、挿入位置が既存テキストの選択である場合、ユーザは、テキストを削除またはコピーし、または選択したテキストをすでにコピーしている別のテキストに置き換えたいだけかもしれない。従って、ユーザインタフェース決定モジュール２０５は、データ入力パネルを直ちにユーザに提示せず、代わりに後でデータ入力パネルにアクセスするためのターゲットをユーザに提供することができる。従って、ユーザが選択したテキストを削除、またはコピーすること、または前にコピーしたテキストに置き換えることだけを望んでいる場合、データ入力パネルを直ちに表示しても、ユーザの作業フローを妨害することはない。
【００８４】
さらに、ユーザインタフェース決定モジュール２０５は、ペンまたはスタイラス（または他の適切なポインティング装置）の位置に関連するイベントメッセージを監視して、ペンまたはスタイラス（または他のポインティング装置）がデータ入力ユーザインタフェースおよび表示ターゲット上、あるいは一部の実施形態ではその近くをいつ移動したかを決定することができる。それに応答して、ユーザインタフェース決定モジュール２０５は、ユーザインタフェースアプリケーションプログラミングインタフェース２０７に、ペン（または他のポインティング装置）がターゲットまたはデータ入力ユーザインタフェース上（もしくはその近く）に配置されている間のみにデータ入力ユーザインタフェースを表示するよう指示することができる。本発明の一部の実施形態では、例えば、データ入力ユーザインタフェース表示ターゲットは、四角形、円形、あるいは他の任意の形状とすることができ、挿入位置を含むコントロールの上、下、左、右に、および／またはそれに重なるように配置することができる。この場合もまた、ターゲットをすぐに、または遅延の後に表示し、次いでデータ入力ユーザインタフェースをすぐに、または遅延の後に表示することができる。
【００８５】
（結論）
本発明は、本発明を実行するいくつかの特定の様式を含む特定の例に関連して説明してきたが、上記で説明したシステムおよび技術の変形および置換が多数あることを当業者であれば理解できよう。従って、本発明の意図および範囲は、大筋で添付の特許請求の範囲に記載のものと解釈されるべきである。
【図面の簡単な説明】
【００８６】
【図１】本発明の様々な実施形態の実施に使用できる一般的な動作環境を示す図である。
【図２】本発明の様々な実施形態による挿入位置制御ツールを示す図である。
【図３】図２に示した挿入位置制御ツールとともに使用できる挿入位置追跡モジュールを示す図である。
【図４Ａ】本発明の様々な実施形態による挿入位置の状況を監視する方法を説明するフロー図である。
【図４Ｂ】本発明の様々な実施形態による挿入位置の状況を監視する方法を説明するフロー図である。
【図５】本発明の様々な実施形態によるデータ入力パネルの一例を示す図である。
【図６Ａ】本発明の様々な実施形態とともに使用できるアプリケーションユーザインタフェースでのエディットコントロールの使用の一例を示す図である。
【図６Ｂ】図６Ａに示したエディットコントロールへのテキストの挿入を示す図である。
【図６Ｃ】図６Ａに示したエディットコントロールへのテキストの挿入を示す図である。
【図６Ｄ】図６Ａに示したエディットコントロールへのテキストの挿入を示す図である。
【図７】本発明の様々な実施形態によるエディットコントロール境界ウィンドウに対するデータ入力パネルの代替の配置を示す図である。
【図８】本発明の様々な実施形態によるエディットコントロール境界ウィンドウに対するデータ入力パネルの代替の配置を示す図である。
【図９】本発明の様々な実施形態によるエディットコントロール境界ウィンドウに対するデータ入力パネルの代替の配置を示す図である。
【図１０】アジア言語の書き込み面を備えるデータ入力パネルの例を示す図である。
【図１１】補助数字キーパッドを備えるデータ入力パネルの例を示す図である。
【図１２】補助記号キーパッドを備えるデータ入力パネルの例を示す図である。
【図１３】反対向きのテキスト入力パネルの例を示す図である。
【符号の説明】
【００８７】
２０１  挿入位置制御ツール
２０３  挿入位置追跡モジュール
２０５  ユーザインタフェース決定モジュール
２０７  ユーザインタフェースアプリケーションプログラミングインタフェース
２０９  テキストサービスフレームワークインタフェース
２１１  ＭＳＨＴＭＬコントロール
２１３  ＭＳＡＡアプリケーションプログラミングインタフェース
２１５  Ｗｉｎ３２アプリケーションプログラミングインタフェース
２１７  ＩＭＥインタフェース
３０１  検索スレッド
３０３  イベントメッセージキュー
３０５  タイミングスレッド
【図１】
2004234651.tif 000003
【図２】
2004234651.tif 000004
【図３】
2004234651.tif 000005
【図４Ａ】
2004234651.tif 000006
【図４Ｂ】
2004234651.tif 000007
【図５】
2004234651.tif 000008
【図６Ａ】
2004234651.tif 000009
【図６Ｂ】
2004234651.tif 000010
【図６Ｃ】
2004234651.tif 000011
【図６Ｄ】
2004234651.tif 000012
【図７】
2004234651.tif 000013
【図８】
2004234651.tif 000014
【図９】
2004234651.tif 000015
【図１０】
2004234651.tif 000016
【図１１】
2004234651.tif 000017
【図１２】
2004234651.tif 000018
【図１３】
2004234651.tif 000019
【外国語明細書】
2004234651.tif 000020
2004234651.tif 000021
2004234651.tif 000022
2004234651.tif 000023
2004234651.tif 000024
2004234651.tif 000025
2004234651.tif 000026
2004234651.tif 000027
2004234651.tif 000028
2004234651.tif 000029
2004234651.tif 000030
2004234651.tif 000031
2004234651.tif 000032
2004234651.tif 000033
2004234651.tif 000034
2004234651.tif 000035
2004234651.tif 000036
2004234651.tif 000037
2004234651.tif 000038
2004234651.tif 000039
2004234651.tif 000040
2004234651.tif 000041
2004234651.tif 000042
2004234651.tif 000043
2004234651.tif 000044
2004234651.tif 000045
2004234651.tif 000046
2004234651.tif 000047
2004234651.tif 000048
2004234651.tif 000049
2004234651.tif 000050
2004234651.tif 000051
2004234651.tif 000052
2004234651.tif 000053
2004234651.tif 000054
2004234651.tif 000055
2004234651.tif 000056
2004234651.tif 000057
2004234651.tif 000058
2004234651.tif 000059
2004234651.tif 000060
2004234651.tif 000061
2004234651.tif 000062
2004234651.tif 000063
2004234651.tif 000064
2004234651.tif 000065
2004234651.tif 000066
2004234651.tif 000067
2004234651.tif 000068
2004234651.tif 000069
2004234651.tif 000070
2004234651.tif 000071
2004234651.tif 000072
2004234651.tif 000073
2004234651.tif 000074
2004234651.tif 000075
2004234651.tif 000076