(57)【特許請求の範囲】
【請求項１】
ユーザデータ入力を複数のアプリケーションプログラムを持つコンピュータシステムに受け入れるためのシステムであって、
複数の実行可能な入力方式であって、前記入力方式の各々は前記アプリケーションプログラム及び他の前記入力方式とは別個であって前記コンピュータシステムと関連する１つの入力デバイスから前記ユーザデータ入力を受け取るように構成されていて、前記各入力方式は前記実行可能な入力方式を定義されたインタフェースセットとインタフェース可能な他の実行可能なコードをプラグイン可能にする少なくとも１つのインタフェースをその中に含んだ前記定義されたインタフェースセットをさらに含む、前記複数の実行可能な入力方式と、
前記アプリケシーョンプログラムのウィンドウとは別個のタッチセンシティブディスプレイスクリーン上の入力パネルウィンドウであって、前記複数の実行可能な入力方式の各々が前記入力パネルウィンドウ内に対応する入力パネルを描く実行可能コードを含んだ、前記入力パネルウィンドウと、
前記定義されたインタフェースセットとインタフェース可能なマネージングコンポーネントであって、前記アプリケーションプログラムとは別個であって、
１）選択された実行可能な入力方式として前記複数の実行可能な入力方式から１つを選択し、
２）前記選択された実行可能な入力方式を活性化し、
３）前記定義されたインタフェースセットを経由して前記選択された実行可能な入力方式と通信し、
４）前記選択された実行可能な入力方式により受け取られたユーザデータに関する情報を識別し、
５）前記受け取られたユーザデータに関する情報を前記複数のアプリケーションプログラムの１つのアクティブなアプリケーションプログラムに送る
ように構成された、前記マネージングコンポーネントと、
を備え、
前記複数の実行可能な入力方式の各々は、前記タッチセンシティブディスプレイスクリーン上で選択可能で、選択された時に各入力方式に対応した前記入力パネルを前記入力パネルウィンドウ内に描くことを特徴とするシステム。
【請求項２】
請求項１に記載のシステムにおいて、前記複数の実行可能な入力方式の一つは、選択された時に、複数のキーをその上に有するキーボードを表す画像を持つ前記入力パネルを前記入力パネルウィンドウ内に描き、前記マネージングコンポーネントは、前記キーボードの前記キーに対応する画面位置でのユーザ動作を検出するように構成されていることを特徴とするシステム。
【請求項３】
請求項１に記載のシステムにおいて、前記入力パネルウィンドウの表示を選択的に表示したり隠したりするための手段をさらに具え、前記入力パネルウィンドウ上の前記入力パネルが隠された状態の部分に、前記アクティブなアプリケシーョンプログラムの少なくとも一部を表示することを特徴とするシステム。
【発明の詳細な説明】
【０００１】
（発明の分野）
本発明は一般にコンピュータシステムに関し、より詳細には、コンピュータシステムへのデータ入力に関する。
【０００２】
（発明の背景）
小型のモバイルコンピューティング装置、例えばハンドヘルドコンピュータやパームトップコンピュータなどを含めたパーソナルデスクトップアシスタントは、重要かつ一般的なユーザツールとなってきている。一般にこれらは、十分に小型になって非常に便利になってきている一方、電池電力の消費はますます少なくなっており、同時に、ますます強力なアプリケーションを稼動させることができるようになってきている。
【０００３】
このような装置のサイズが小さくなり続けていても、人間的な限界の結果として、サイズはその限界に達しつつある。例えば、ユーザデータを入力できるような全文字キーボードは、人間の指がその上の個々のキーを押すことができないほど小さくすることはできない。その結果、このような装置（例えばパームトップコンピュータ）のサイズは、標準的なユーザ用の全文字キーボードに適応することのできる大きさに制限されている。
【０００４】
ユーザ入力を受け取る装置の一部のサイズを縮小するための解決法の１つは、タッチセンシティブ（ｔｏｕｃｈ−ｓｅｎｓｉｔｉｖｅ）表示装置を提供し、それにより物理的なキーボードの必要性をほぼ排除することである。このために、アプリケーションプログラム、例えばワードプロセッサなどはキーボードを表示し、それによりユーザは、表示されたキーに対応する位置で画面に触れることによって文字を入力する。当然、タッチスクリーン装置は物理的なキーボードを備える装置と同時に使用することもでき、それにより、物理的なキーボードのキーを手で押すことによって文字を入力することもできる。
【０００５】
タッチスクリーン装置は適切なユーザデータ入力の手段を提供するが、データ入力パネルは通常、アプリケーションプログラムの一部である。すなわち、各アプリケーションはそれ自体のタッチセンシティブインタフェースを開発する必要がある。その結果、かなりの量の重複が起こる。例えば、ワードプロセッサプログラムと表計算プログラムは両方とも英数字キーボードユニットを必要とし、そのために、それぞれがそれ自体のタッチスクリーンキーボードインタフェースを備える。他のタイプのプログラム、例えば計算機プログラムなどは、数学演算を表す追加キーを有する数字キーパッドを必要とする。このことは、各プログラムをより大きく複雑にし、コンピュータシステムのリソースを消費する。
【０００６】
別法として、オペレーティングシステムが全ての仮想キーボードを供給し、それにより冗長性を排除することもできるが、これは、アプリケーションを、オペレーティングシステムから供給される仮想キーボードしか使用しないものに制限する。より新しいアプリケーション（例えばプラグインモジュールで追加されるもの）は、その特定のニーズにより適合する入力機構を提供することができない。例えば、新しいペイントブラシプログラムは、それ自体の図形入力画面を必要とすることがある。要約すると、既存のユーザデータ入力機構には、フレキシビリティと効率性との間のトレードオフが内在する。
【０００７】
（発明の目的および概要）
したがって、本発明の目的は、ユーザデータをコンピュータシステムに入力するための改良型の方法システムを提供することである。
【０００８】
本発明の他の目的は、効率性とフレキシビリティの両方を備えた、ユーザデータ入力のための方法およびシステムを提供することである。
【０００９】
これらの目的の達成において、関係する目的は、タッチセンシティブ入力機構で機能する上記のような方法およびシステムを提供することである。
【００１０】
他の目的は、複数のアプリケーションが共通の入力方式からユーザ入力を受け取ることのできる、上記のように特徴づけられた方法およびシステムを提供することである。
【００１１】
関係する目的は、各アプリケーションに対して交換可能な入力方式のセットの中から１つまたは複数の入力方式を選択できる方法およびシステムを提供することである。
【００１２】
他の目的は、費用効果が高く、信頼性および拡張性があり、実施の容易なこのような方法およびシステムを提供することである。
【００１３】
簡潔に言うと、本発明は、コンピュータシステム、例えばグラフィカルウィンドウ機能環境を有するコンピュータシステムにユーザデータ入力を受け入れるための方法およびシステムを提供する。本発明は、画像を表示するため、およびそれとのユーザ接触（またはそれに近いこと）を検出するために、タッチセンシティブ表示画面を使用することができる。グラフィカルウィンドウ機能環境に動作可能に接続される管理コンポーネントは、画面表示用の入力パネルウィンドウを作り出す。入力方式は、そのような複数の入力方式の中から選択されてインストールされ、それにより入力方式は管理コンポーネントの関数を呼び出すことができる。各入力方式は対応する入力パネル、例えばキーボードなどを含み、各入力方式がそれを入力パネルウィンドウに描く。ユーザデータが入力パネルを介して受け取られると、入力方式は管理コンポーネントの関数を呼び出してそれにユーザデータを渡し、管理コンポーネントは、それに応答して、ユーザデータをウィンドウズメッセージなどでグラフィカルウィンドウ機能環境に通信する。アプリケーションプログラムは、キーストロークなどに対応するそのメッセージを、あたかもハードウェアキーボード上で生成されたかのように受け取る。
【００１４】
他の目的および利点は、図面と共に後続の詳細な記述を読めば明らかになろう。
【００１５】
（好適実施形態の詳細な説明）
例示的な動作環境
図１および後続の考察は、本発明を実施するのに適したコンピューティング環境の簡潔で一般的な記述を提供するためのものである。本発明は、それが必要なのではないが、ハンドヘルドコンピューティング装置、例えばパーソナルデスクトップアシスタントなどによって実行されるコンピュータ実行可能命令、例えばプログラムモジュールなどの一般的なコンテキストで述べる。一般にプログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体などを含む。
【００１６】
さらに本発明は、パームトップ、デスクトップまたはラップトップパーソナルコンピュータ、ポケットベル（ｐａｇｅｒ）や電話などのモバイル装置、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な大衆消費電子製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含めた他のコンピュータシステム構成でも実施できることを、当業者は理解されたい。本発明はまた、通信ネットワークでリンクされた遠隔処理装置によってタスクが実行される分散コンピューティング環境でも実施できる。分散コンピューティング環境では、プログラムモジュールはローカル記憶装置とリモート記憶装置の両方に位置することができる。
【００１７】
図１を参照すると、本発明を実施するための例示的なシステムは、ハンドヘルドパーソナルコンピューティング装置２０などの形をとる汎用コンピューティング装置を含み、これは、処理装置２１、システムメモリ２２、ならびにシステムメモリを含めた様々なシステムコンポーネントを処理装置２１に結合させるシステムバス２３を含む。システムバス２３は、メモリバスまたはメモリ制御器、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含めた、いくつかのタイプのバス構造のどれでもよい。システムメモリは、リードオンリーメモリ（ＲＯＭ）２４およびランダムアクセスメモリ（ＲＡＭ）２５を含む。ＲＯＭ２４には、起動中などにハンドヘルドコンピュータ２０内の要素間で情報を転送するのを助ける基本ルーチンを含むベーシックインプット／アウトプットシステム２６（ＢＩＯＳ）が記憶されている。
【００１８】
ＲＯＭ２４および／またはＲＡＭ２５には、オペレーティングシステム２８（好ましくはウィンドウズＣＥ）、１つまたは複数のアプリケーションプログラム２９、他のプログラムモジュール３０、およびプログラムデータ３１を含めた、いくつかのプログラムモジュールが記憶されている。ユーザは、入力装置、例えば適した入力検出回路３３を備えるタッチセンシティブ表示画面３２などを通して、ハンドヘルドコンピュータ２０にコマンドおよび情報を入力することができる。他の入力装置には、適したオーディオインタフェース３５に接続されたマイクロフォン３４、および物理的（ハードウェア）キーボード３６（図２）が含まれることがある。タッチセンシティブ表示装置３２の出力回路もまた、ビデオドライビング回路３７を介してシステムバス２３に接続される。表示装置３２に加えて、この装置は、他の周辺出力装置、例えば少なくとも１つのスピーカ３８やプリンタ（図示せず）も含むことがある。
【００１９】
他の外部入力装置または外部出力装置３９、例えばジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナなどを、システムバス２３に結合されたＲＳ−２３２などのシリアルポート４０およびシリアルポートインタフェース４１を通して処理装置２１に接続することもできるが、これらは他のインタフェース、例えばパラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などによって接続することもできる。ハンドヘルド装置２０はさらに、フラッシュカードメモリ（図示せず）を含むことがある、あるいは適切な接続ポート（例えばスロット）４２およびインタフェース４３によってそれに接続することができる。装置２０のユーザ操作を補助するために、（例えばアプリケーション切替用の）いくつかのハードウェアボタン４４、例えばスイッチ、ボタンなどがさらに提供でき、これらもまた、適したインタフェース４５を介してシステムに接続される。他のコンピュータ、プリンタなど（図示せず）を含めた他の周辺装置との通信を補助するために、赤外線ポート４６および対応するインタフェース／ドライバ４７が提供される。図示した様々なコンポーネントおよび接続は例示的なものであり、他のコンポーネント、および通信リンクを確立する手段も使用できることを理解されたい。
【００２０】
ソフト入力パネル
ソフト入力パネル（ｓｏｆｔ  ｉｎｐｕｔ  ｐａｎｅｌ）アーキテクチャは、物理的なキーボード３６ではなく装置２０のタッチスクリーン３２を介して、文字、キーベースおよび他のユーザデータを入力できるように主に設計されている。しかし、理解できるように、所与のコンピュータシステム２０は、図２の破線で囲んだ部分３６で表した物理的なキーボードを任意選択および追加で含むこともできる。さらに、明らかになるであろうが、「ソフト入力パネル」は直接的に入力を受け取るように構成された実際のタッチセンシティブパネルである必要はなく、その代わりに別の入力装置、例えばマイクロフォン３４などを介して操作することもできる。例えば、話された言葉をマイクロフォン３４で受け取り、認識し、オンスクリーン（ｏｎ−ｓｃｒｅｅｎ）ウィンドウすなわちソフト入力パネルでテキストとして表示することもできる。
【００２１】
図２に、本発明の一実施態様によるＳＩＰアーキテクチャを実装するブロック図を示す。コンピュータシステム２０は、オペレーティングシステム（ＯＳ）２８、例えばグラフィカルウィンドウ機能環境６０などを含む。このようなグラフィカルウィンドウ機能環境６０は一般に、キーボード３６、マウス（図示せず）、ディジタイザ（図示せず）などを含めた様々な装置を介してユーザ入力を受け取るように動作する。グラフィカルウィンドウ機能環境６０は、このようなユーザ入力を「入力フォーカス」を有するアプリケーションに、通常、キーボード文字イベントの形で提供することができる。いくつかのアプリケーション２９がコンピュータシステムによって実行できるが、現在稼動中の１つのアプリケーションが「入力フォーカス」を有し、入力を受け取るものとすることに留意されたい。
【００２２】
本発明の一態様によれば、本アーキテクチャは、ＳＩＰマネージャ５８を採用して、フレキシブルな単一のインタフェースを複数の異なる入力方式６４に提供する。ＳＩＰマネージャ５８は一般に、選択された入力方式６４からグラフィカルウィンドウ機能環境６０（例えばウィンドウズＣＥオペレーティングシステム２８）にキーストロークを提供する。グラフィカルウィンドウ機能環境６０はユーザ入力データを受け取ると、アプリケーション２９（すなわち現在そのウィンドウが入力フォーカスを有するアプリケーション）に、そのユーザ入力データに対応する情報を、そのアプリケーションのウィンドウのメッセージ待ち行列に配置されるそのキーストローク、マウス、または他のメッセージの形で送る。このようなメッセージの受渡しはウィンドウズのプログラミングで周知であり、「Ｐｒｏｇｒａｍｍｉｎｇ  Ｗｉｎｄｏｗｓ  ９５」、Ｃｈａｒｌｅｓ  Ｐｅｔｚｏｌｄ、マイクロソフトプレス（１９９６）に述べられており、これを参照により本明細書に組み込む。したがって、キーボード入力を扱うことのできるアプリケーションはどれでも、適切に構成されたどんな入力方式６４によっても使用することができる。もっとも、オプションのキーボード３６がある場合、キーストロークはキーボードドライバ６２からグラフィカルウィンドウ機能環境６０に直接提供され、それにより、ソースに関する情報がそのアプリケーションに提供されることなく、適切なキーストロークが、アクティブなアプリケーションのウィンドウのメッセージ待ち行列内に同様に配置される。
【００２３】
入力方式６４には、例えば、異なる様々な表示可能キーボード（ソフトキーボード）、計算機、公式および／または方程式エディタ、化学記号テンプレート、音声認識、手書き認識、略記記号認識（「グラフィティ（Ｇｒａｆｆｉｔｉ）」など）、またはアプリケーション用に最適化された他の入力方式（例えばバーコードリーダ）などを含めることができる。ＳＩＰマネージャ５８は、以下により詳細に述べるように、ユーザがＳＩＰウィンドウ（パネル）５０（図７）の開いた状態と閉じた状態を切り替えることを可能にするユーザインタフェースを提供する。ＳＩＰマネージャ５８はまた、使用可能な入力方式の表示可能なリストからユーザ選択ができるようにするユーザインタフェースも提供する。ユーザインタフェースと対話するユーザは入力方式６４を選択することができ、それに応答して、ＳＩＰマネージャ５８は、選択された入力方式６４をロードして呼び出す。好適一実施形態では、各入力方式は、ＩＩＭコールバック６１およびＩインプットメソッド６３として示すＣＯＭ（Ｃｏｍｐｏｎｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）インタフェースを通してＳＩＰマネージャ５８と通信する。ＣＯＭオブジェクトは、具体的に定義されるインタフェースを通してアクセスすることのできるカプセル化されたメソッドおよびデータを有するデータ構造体を含む。ＣＯＭオブジェクトの詳細な記述は、Ｋｒａｉｇ  Ｂｒｏｃｋｓｃｈｍｉｄｔ（マイクロソフトプレス）「Ｉｎｓｉｄｅ  ＯＬＥ」第２版という名称の参照文献に提供されており、これを参照により本明細書に組み込む。
【００２４】
一般に、ＳＩＰウィンドウ５０がユーザによってオン／オフ間で切り替えられるとき、以下により詳細に述べるように、ＳＩＰマネージャ５８は、それに対応してＳＩＰウィンドウ５０を開く／閉じるように、Ｉインプットメソッド機構６３を通して、選択された入力方式６４に通知する。新しい入力方式が選択されると、ＳＩＰマネージャ５８は、以前に選択された入力方式のいずれかに終了（ｅｘｉｔ）するように機構６３を通して知らせ、新しく選択された入力方式をロードする。インタフェース６３はまた、ＳＩＰマネージャ５８によって使用されて、これも以下に詳細に述べるように、選択された入力方式特有の情報を得る。
【００２５】
選択された入力方式６４もまた、ＩＩＭコールバック機構６１を介してＳＩＰマネージャ５８に情報、例えばどの１文字または複数文字がユーザによって入力されたかを、その１文字または複数文字がキーボード選択、手書き認識、音声認識、公式エディタ、計算などのどれによって生成されたかにかかわらず通信することができる。このような文字入力は一般に、ＳＩＰマネージャ５８に渡され、好ましくは（ウィンドウズＣＥの場合）ユニコード文字として（あるいはそれに変換されて）ＳＩＰマネージャによって受け取られ、グラフィカルウィンドウ機能環境６０に出力される。コマンドキー情報、例えばキーボード上の「Ｃｔｒｌ」などもまた、入力方式６４によってインタフェース６１を介してＳＩＰマネージャ５８に提供することができる。
【００２６】
ＳＩＰおよび入力方式に特有の情報もまたＳＩＰマネージャ５８を通して通信することができ、以下により詳細に述べるように、アプリケーションがＳＩＰと共に動作するように最適化されているとき（すなわち「ＳＩＰアウェア（ＳＩＰ−ａｗａｒｅ）」）、最終的にそのフォーカスされたアプリケーション２９に通信することができる。
【００２７】
システムは、図３のステップに概略的に表すように動作する。アプリケーションが選択されてフォーカスを有すると（ステップ３００〜３０２）、ステップ３０４で、それに対する入力方式６４が選択される。入力方式６４はユーザが選択することもでき、あるいはデフォルトの入力方式を特定のアプリケーションで使用するために選択することもできることに留意されたい。さらに、入力方式６４は、前のアプリケーション用に選択した後で留まるものとすることもできる、すなわち、ユーザが様々なアプリケーション間で切り替えるときに特定の入力方式が常に存在する。いずれの場合でも、入力方式６４が選択されると、それはＳＩＰウィンドウ５０を表示する。
【００２８】
ステップ３０６でユーザがデータを入力すると、以下に述べるＩＩＭコールバック機構６１を介して適切なデータがＳＩＰマネージャ５８に渡される。入力方式６４は、ステップ３０６で受信したデータを最初に処理することもできることに留意されたい。一例として、ある特定の入力方式６４は、バーコード記号を、ディジットを表すユニコード文字に変換し、別の入力方式は、数学的な入力をユニコードの結果に変換し（例えば入力「３＋６＝」はＳＩＰマネージャ５８に「９」を送る）、別の入力方式は方程式エディタである（例えば、文字「Ｓｑｒｔ」は平方根記号を表す単一のユニコードの値に変換される）場合もある。いずれかのこのような処理の後、入力方式６４はこれらのディジットをＳＩＰマネージャ５８に渡し、ＳＩＰマネージャ５８は、これらのディジットをグラフィカルウィンドウ機能環境６０に渡す。アプリケーションは、使用された入力方式にかかわらず、ユーザがあたかも物理的なキーボード上でこれらのディジットを入力したかのようにグラフィカルウィンドウ機能環境６０から文字データを受け取る。
【００２９】
図５〜７に示すように、システムのソフト入力パネル（ＳＩＰ）機能は、可視ウィンドウ５０（図７）、可視ＳＩＰボタン５２、および様々なメソッドおよび関数（以下に述べる）を一括して含む。図７に示すように、ＳＩＰウィンドウ５０は、ユーザの（またはアプリケーションプログラムの）要求時に隠すかまたは示すことのできる入力方式６４によって提供される方形の領域である。可視ＳＩＰボタン５２は、タスクバー５６などの上に位置し、ユーザがＳＩＰウィンドウ５０を表示するかまたは隠すためのタッチセンシティブインタフェースを提供する。したがって図４の状態図に表すように、ユーザがＳＩＰボタン５２を軽く叩くと、ウィンドウ５０は、開いた可視状態（図７）と閉じて隠れた状態（図５）の間で切り替わる。現在の設計は、表示装置３２のタスクバー５６のすぐ上の位置に固定された（ドッキングされた）横２４０ピクセル、縦８０ピクセルのＳＩＰウィンドウ５０を実装している。以下で明らかとなるが、ソフト入力パネル設計は、ＳＩＰウィンドウ５０の他のサイズまたは位置もサポートする。
【００３０】
このために、オペレーティングシステム２８は専用スレッド（ＳＩＰマネージャ５８）を生み出し、専用スレッドは、それ自身をＳＩＰスレッドとしてウィンドウズＣＥシステムに登録する。スレッドは、ＳＩＰウィンドウ５０を生成し、他のＳＩＰの初期設定を行い、次いで、メッセージループに入って、ＳＩＰウィンドウ５０内のメッセージおよびユーザインタフェース動作に応答する。スレッドはまた、入力方式６４のウィンドウにメッセージをディスパッチする役目も果たし、入力方式６４内に立ち寄って、特別なＳＩＰウィンドウとして応答することになるウィンドウを入力方式６４が作り出すことを可能にする。
【００３１】
ＳＩＰマネージャ５８スレッドは、システムから特別な状況を与えられる。例えば、ＳＩＰマネージャ５８スレッドによって生み出されたウィンドウは一番上のウィンドウであり、ＳＩＰウィンドウ５０が表示されている間にタスクバー５６が自動的に隠すモードでアクティブになっているときなどを除いて、普通は他のウィンドウで隠されない。この場合、ＳＩＰウィンドウ５０はその現在位置に表示され続け、タスクバー５６はＳＩＰウィンドウ５０の一番上に表示される。より一般的には、ＳＩＰ制御用のどんなユーザインタフェース要素も、その制御するユーザインタフェース要素とＳＩＰウィンドウがオーバラップするときには、ＳＩＰウィンドウ５０の上（下ではなく）に配置することができる（かつ、そうなるべきである）。
【００３２】
さらに、ＳＩＰウィンドウ５０（およびあれば子ウィンドウ、例えば押しボタン、テキスト入力フィールド、スクロールバーなど）は、軽く叩かれるとき、従来のプログラムウィンドウがそうなるようには入力フォーカスを受けないことになる。このようにしてユーザは、システムフォーカスを変えずにＳＩＰウィンドウ５０と対話することができる。理解できるように、ユーザがＳＩＰウィンドウ５０にデータを入力する度にシステムのフォーカスが変わることは望ましくない。同じ理由で、すなわちＳＩＰウィンドウ５０を出すためにＳＩＰボタン５２を軽く叩くことによってフォーカスのあるウィンドウがフォーカスを失うことは望ましくないため、ＳＩＰボタン５２もまたフォーカスの変更を生じない。
【００３３】
本発明の一態様によれば、ＳＩＰシステムは、指定の入力方式６４の選択的なインストールを可能にする。上に概して述べたように、各入力方式６４は、それによってユーザがタッチスクリーン表示装置（または他の何らかの入力装置）を介して文字、テキストまたは他のユーザデータを提供する交換可能なコンポーネントである。より具体的には、ＳＩＰマネージャ５８は、入力方式６４の選択的なインストールを可能にするＣＯＭインタフェースを露出することが好ましい。入力方式６４は、システムによって作り出されるＳＩＰウィンドウ５０内部の空間を占める。
【００３４】
入力方式６４は、Ｉインプットメソッドインタフェースを実装するコンポーネントオブジェクトモデル（ＣＯＭ、Ｃｏｍｐｏｎｅｎｔ  ｏｂｊｅｃｔ  ｍｏｄｅｌ）オブジェクトを含むことが好ましい。しかし、入力方式６４およびＳＩＰマネージャ５８は、何らかの機構を通して、例えば関数呼出しを受け取り、それに応答し、それを生成することなどによって他の１つと通信が可能な、ほぼどんなコンポーネントも含むことができる。
【００３５】
入力方式６４は、ＳＩＰウィンドウ５０内に描き、ＳＩＰウィンドウ５０内のユーザ入力に応答することを担当する。通常、入力方式６４はユーザ入力に応答して、その入力を文字に変換し、次いでそれらの文字は、与えられるＳＩＰ関数を介してＳＩＰマネージャ５８に送られる。一例として、ある入力方式６４は、図７に示すデフォルトのクワーティ（ＱＷＥＲＴＹ）（英字）キーボード６６を含む。より具体的には、この入力方式６４は、画面３２にキーボード６６の画像を表示し、そのキーボード６６上で軽く叩くのを（画面座標として検出して）文字に変換し、それらはＳＩＰマネージャ５８に、したがってシステムに送られる。入力方式はアプリケーション供給業者が書くことができ、ＣＯＭコンポーネントインストレーションプロシージャを使用してシステムに加えられる。
【００３６】
ユーザは、可視ＳＩＰウィンドウ５０内に表される入力方式６４と対話して、システム入力を作り出す。図４の状態図によって最もよく表されるように、かつ、図６に示すように、ユーザは、ポップアップ式の入力方式リスト７２をＳＩＰウィンドウ５０内に提供する、タスクバー５６上のＳＩＰメニューボタン７０を軽く叩くことにより、異なる入力方式を選択することができる。ユーザはまた、コントロールパネルアプレット（図示せず）などを介して、使用可能な入力方式から選択することもできる。ＳＩＰコントロールパネルアプレットは、レジストリおよび以下に述べる、与えられるＳＩＰアウェアの機能を使用してオペレーティングシステム２８と通信する。
【００３７】
以下に詳細に述べるように、様々なコンポーネントは、システムアプリケーション２９がＳＩＰの状態の変化に応答することを可能にする関数、構造体、およびウィンドウメッセージを共同して与える。この機能を使用してそれ自身をＳＩＰの変化に応じて適切に調節するアプリケーション２９を、「ＳＩＰアウェア」と見なす。適切であるとき、その他のアプリケーションがＳＩＰアウェアであることもあるが、なお、それらの元のサイズを維持することを選択する（したがって、ＳＩＰウィンドウ５０に部分的に隠される）。さらに、以下にも述べるように、アプリケーションがプログラム的にＳＩＰの状態を改変することを可能にする関数も与えられる。
【００３８】
しかし、アプリケーション２９は、本発明から利益を得るために、ＳＩＰシステムを自覚している必要はない。本発明の一態様では、それによって受け取られたデータが、ハードウェア入力装置、例えばキーボード３６などから発したものか、あるいはソフト入力パネルウィンドウ５０内のユーザ動作（例えば画面３２および検出回路３３によって検出された接触またはそれに近いこと）によるものかをアプリケーションが通常は認識しないものである。これは、アプリケーションがＳＩＰアウェアであるかどうかにかかわらず、適切であるほぼどんな入力方式でもアプリケーションが動作することを可能にする。
【００３９】
ＳＩＰマネージャ５８によってインストールされる入力方式６４の動作を助ける機構の説明に移るが、ＳＩＰアウェアのアプリケーション２９は、いつＳＩＰウィンドウ５０が状態を変更し、新しい現在のＳＩＰウィンドウ５０がどんな状態であるかを通知される。状態には、ＳＩＰウィンドウ５０の状況が可視か隠されているかについてと、ＳＩＰウィンドウ５０がドッキング状態か浮動状態かについてと、ＳＩＰウィンドウ５０のサイズおよび位置が含まれる。下の表に示すように、データ構造体（ＳＩＰＩＮＦＯ）はこのＳＩＰ情報を含む。
【００４０】
【数１】
0004074431.tif 000002
【００４１】
ｃｂＳｉｚｅフィールドはアプリケーションプログラム２９によって埋められ、ＳＩＰＩＮＦＯ構造体のサイズを示す。このフィールドは将来の拡張を可能にするが、過去の側への互換性もなお維持し、ＳＩＰＩＮＦＯ構造体のサイズはまさに、システムのコンポーネントにバージョンを示すのに使用することができる。ｆｄｗＦｌａｇｓフィールドはＳＩＰウィンドウ５０の状態情報を表し、３つのフラグの組合せとすることができる。設定されるＳＩＰＦ＿ＯＮフラグは、ＳＩＰウィンドウ５０が可視である（すなわち隠されていない）ことを示し、設定されるＳＩＰＦ＿ＤＯＣフラグは、ＳＩＰウィンドウ５０がドッキングされている（すなわち浮動でない）ことを示す。設定されるＳＩＰＦ＿ＬＯＣＫＥＤフラグは、ＳＩＰウィンドウ５０がロックされている、すなわちユーザがその可視状態または隠された状態を変更できないことを示す。所与の実施形態は浮動のまたはロックされたＳＩＰウィンドウを許容しないこともあるが、システム内にその能力があることに留意されたい。
【００４２】
ｒｃＶｉｓｉｂｌｅＤｅｓｋｔｏｐフィールドは画面座標中の方形を含み、ＳＩＰウィンドウ５０で隠されていない画面デスクトップ６８の領域を表す。ＳＩＰウィンドウ５０が浮動する（ドッキングされていない）場合、この方形はユーザ作業領域に相当する。ＳＩＰウィンドウ５０のサイズ変更に応じようとする全画面（ｆｕｌｌ−ｓｃｒｅｅｎ）アプリケーションは一般に、それらのウィンドウ方形データ構造体（「ｒｅｃｔ」）の値をＲＥＣＴデータ構造体の値に設定することができる。ＳＩＰウィンドウ５０がドッキングされており、縁部（上、下、左、または右）の全体を占めない場合、この方形は、ＳＩＰウィンドウ５０で隠されない最大の方形を表す。しかし、システムは、ＲＥＣＴデータ構造体に含まれない、使用可能なデスクトップ空間６８を提供することもできる。
【００４３】
次に、ｒｃＳｉｐＲｅｃｔフィールドは画面座標中の方形を含み、ＳＩＰウィンドウ５０のサイズおよび位置を表す。アプリケーション２９は、それが浮動するＳＩＰウィンドウ５０または縁部全体を占めないドッキングされたＳＩＰウィンドウ５０にラップアラウンドすることを必要としない限り、通常はこの情報を使用しない。
【００４４】
ｄｗＩｍＤａｔａＳｉｚｅフィールドは、次のフィールドであるＰｖＩｍＤａｔａメンバ、すなわち入力方式特有のデータへのポインタによって示されるデータのサイズを含む。データは入力方式６４によって定義される。
【００４５】
ＳＩＰウィンドウ５０の状態が変化するとき、すなわち新しい入力方式が選択されたとき、かつ／あるいは可視性、ドッキング、またはサイズの変化が起こったときは、図８のステップ８００に概略的に表すように、全ての上部レベルにあるウィンドウにメッセージＷＭ＿ＳＥＴＴＩＮＧＣＨＡＮＧＥが送られる。このようにして、アプリケーション２９は、メッセージに応答してそのサイズを調節するなどにより、それ自身を新しい状態のＳＩＰウィンドウ５０に対して調節することができる。このために、このメッセージと共に、いつＳＩＰ情報が変更したかを示すためのフラグＳＰＩ＿ＳＥＴＳＩＰＩＮＦＯが送信され、いつ現在の入力方式が変更したかを示すために別のフラグＳＰＩ＿ＳＥＴＣＵＲＲＥＮＴＩＭが送信される。図８のステップ８０２で示すように、メッセージがＳＩＰに関係するものか、それとも別のタイプの設定変更メッセージか（その場合はステップ８０４で扱われる）を判定するためにフラグが検査される。ＳＩＰに関係する場合は、パフォーマンスの理由から、前景にある現在アクティブでないアプリケーションは、これらのＳＩＰの変更をキャッシュする（ステップ８０６〜８０８）。アプリケーションのウィンドウがアクティブである場合、アプリケーションはそのサイズおよび／またはウィンドウを調節することができる（ステップ８１０〜８１２）。例えば図５および６に示すように、図７のＳＩＰウィンドウ５０が隠れており、アクティブなアプリケーション２９が通知を受けると、アプリケーション２９は、追加デスクトップ空間６８を使用してアナログ時計の文字盤などの情報をさらに表示することができる。アクティブでないときにＳＩＰの変更をキャッシュされたアプリケーション２９は、アクティブにされたときに現在のＳＩＰの状態を照会し、続いて、返された情報に従って適切な仕方でそれ自身を調節することができることに留意されたい。
【００４６】
ＳＩＰマネージャ５８に照会するために、もう１つの関数、ＳＨＳｉｐＩｎｆｏが提供され、それによって、アプリケーション２９はＳＩＰウィンドウ５０および入力方式６４に関する情報を決定することができる。一般に、この関数が成功すれば返り値はゼロ以外の数値となり、この関数が失敗すれば返り値はゼロに等しくなって、ＧｅｔＬａｓｔＥｒｒｏｒ（）呼出しを介してさらに詳しいエラー情報が入手できることになる。
【００４７】
次の表にこの呼出しの構造体を述べる。
【００４８】
【数２】
0004074431.tif 000003
【００４９】
ｕｉＡｃｔｉｏｎパラメータには、ＳＩＰ＿ＳＥＴＳＩＰＩＮＦＯ、ＳＰＩ＿ＧＥＴＳＩＰＩＮＦＯ、ＳＰＩ＿ＳＥＴＣＵＲＲＥＮＴＩＭ、およびＳＰＩ＿ＧＥＴＣＵＲＲＥＮＴＩＭが含まれる。ＳＩＰ＿ＳＥＴＳＩＰＩＮＦＯは、ｐｖＰａｒａｍがＳＩＰＩＮＦＯ構造体を指すことを示す（以下に述べる）。ｃｂＳｉｚｅ、ｄｗＩｍＤａｔａＳｉｚｅ、およびｐｖＩｍＤａｔａＳｉｚｅは、ＳＨＳｉｐＩｎｆｏ関数の呼出し前に埋められる。この呼出しに応答して、ＳＩＰＩＮＦＯ構造体は、現在のＳＩＰのサイズ、状態、および可視デスクトップ方形で埋められる。ｄＷＩｍＤａｔａＳｉｚｅとｐｖＩｍＤａｔａが両方ともゼロ以外である場合、データサイズおよびポインタは入力方式６４に送られる。入力方式６４が呼び出されても入力方式特有のデータを提供しない場合、あるいは渡されたデータの形式またはサイズが入力方式６４によって認識される形式でない場合、ＳＨＳｉｐＩｎｆｏ関数の呼出しは失敗する（ゼロを返す）。サイズまたは形式が入力方式６４にサポートされる場合、入力方式６４は、ｐｖＩｍＤａｔａによって指されたバッファを入力方式特有のデータで埋める。通常、アプリケーション２９はｐｖＩｍＤａｔａＳｉｚｅをゼロに、ｐｖＩｍＤａｔａをＮＵＬＬに設定する。
【００５０】
ＳＰＩ＿ＳＥＴＳＩＰＩＮＦＯのｕｉＡｃｔｉｏｎは、ｐｖＰａｒａｍがＳＩＰＩＮＦＯ構造体を指すことを示す。ＳＩＰウィンドウ５０のサイズおよび状態は、ＳＩＰＩＮＦＯ構造体に指定された値に設定される。ＳＩＰの値を変更する前に、アプリケーション２９は、まずＳＰＩ＿ＧＥＴＳＩＰＩＮＦＯでＳＨＳｉｐＩｎｆｏを呼び出すことによって現在のＳＩＰの状態を得なければならず、次いで、ＳＰＩ＿ＳＥＴＳＩＰＩＮＦＯの呼出しをする前に変更することを所望する具体的なＳＩＰの状態の値をいずれでも変更することになる。構造体中でｃｂＳｉｚｅフィールドはＳＩＰのサイズに設定され、ｐｖＩｍＤａｔａＳｉｚｅとｐｖＩｍＤａｔａが両方ともゼロでない場合、データサイズおよびポインタは入力方式６４に送られる。ＳＨＳｉｐＩｎｆｏの呼出しは、入力方式６４が呼び出されても入力方式特有のデータの設定を許容しない場合、あるいは、渡されたデータの形式またはサイズがそれによって認識されない形式である場合には、失敗する。サイズおよび形式が入力方式６４にサポートされる場合、入力方式６４はデータを使用して、入力方式特有の情報を設定する。通常、アプリケーションは、ｐｖＩｍＤａｔａＳｉｚｅをゼロに、ｐｖＩｍＤａｔａをＮＵＬＬに設定する。
【００５１】
ＳＰＩ＿ＳＥＴＣＵＲＲＥＮＴＩＭは、ｐｖＰａｒａｍが、ＳＩＰがそれに切り替わる入力方式６４のＣＬＳＩＤを指定するＣＬＳＩＤ構造体を指すことを示す。ＣＬＳＩＤが有効でない場合、または指定された入力方式６４がロードできない場合、呼出しは失敗し（ゼロに等しい値を返し）、デフォルトの入力方式６４（例えばクワーティのようなキーボード６６）がロードされる。
【００５２】
最後に、ＳＰＩ＿ＧＥＴＣＵＲＲＥＮＴＩＭのｕｉＡｃｔｉｏｎは、ｐｖＰａｒａｍが、現在選択されている入力方式６４のＣＬＳＩＤを受け取るＣＬＳＩＤ構造体を指すことを示す。
【００５３】
Ｉインプットメソッドインタフェース
Ｉインプットメソッドは、入力方式６４コンポーネントによって実装されるインタフェースである。ＳＩＰマネージャ５８はこのインタフェースのメソッドを呼び出して、入力方式６４に状態変更を通知し、入力方式６４に動作および情報を要求する。一般に、呼び出された方法が成功すれば成功が返され、逆に、方法が失敗すれば失敗の結果が返される。次の表に、このＩインプットメソッドインタフェースで使用できるメソッド呼出しを述べる。
【００５４】
【数３】
0004074431.tif 000004
【００５５】
入力方式６４は通常、ＳＩＰウィンドウ５０の空間をレンダリングするかまたはユーザ動作に応答する前に、Ｓｅｌｅｃｔ（）、ＧｅｔＩｎｆｏ（）、ＲｅｃｅｉｖｅＳｉｐＩｎｆｏ（）、およびＲｅｇｉｓｔｅｒ  Ｃａｌｌｂａｃｋ（）メソッド呼出しを順々に受け取ることになる。ＳＩＰウィンドウ５０が表示されると（すなわち開かれると）Ｓｈｏｗｉｎｇ（）がＳＩＰマネージャ５８によって呼び出され、その後、入力方式６４は、ＷＭ＿ＰＡＩＮＴメッセージを発行してＳＩＰウィンドウ５０をレンダリングすることになる。
【００５６】
Ｓｅｌｅｃｔ（）メソッドは、入力方式６４がＳＩＰの中に選択されたときに呼び出される。入力方式６４は一般に、この呼出しに応答して、いずれかの所望の初期設定を行う。入力方式は、この呼出しに応答して、ＳＩＰウィンドウ５０のクライアント領域全体を描くのを担当し、したがって通常、そのウィンドウおよび画像リスト（表示可能なビットマップ、例えばアイコンなどを集めたもの）を生成する。例えば、ＳＩＰウィンドウ５０のウィンドウハンドルが、このＳｅｌｅｃｔ（）メソッド呼出しに付随するパラメータとして入力方式６４に提供され、入力方式は通常、ＳＩＰウィンドウ５０の子ウィンドウを作り出す。入力方式６４にはまた、メソッド呼出しが成功である場合にゼロ以外に設定され、成功でない場合にゼロに設定される値へのポインタも入力方式６４から提供される。
【００５７】
Ｄｅｓｅｌｅｃｔ（）メソッドは、入力方式６４がＳＩＰの外に選択されたときに呼び出される。入力方式のウィンドウは、この呼出しに応答して抹消されなければならず、入力方式６４は通常、この時に他のクリーンアップがあればそれも行う。
【００５８】
Ｓｈｏｗｉｎｇ（）メソッドは、呼出しから返されるとＳＩＰウィンドウ５０が示されるようにする。ＳＩＰウィンドウ５０はこの呼出しの前には見えず、ＳＩＰウィンドウ５０が示されると、このウィンドウおよびその子ウィンドウはペイントメッセージを受け取ることに留意されたい。反対に、Ｈｉｄｉｎｇ（）メソッドは、呼出しから返されるとＳＩＰウィンドウ５０を隠す。したがって、Ｓｈｏｗｉｎｇ（）メソッドおよびＨｉｄｉｎｇ（）メソッドは、ＳＩＰウィンドウ５０をその開いた状態と閉じた状態の間で切り替えるのに使用される。
【００５９】
ＧｅｔＩｎｆｏ（）メソッドは、システムが入力方式６４に関する情報を要求しているときに呼び出される。要求される情報には、入力方式６４のいずれかの特別な属性を示すフラグ、入力方式６４がアクティブのときにＳＩＰボタン５２上に表示される、マスキングされたビットマップを含む２つの画像リストのハンドル、指定された画像リストに対するインデックス、および入力方式６４の好ましいサイズおよび配置を示す方形が含まれる。呼出しは、入力方式６４が適切なデータで埋めるべきデータ構造体（ＩＭＩＮＦＯ）に対するポインタであるパラメータｐｉｍｉを含む。呼出しはまた、入力方式がゼロ以外を設定して成功を、ゼロを設定して失敗を示すべき値にポインタを与える。より具体的に、ＩＭＩＮＦＯデータ構造体を次の表に表す。
【００６０】
【数４】
0004074431.tif 000005
【００６１】
ｃｂＳｉｚｅフィールドはＩＭＩＮＦＯ構造体のサイズを含み、ＧｅｔＩｎｆｏ（）呼出しを呼び出す前にＳＩＰマネージャ５８によって埋められる。ｈＩｍａｇｅＮａｒｒｏｗフィールドは、入力方式６４に対する狭い（１６×１６）マスキングされたビットマップを含む画像リストへのハンドルである。同様に、ｈＩｍａｇｅＷｉｄｅは広い（３２×１６）マスキングされたビットマップを含む画像リストへのハンドルである。ＳＩＰマネージャ５８は、現在選択されている入力方式６４を示すために、ビットマップのうちの１つを（例えばタスクバー５６上に）表示する。ＳＩＰマネージャ５８は、１６×１６または３２×１６のビットマップを、そのビットマップをどのような表示が所望であるかに応じて何回も使用することができることに留意されたい。
【００６２】
ｉＮａｒｒｏｗフィールドはｈＩｍａｇｅＮａｒｒｏｗ画像リストへのインデックスであり、いくつかの可能なビットマップのどのビットマップがその（狭い）画像リストから現在表示されるべきかを示す。同様に、ｉＷｉｄｅフィールドはｈＩｍａｇｅＷｉｄｅ画像リストへのインデックスであり、どのビットマップがその（広い）画像リストから現在表示されるべきかを示す。入力方式６４は、ＩＩＭコールバック：：Ｓｅｔｉｍａｇｅｓを呼び出すことによって、ＳＩＰタスクバーボタン５２中に表示されるビットマップの変更を開始することができることに留意されたい（以下に述べる）。
【００６３】
ｆｄｗＦｌａｇｓフィールドは、入力方式６４の、可視、ドッキング、およびロック状態（ＳＩＰＦ＿ＯＮ、ＳＩＰＦ＿ＤＯＣＫＥＤ、ＳＩＰＦ＿ＬＯＣＫＥＤ）、ならびに未来に定義される可能性のあるいずれかの特別な入力方式フラグを示す。ＳＩＰ状態フラグはＧｅｔＩｎｆｏ（）メソッドの場合には無視されるが、ＳｅｔＩｍＩｎｆｏコールバックメソッド中では、以下に述べるように使用されることに留意されたい。
【００６４】
最後に、ｒｃＳｉｐＲｅｃｔフィールドは、ＳＩＰ方形のサイズおよび配置を記述する。ＧｅｔＩｎｆｏ（）から返されたサイジングおよび配置の情報は、最初のデフォルトのサイズおよび配置を決定するときにＳＩＰが使用できる。使用されるときは、ＳｅｔＩｍＩｎｆｏコールバックメソッド（以下に述べる）が、ＳＩＰウィンドウ５０の新しいサイズおよび配置を指定する。
【００６５】
ＲｅｃｅｉｖｅＳｉｐＩｎｆｏ（）メソッドは、ＳＩＰウィンドウの現在のサイズ、配置、およびドッキング状態を含めた、ＳＩＰウィンドウに関する情報を入力方式６４に提供する。この呼出しは、ユーザ、アプリケーション２９、または入力方式６４がＳＩＰの状態を変更するときにはいつでも行われる。ＳＩＰマネージャ５８が入力方式の初期設定中にこの情報を送るとき、ＳＩＰマネージャ５８は、入力方式６４にデフォルトのＳＩＰ設定を通知する。入力方式６４はこれらのデフォルトを無視することを選択することもできるが、所与の値は、ユーザが選択した値か、あるいはそのプラットフォームに対して予想されたかまたは受諾されたＳＩＰ値として推奨された値のいずれかである。この情報を含むＳＩＰＩＮＦＯ構造体へのポインタが、この呼出しと共に渡される。
【００６６】
ＲｅｇｉｓｔｅｒＣａｌｌｂａｃｋメソッドは、入力方式６４にコールバックインタフェースポインタを渡すためにＳＩＰマネージャ５８によって提供される。言い換えれば、ＲｅｇｉｓｔｅｒＣａｌｌｂａｃｋメソッド呼出しは、ＩＩＭコールバックインタフェースポインタをパラメータとして入力方式６４に渡し、それにより、入力方式６４は、このインタフェース上のメソッドを呼び出して、以下に述べるようにＳＩＰマネージャ５８に情報を送り返すことができる。入力方式６４はコールバックインタフェースポインタを使用して、ＳＩＰマネージャ５８を介してキーストロークをアプリケーション２９に送り、そのＳＩＰタスクバーボタンのアイコン５２を変更する。
【００６７】
ＧｅｔＩｍＤａｔａ（）メソッドは、アプリケーションプログラム２９がＳＩＰにＳＩＰＩＮＦＯデータ構造体を要求し、ＳＩＰＩＮＦＯ構造体のｐｖＩｍＤａｔａのメンバにＮＵＬＬ以外のポインタを提供したときに呼び出される。アプリケーション２９は通常、何らかの特別な情報を入力方式６４に要求するときにこの呼出しが行われるようにする。２つのパラメータがこの呼出しと共に渡されるが、これらは、ｄｗｓｉｚｅすなわちｐｖＩｍＤａｔａによって指されるバッファのサイズ、およびｐｖＩｍＤａｔａすなわちアプリケーション２９中のデータのブロックへのボイド（ｖｏｉｄ）ポインタである。
【００６８】
この呼出しに伴い、アプリケーション２９は、入力方式６４がブロックを情報で埋めることを本質的に要求し、この場合、データのサイズおよび形式は入力方式６４によって定義される。この呼出しは、拡張機能または情報をアプリケーションに提供することを所望する入力方式６４を対象とする。一例として、ＳＩＰアウェアのアプリケーションは、文字がＳＩＰによって入力されたか、それとも他の何らかの手段によって入力されたかを知ることを所望する。そのため、入力方式６４は、ブロックを埋めることによってアプリケーションの要求に応じることができる。
【００６９】
ＳｅｔＩｍＤａｔａ（）メソッドは、アプリケーション２９がＳＩＰＩＮＦＯ構造体を設定し、ＳＩＰＩＮＦＯ構造体のｐｖＩｍＤａｔａのメンバにＮＵＬＬ以外のポインタを提供したときに呼び出される。アプリケーション２９は通常、何らかのデータをその中に設定するように入力方式６４に要求するときにこの呼出しが行われるようにする。この呼出しと共に渡されるパラメータは、ｄｗｓｉｚｅすなわちｐｖＩｍＤａｔａによって指されるバッファのサイズ、およびｐｖＩｍＤａｔａすなわちアプリケーション２９中のデータのブロックへのボイドポインタを含む。
【００７０】
ＩＩＭコールバックインタフェース
入力方式６４は、ＩＩＭコールバックインタフェースを使用して、ＳＩＰマネージャ５８中のメソッドを呼び出すか、現在のアプリケーションにキーストロークを主として送るか、またはタスクバー５６がＳＩＰボタン５２中に表示しようとするアイコンを変更する。入力方式６４は通常、Ｉインプットメソッドのメソッド呼出しを通して受け取られたそれへの呼出しに応答してのみ、ＩＩＭコールバックメソッドを呼び出す。概して言えば、関数が成功すれば、返り値は成功のＨＲＥＳＵＬＴとなり、逆に、関数が失敗すれば、返り値は失敗のＨＲＥＳＵＬＴとなる。
【００７１】
次の表は、ＩＩＭコールバックインタフェースを表す。
【００７２】
【数５】
0004074431.tif 000006
【００７３】
第１のコールバック、ＳｅｔＩｍＩｎｆｏ（）は、ＳＩＰタスクバーボタン５２上に示された、現在のＳＩＰを表すビットマップを変更するため、あるいはＳＩＰウィンドウ５０の、可視の／隠された状態を変更するために、入力方式６４によって呼び出される。これはまた、入力方式６４がＳＩＰウィンドウ５０のサイズ、配置、およびドッキング状態を変更したときに、通知として入力方式６４からＳＩＰマネージャ５８に送られる。この機構により、様々な入力方式６４はＳＩＰマネージャ５８にこれらのタイプの変更を知らせることができ、それによってこの２つは同期を維持することができる。一例として、入力方式６４は、ユーザがドッキング状態と浮動状態の間、あるいは１つまたは複数のサブパネル（例えば、数字に切り替えるためのボタン付きのキーボード、および／あるいは記号パネルまたは国際記号パネル）間で切り替えることを可能にするユーザインタフェース要素を備えたい場合がある。入力方式６４はこの呼出しを使用して、ＳＩＰマネージャ５８に状態の各変更を知らせる。
【００７４】
本発明に必要なのではないが、ＩＭＩＮＦＯ構造体中で渡されるすべての値は、ＳＩＰマネージャ５８によって使用される。したがって、入力方式６４は最初に、前述の先行するＲｅｃｅｉｖｅＳｉｐＩｎｆｏ（）メソッド呼出しを介して受け取られるＳＩＰＩＮＦＯ構造体中でＳＩＰマネージャ５８から提供されたＳＩＰウィンドウ５０の現在の状態を決定しなければならない。次いで、入力方式６４は、変更を望まれている設定だけを変更し、値の完全なセットをＩＭＩＮＦＯ構造体中で返さなければならない。ＳＩＰウィンドウ５０ならびに所望の入力方式６４の画像のサイズ、配置、および状態を含めた新しい入力方式６４の設定を表すＩＭＩＮＦＯ構造体へのポインタとして、ｐｉｍｉパラメータが送られる。
【００７５】
ＳｅｔＩｍＩｎｆｏ（）呼出しに応答して、ＳＩＰマネージャ５８は、ＩＭＩＮＦＯ構造体のｆｄｗＦｌａｇｓで指定されたようにＳＩＰウィンドウ５０を表示する、あるいは隠すことになる。しかし、ＳＩＰマネージャ５８は、ＳＩＰウィンドウ５０のサイズ変更または移動は要求されても行わないが、その代わりに、照会されたときに、アプリケーション２９に返されるサイズおよび配置の情報を更新することになる。指定された値が現在のＳＩＰの状態からの変更を表す場合、ＳＩＰマネージャ５８は、ＳＩＰの状態が変わったことを、前述のＷＭ＿ＳＥＴＴＩＮＧＳＨＡＮＧＥを介してアプリケーション２９に通知することになる。
【００７６】
ＳｅｎｄＶｉｒｔｕａｌＫｅｙ（）コールバックは、仮想キー、例えばタッチスクリーン表示装置３２または他の入力方式６４を介して入力される文字などに対するキーストロークをシミュレートするために、入力方式６４によって使用される。キーイベントは、現在フォーカスを有するウィンドウ（すなわち、外部キーボード上でキーが押されればキーボード入力を受け取ったであろうウィンドウ）に送られることになる。ＳｅｎｄＶｉｒｔｕａｌＫｅｙコールバックは、送られる仮想キーに対する大域的キー状態を修正し、それにより、例えば入力方式６４は、この関数を使用してＳＨＩＦＴ、ＣＯＮＴＲＯＬ、ＡＬＴキーアップおよびキーダウンのイベントを送ることができ、これらはアプリケーション２９がＧｅｔＫｅｙＳｔａｔｅ（）ＡＰＩを呼び出すときに正しく取り出されることになる。ＳｅｎｄＶｉｒｔｕａｌＫｅｙコールバックは、文字に関連のない仮想キーイベント（すなわち、ＴｒａｎｓｌａｔｅＭｅｓｓａｇｅの結果としてＷＭ＿ＣＨＡＲが送られないキー）を送るのに使用されるべきである。ＷＭ＿ＣＨＡＲ、ＴｒａｎｓｌａｔｅＭｅｓｓａｇｅ、およびキーに関係する他のメッセージは、参照文献「Ｐｒｏｇｒａｍｍｉｎｇ  Ｗｉｎｄｏｗｓ  ９５」、Ｃｈａｒｌｅｓ  Ｐｅｔｚｏｌｄ、ｓｕｐｒａに述べられていることに留意されたい。文字を生成する仮想キーがこの関数を介して送られる場合、これらは大域的キー状態によって修正されることになる。例えば、シフト状態がダウンのときに送られた仮想キーＶＫ＿５は、ある種のキーボード配列の場合に‘％‘ＷＭ＿ＣＨＡＲメッセージとなる。
【００７７】
このコールバックと共に送られるパラメータには、シミュレートするキーの仮想キーコードであるｂＶｋ、およびｄｗＦｌａｇｓが含まれる。ｄｗＦｌａｇｓは、ＳＩＰＫＥＹ＿ＫＥＹＵＰフラグ（ＷＭ＿ＫＥＹＵＰかＷＭ＿ＫＥＹＤＯＷＮのいずれかを生成するのに使用される）、ＳＩＰＫＥＹ＿ＳＩＬＥＮＴフラグ（装置でクリックが可能とされている場合でもキープレスがキーボードクリックとならない）、またはゼロの組合せとすることができる。
【００７８】
ＳｅｎｄＣｈａｒＥｖｅｎｔコールバックは、入力方式６４がフォーカスのあるウィンドウにユニコード文字を送ることを可能にし、また、アプリケーション２９がどんなＷＭ＿ＫＥＹＤＯＷＮおよびＷＭ＿ＫＥＹＵＰメッセージを受け取るべきかを決定する。これは、入力方式６４がどんな仮想キーをもいずれかの文字およびキー状態に関連付けることができるため、入力方式６４がそれ自体のキーボード配列を決定することを可能にする。したがって、本発明の一態様によれば、アプリケーション２９には、キーがあたかもキーボードから送られたように見える（すなわち、それらはＷＭ＿ＫＥＹＤＯＷＮ、ＷＭ＿ＣＨＡＲ、およびＷＭ＿ＫＥＹＵＰメッセージを得る）。したがって、ＳｅｎｄＶｉｒｔｕａｌＫｅｙ（）関数とは異なり、この関数は大域的キー状態に影響しない。一例として、入力方式６４は、ＳｅｎｄＣｈａｒＥｖｅｎｔコールバックによって、シフトされた（仮想キー）ＶＫ＿Ｃが実際にはユニコード文字０×５５６４を送ったと決定することができる。送られる第１の文字に関連付けられるシフト状態フラグ（以下に述べるｐｕＳｈｉｆｔパラメータで指定される）は、ＷＭ＿ＫＥＹＤＯＷＮかＷＭ＿ＫＥＹＵＰのいずれが生成されるかを判定する。
【００７９】
パラメータには、この関数の結果として生成されるＷＭ＿ＫＥＹＵＰまたはＷＭ＿ＫＥＹＤＯＷＮのメッセージ中で送られる仮想キーコードであるｕＶｋと、この呼出しの結果としてアプリケーション２９によって受け取られるＷＭ＿ＣＨＡＲ、ＷＭ＿ＫＥＹＵＰ、またはＷＭ＿ＫＥＹＤＯＷＮのメッセージ中で受け取られるｌＫＥＹＤａｔａパラメータに変換されるＫＥＹ状態フラグのセットであるｕＫｅｙＦｌａｇｓとが含まれる。ＫｅｙＳｔａｔｅＤｏｗｎＦｌａｇ、ＫｅｙＳｔａｔｅＰｒｅｖＤｏｗｎＦｌａｇ、およびＫｅｙＳｔａｔｅＡｎｙＡｌｔＦｌａｇキー状態フラグだけが、結果として得られるｌＫｅｙＤａｔａパラメータに変換される。ｕＣｈａｒｓパラメータは、このキーイベントに対応する文字数を表し、ｐｕＳｈｉｆｔパラメータは、送られる各文字に対応するＫＥＹ＿ＳＴＡＴＥ＿ＦＬＡＧＳを含むバッファへのポインタである。ＫｅｙＳｔａｔｅＤｏｗｎＦｌａｇビットが送られると、この関数は、ＷＭ＿ＫＥＹＤＯＷＮメッセージを生成し、そうでない場合は、ＷＭ＿ＫＥＹＵＰメッセージを生成する。最後に、ｐｕＣｈａｒｓパラメータは、送られる文字を含むバッファへのポインタである。
【００８０】
入力方式６４は、ＳｅｎｄＳｔｒｉｎｇコールバックを使用して、現在フォーカスのあるウィンドウにストリング全体を送信することができ、それにより、一連のＷＭ＿ＣＨＡＲメッセージはアプリケーション２９に記入される。入力方式６４は通常、単語または文の全体が入力されたと決定した後でこのコールバックを使用する。例えば、手書きレコグナイザ（ｒｅｃｏｇｎｉｚｅｒ）または音声レコグナイザ入力方式６４は、単語または文の全体が入力されたことを認識した後でＳｅｎｄＳｔｒｉｎｇコールバックを使用することになる。
【００８１】
ＳｅｎｄＳｔｒｉｎｇコールバックのパラメータには、送るストリングを含むストリングバッファへのポインタであるｐｔｓｚＳｔｒと、送る文字の数であるｄｗＳｉｚｅとが含まれる。この数には、送られないヌルターミネータ（ｎｕｌｌ−ｔｅｒｍｉｎａｔｏｒ）は含まれない。
【００８２】
前述の詳細な記述から分かるように、ユーザデータをコンピュータシステムに入力するための改良型の方法システムが提供される。この方法およびシステムは両方とも、効率的かつフレキシブルであり、タッチセンシティブ入力機構で機能する。このシステムおよび方法によって、複数のアプリケーションが共通の入力方式からユーザ入力を受け取ることができるが、交換可能な入力方式を、それらのセットの中から各アプリケーション用に選択することもできる。この方法およびシステムは費用効果が高く、信頼性および拡張性があり、実施が容易である。
【００８３】
本発明は様々な修正および代替構成が可能だが、その例示的なある実施形態を、図面中で示し、以上に詳細に述べた。しかし本発明は、開示した特有の形式に限定されるものではなく、逆に、本発明の趣旨および範囲を逸脱しない限りすべての修正、代替構成、および等価物をカバーするものである。
【図面の簡単な説明】
【図１】  本発明を組み込むことのできるコンピュータシステムを表すブロック図である。
【図２】  本発明の一態様による、交換可能な入力パネルを実装するための様々なコンポーネントおよびその間の接続を表すブロック図である。
【図３】  本発明の一態様による、ユーザ入力を選択された入力方式から選択されたアプリケーションへ至らせる過程を概略的に表す流れ図である。
【図４】  ＳＩＰ選択状態を概略的に表す状態図である。
【図５】  例示的なコンピューティング装置上にあるタッチセンシティブ表示画面上の表示を表す図である。
【図６】  本発明による、交換可能な入力パネルの中から選択する能力を備える例示的なコンピューティング装置上にあるタッチセンシティブ表示画面上の表示を表す図である。
【図７】  本発明による、入力パネルとしてキーボードが選択されたタッチセンシティブ表示画面上の表示を表す図である。
【図８】  ＳＩＰ状況における変更に応答して実行される一般的なステップを表す流れ図である。
【図１】
0004074431.tif 000007
【図２】
0004074431.tif 000008
【図３】
0004074431.tif 000009
【図４】
0004074431.tif 000010
【図５】
0004074431.tif 000011
【図６】
0004074431.tif 000012
【図７】
0004074431.tif 000013
【図８】
0004074431.tif 000014