(57)【要約】  ある態様の汎用ユーザインターフェースコマンドアーキテクチャは、アプリケーションがコンピューティングデバイス上のプレゼンテーションのためのコマンドがホストできるようにする。コマンドは、アプリケーションとして同じ設計者または作成者によって、あるいは他の者によって（例えば、サードパーティ開発者によって）、書くことができる。他の態様の汎用ＵＩコマンドアーキテクチャは、アプリケーションがコマンドをホストできるようにするために使用することができる、ＡＰＩ（アプリケーションプログラミングインターフェース）を記述する。他の態様の汎用ＵＩコマンドアーキテクチャは、登録されたコマンドがアプリケーションによって活動化されることが可能である活動化メカニズムを記述する。【特許請求の範囲】
【請求項１】
複数の命令を格納した１つまたは複数のコンピュータ可読媒体であって、前記命令は、１つまたは複数のプロセッサによって実行されるとき、
ユーザインターフェースを介してコマンドを提示するのに使用されるプレゼンテーションモデルのために、コマンドブローカと折衝することと、
前記折衝されたプレゼンテーションモデルに基づいて、前記コマンドに関連付けられたコマンドプロバイダを取得することと
を前記１つまたは複数のプロセッサに、引き起こすことを特徴とするコンピュータ可読媒体。
【請求項２】
前記命令は、前記コマンドが後にユーザによって呼び出されることに応答して、前記コマンドプロバイダと対話することを、前記１つまたは複数のプロセッサにさらに引き起こすことを特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項３】
前記命令は、前記コマンドブローカにコンテキスト情報を利用可能とさせることを、前記１つまたは複数のプロセッサにさらに引き起こすこと特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項４】
前記１つまたは複数のプロセッサに前記プレゼンテーションモデルを折衝させる前記命令は、
前記コマンドブローカから、前記コマンドブローカによってサポートされた１つまたは複数のプレゼンテーションモデルのリストを取得することと、
前記コマンドブローカによってサポートされた前記１つまたは複数のプレゼンテーションモデルのうち少なくとも１つを選択することと
を、前記１つまたは複数のプロセッサにさらに引き起こすことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項５】
前記１つまたは複数のプロセッサに前記プレゼンテーションモデルの折衝を引き起こす前記命令は、
前記コマンドブローカに前記選択されたプレゼンテーションモデルを通知すること
を、前記１つまたは複数のプロセッサに、さらに引き起こすことを特徴とする請求項４に記載のコンピュータ可読媒体。
【請求項６】
前記コマンドブローカに前記選択されたプレゼンテーションモデルを通知することを、前記１つまたは複数のプロセッサに引き起こす前記命令は、前記コマンドブローカによってエクスポーズされたＧｅｔＰｒｏｖｉｄｅｒメソッドを呼び出し、前記選択されたプレゼンテーションモデルを、前記ＧｅｔＰｒｏｖｉｄｅｒメソッドのパラメータとして含むことを、前記１つまたは複数のプロセッサにさらに引き起こすことを特徴とする請求項５に記載のコンピュータ可読媒体。
【請求項７】
前記複数の命令は、
前記複数の追加のコマンドブローカに関連付けられた複数の追加のコマンドを表示するのに使用されるべきプレゼンテーションモデルの折衝を、複数の追加のコマンドブローカとすることと、
前記複数の追加のコマンドに関連付けられた複数の追加のコマンドプロバイダの識別子を、前記折衝されたプレゼンテーションモデルに基づいて取得することと
を、前記１つまたは複数のプロセッサにさらに引き起こすことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項８】
前記複数の命令は、前記コマンドブローカによってサポートされない１つまたは複数のプレゼンテーションモデルをサポートするコマンドホストの一部であることを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項９】
前記１つまたは複数のプロセッサに前記コマンドブローカと折衝させる前記命令は、
コンポーネントによってエクスポーズされたモード列挙にアクセスすることと、
前記モード列挙のアクセスに応答して、前記コマンドのために前記コマンドブローカによってサポートされた複数の異なるプレゼンテーションモデルのリストを受信することと
を、前記１つまたは複数のプロセッサに、さらに引き起こすことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項１０】
前記命令は、
１つまたは複数の引数を含むオブジェクト定義を識別することと、
非リテラル引数である前記１つまたは複数の引数の各々について、前記引数に基づいた１つまたは複数の追加のオブジェクト定義を再帰的に識別することと、
前記識別されたオブジェクト定義によって定義された前記オブジェクトを、前記コマンドブローカとして生成することと
によって、前記コマンドブローカを生成することを、前記１つまたは複数のプロセッサにさらに引き起こすことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項１１】
コマンドブローカを実装する複数の命令を格納した１つまたは複数のコンピュータ可読媒体であって、前記複数の命令は、１つまたは複数のプロセッサによって実行されるとき、
リクエスタに対して、前記コマンドブローカによってサポートされた複数のプレゼンテーションモデルを識別することであって、前記コマンドブローカは特定のコマンドに関連付けられることと、
前記複数のプレゼンテーションモデルのうちのいずれかは、ユーザインターフェースを介して前記コマンドを表示するのに使用されるべきかを前記リクエスタと折衝することと
を前記１つまたは複数のプロセッサに引き起こすことを特徴とするコンピュータ可読媒体。
【請求項１２】
前記複数の命令は、
前記折衝されたプレゼンテーションモデルに基づいて、前記コマンドのためのコマンドプロバイダを作成することと、
前記リクエスタに前記コマンドプロバイダを通知することと
を、前記１つまたは複数のプロセッサに、さらに引き起こすことを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
前記１つまたは複数のプロセッサに前記コマンドプロバイダの生成を引き起こす前記命令は、前記１つまたは複数のプロセッサに前記コマンドプロバイダのインスタンス化を引き起こす命令を備えたことを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記１つまたは複数の命令は、
コマンドコンテキストにアクセスすることと、
前記コマンドコンテキストの少なくとも一部内に基づいて、前記コマンドブローカによってサポートされた前記複数のプレゼンテーションモデルのうちどれを前記リクエスタに対して識別するかを決定することと
を、前記１つまたは複数のプロセッサに引き起こすことを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１５】
前記複数のプレゼンテーションモデルのうちどれが、前記コマンドを提示するのに使用されるべきかを折衝することを、前記１つまたは複数のプロセッサに引き起こす前記命令は、前記複数のプレゼンテーションモデルのうち１つの識別を、前記リクエスタから受信することを、前記１つまたは複数のプロセッサに引き起こす命令を備えることを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１６】
前記リクエスタはコマンドホストを備えることを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１７】
前記複数の命令は、
モード列挙をエクスポーズすることと、
前記リクエスタが前記モード列挙を呼び出すことに応答して、前記コマンドブローカによってサポートされた前記複数のプレゼンテーションモデルのリストを、前記リクエスタに戻すことによって、前記コマンドブローカによってサポートされた前記複数のプレゼンテーションモデルを識別することと
を、前記１つまたは複数のプロセッサに、さらに引き起こすことを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１８】
複数のユーザインターフェースコマンドを表示できるワークスペースを提供するためのコマンドホストと、
コマンドのための複数のサポートされたモードを識別するために、およびさらに前記複数のサポートされたモードのうちどれが前記コマンドに使用されるべきかを決定するためにコマンドホストと折衝するために、前記コマンドホストに通信的に結合されたコマンドブローカと
を備えたことを特徴とするシステム。
【請求項１９】
複数の異なるコマンドのうち１つのための複数のサポートされたモードを識別するための、前記複数の追加のコマンドブローカの各々、および前記複数のサポートされたモードのうちどれが前記特定のコマンドのために使用されるべきかを決定するために、前記コマンドホストとさらに折衝するための、前記複数の追加のコマンドブローカの各々である、前記コマンドホストに通信的に連結された複数の追加のコマンドブローカ
をさらに備えたことを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記コマンドが呼び出されるときに後に続くアクションを制御するために、前記コマンドのために使用されるべき前記決定されたモードに基づく前記コマンドブローカによって作成されたコマンドプロバイダ
をさらに備えることを特徴とする請求項１８に記載のシステム。
【請求項２１】
前記コマンドブローカによって使用できる前記システムに関する情報を識別する、前記コマンドブローカに通信的に連結されたコマンドコンテキスト
をさらに備えることを特徴とする請求項１８に記載のシステム。
【請求項２２】
コンポーネントを記述する複数の命令を格納した１つまたは複数のコンピュータ可読媒体であって、前記コンポーネントは、生成されるとき、
モード列挙をエクスポーズすることと
前記リクエスタが前記モード列挙を呼び出すことに応答して、前記コンポーネントに関連付けられた特定のコマンドのために、前記コンポーネントによってサポートされた、１つまたは複数のプレゼンテーションモデルのリストを、リクエスタに返すこと
を特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項２３】
前記コンポーネントは、インスタンス化されることによって作成されることを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記コンポーネントは、生成されるとき、さらに、前記コンポーネントを識別する識別属性を有することを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２５】
前記コンポーネントは、生成されるとき、さらに、
前記コンポーネントを設定することになるのをコマンドコンテキストができるようにする第１の属性をエクスポーズすること
であることを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２６】
前記コンポーネントは、生成されるとき、さらに、前記特定のコマンドが属する１つまたは複数のグループの識別を可能にする、グループ属性を有することを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２７】
前記コンポーネントは、生成されるとき、さらに、
グループ列挙をエクスポーズすることと、
前記リクエスタが前記グループ列挙を呼び出すことに応答して、前記コンポーネントによってサポートされた１つまたは複数のグループのリストを、前記リクエスタへ返すことと
を特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２８】
前記コンポーネントは、生成されるとき、さらに、
プレゼンテーションモデルの識別子であるパラメータを有するｇｅｔ  ｐｒｏｖｉｄｅｒ属性をエクスポーズすることと、
前記リクエスタが前記ｇｅｔ  ｐｒｏｖｉｄｅｒ属性を呼び出すことに応答して、前記識別されたプレゼンテーションモデルのための前記特定のコマンドを実装するコマンドプロバイダコンポーネントを生成することと
を特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２９】
前記コンポーネントは、前記コマンドプロバイダコンポーネントをインスタンス化することによって、前記コマンドプロバイダコンポーネントを生成することを特徴とする請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
前記コンポーネントは、生成されるとき、さらに、前記特定のコマンドのためのコンテキストが変化する度にファイアされる、コマンドコンテキストのハンドラ属性を有することを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項３１】
コンポーネントによってエクスポーズされたモード列挙にアクセスすることと、
前記モード列挙にアクセスすることに応答して、前記コンポーネントに関連付けられた特定のコマンドのために、前記コンポーネントによってサポートされた１つまたは複数のプレゼンテーションモデルのリストを受信することと
を備えたことを特徴とする方法。
【請求項３２】
前記コンポーネントの識別属性にアクセスして、前記コンポーネントの前記識別を取り出すことをさらに備えたことを特徴とする請求項３１に記載の方法。
【請求項３３】
前記コンポーネントのためのコマンドコンテキストが設定されることを可能にする、前記コンポーネントの第１の属性にアクセスすることをさらに備えたことを特徴とする請求項３１に記載の方法。
【請求項３４】
前記コンポーネントのグループ列挙にアクセスすることと、
前記グループ列挙にアクセスすることに応答して、前記コンポーネントによってサポートされた１つまたは複数のグループのリストを受信することと
をさらに備えたことを特徴とする請求項３１に記載の方法。
【請求項３５】
前記コンポーネントのｇｅｔ  ｐｒｏｖｉｄｅｒ属性にアクセスすることと、
前記ｇｅｔ  ｐｒｏｖｉｄｅｒ属性の前記アクセスにおけるパラメータとして、前記コンポーネントによってサポートされた前記１つまたは複数のプレゼンテーションモデルのうち１つの識別子を含むことと、
前記ｇｅｔ  ｐｒｏｖｉｄｅｒ属性にアクセスすることに応答して、前記パラメータとして識別された前記プレゼンテーションモデルのための前記特定のコマンドを実装するコマンドプロバイダコンポーネントの識別子を受信することと
をさらに備えたことを特徴とする請求項３１に記載の方法。
【請求項３６】
コマンドブローカを生成するために格納された複数の命令を有する１つまたは複数のコンピュータ可読媒体であって、前記複数の命令は、１つまたは複数のプロセッサによって実行されるとき、
１つまたは複数の引数を含むオブジェクト定義を識別することと、
非リテラル引数である前記１つまたは複数の引数の各々について、前記引数に基づいた１つまたは複数の追加のオブジェクト定義を再帰的に識別することと、
前記コマンドブローカとして、前記識別されたオブジェクト定義によって定義された前記オブジェクトを生成することと
を、前記１つまたは複数のプロセッサに引き起こすことを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項３７】
前記複数の命令はさらに、前記オブジェクト定義として、前記コマンドブローカに関連付けられたトップレベルオブジェクト定義を、前記１つまたは複数のプロセッサに識別させることを特徴とする請求項３６に記載のコンピュータ可読媒体。
【請求項３８】
前記識別されたオブジェクト定義によって定義された前記オブジェクトの生成を前記１つまたは複数のプロセッサに引きおこす前記複数の命令はさらに、前記識別されたオブジェクト定義によって定義された前記オブジェクトのインスタンス化を、前記１つまたは複数のプロセッサに引き起こすことを特徴とする請求項３６に記載のコンピュータ可読媒体。
【請求項３９】
前記複数の命令はさらに、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのレジストリ内で前記オブジェクト定義の識別を、前記１つまたは複数のプロセッサに引き起こすことを特徴とする請求項３６に記載のコンピュータ可読媒体。
【請求項４０】
前記オブジェクト定義は、第１のオブジェクト定義によって定義されたオブジェクトの識別子を提示するデータを格納する型フィールド、および１つまたは複数の追加のオブジェクト定義を提示するデータを格納する引数フィールドを含むことを特徴とする請求項３６に記載のコンピュータ可読媒体。
【請求項４１】
以下のデータ構造を格納したコンピュータ可読媒体であって、
第１のオブジェクト定義によって定義されたオブジェクトの識別子を提示するデータを格納する型フィールド、および１つまたは複数の追加のオブジェクト定義を提示するデータを格納する引数フィールドを含む、前記第１のオブジェクト定義と、
前記第１のオブジェクト定義における処理オペレーションの間、前記引数フィールドが第２のオブジェクト定義を識別するために検査されることを特徴とする、前記引数フィールドによって識別された前記第２のオブジェクト定義と
を備えたことを特徴とするコンピュータ可読媒体。
【請求項４２】
前記データ構造は、コマンドブローカを定義するデータを含むことを特徴とする請求項４１に記載のコンピュータ可読媒体。
【請求項４３】
前記第１のオブジェクト定義は、前記第１のオブジェクト定義を生成するために、コマンドホストの識別子を提示するデータを格納するためのアセンブリフィールドをさらに備えたことを特徴とする請求項４１に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータおよびユーザインターフェースに関し、詳細には、汎用ユーザインターフェースコマンドアーキテクチャに関する。
【背景技術】
【０００２】
コンピュータ技術が進歩および発展してきたので、コンピュータがユーザに提示するＵＩ（ユーザインターフェース）もまた進歩および発展してきている。ＧＵＩ（グラフィカルユーザインターフェース）は一般的になり、結果として、通常はユーザがより対話しやすいユーザインターフェースとなっている。メニュー、ツールバー、ボタン、リンク、およびその他もろもろの異なる方法でユーザにコマンドオプションを提示することができるようにする多くの異なるプレゼンテーションモデルをＧＵＩで、使うことができる。
【０００３】
このようなＧＵＩを設計するときに直面する１つの問題は、ＧＵＩで使用することができる、異なるプレゼンテーションモデルである。通常、コマンドの提供者は、コマンドが含まれることになるＧＵＩによってサポートされる、異なるプレゼンテーションモデルごとに、別々の記述およびインターフェースを書かなければならない。これは、コマンドの提供者側での追加および重複の作業という結果になる。さらなる問題は、提供者がコマンドを書いた後に続いて、新しいプレゼンテーションモデルが開発される状況となり得る。つまり、コマンドを書く提供者は新しいプレゼンテーションモデルについて知らないので、通常は、新しいプレゼンテーションモデルをサポートするコマンドを書くことができない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、これらの問題を軽減する、コマンドを実装するための方法を有することは有益であろう。
【課題を解決するための手段】
【０００５】
汎用ユーザインターフェースコマンドアーキテクチャが本明細書で説明される。
【０００６】
ある態様によって、アプリケーションがコンピューティングデバイス上のプレゼンテーションのためのコマンドをホストできるようにする、汎用アーキテクチャが説明される。このアーキテクチャは、コマンドホストおよびコマンドブローカを含む。コマンドホストは、複数のユーザインターフェースコマンドが提示されうるワークスペースを提供する。コマンドブローカは、コマンドのための複数のサポートされたモードを識別し、さらにコマンドホストと折衝して、複数のサポートされたモードのうちどれがそのコマンドのために使用されるべきかを決定する。
【０００７】
ある態様によって、アプリケーションがコマンドをホストできるようにするために使用することができる、ＡＰＩ（アプリケーションプログラミングインターフェース）が説明される。このＡＰＩは、例えば、モード列挙をエクスポーズするコマンドブローカコンポーネントを含む。コマンドホストなどのリクエスタがモード列挙を呼び出すことに応答して、コマンドブローカコンポーネントは、コンポーネントに関連付けられた特定のコマンドのためのコンポーネントによってサポートされた、複数の異なるプレゼンテーションモデルのリストを返す。
【０００８】
ある態様によって、コマンドがアプリケーションによって活動化のために登録されることが可能である方法を説明する、活動化メカニズムが論じられる。この活動化メカニズムは、１つまたは複数の引数を含むオブジェクト定義を識別することによって、コマンドブローカを作成する。非リテラル引数である１つまたは複数の各引数について、引数に基づいた１つまたは複数の追加のオブジェクト定義が再帰的に識別される。コマンドブローカは次いで、識別されたオブジェクト定義によって定義されたオブジェクトとして作成される。
【発明を実施するための最良の形態】
【０００９】
同じ番号は、類似のコンポーネントおよび／または機能を参照するために、本書の全体で使用される。
【００１０】
汎用ユーザインターフェースコマンドアーキテクチャが本明細書で説明される。ある態様によって、アプリケーションがコンピューティングデバイス上のプレゼンテーションのためのコマンドをホストできるようにする、汎用アーキテクチャが説明される。このコマンドは、アプリケーションと同じ設計者または作成者によって、あるいは他の第三者によって（例えば、サードパーティの開発者によって）、書くことができる。追加で、アプリケーションがコマンドをホストできるようにするために使用することができる、ＡＰＩ（アプリケーションプログラミングインターフェース）が説明される。さらに、コマンドをアプリケーションによって活動化のために登録できる方法を説明する、活動化メカニズムが論じられる。
【００１１】
汎用ＵＩコマンドアーキテクチャ
図１は、汎用ユーザインターフェースコマンドアーキテクチャが使用される、コンピューティングデバイス１０２の一例を示す。コンピューティングデバイス１０２は、複数（ｘ）のアプリケーション１０４を含み、それぞれが汎用ＵＩコマンドアーキテクチャ１０６をサポートする。以下でより詳細に論じる通り、ＵＩコマンドアーキテクチャ１０６は、アプリケーション１０４が異なるコマンドを汎用的な方法でホストできるようにする。これらのコマンドは、アプリケーション１０４を作成した者と同じ者（または複数の者）によって、あるいは、異なる者によって作成することができる。
【００１２】
コンピューティングデバイス１０２は、ユーザインターフェースを提示するプロセッサまたはコントローラを有する様々な異なる任意のデバイスを表す。このようなデバイスの例には、デスクトップコンピュータ、サーバコンピュータ、ノートブックコンピュータ、ハンドヘルドまたはポータブルコンピュータ、エンターテインメントデバイス、ゲームコンソール、携帯情報端末（ＰＤＡ）、携帯電話などを含む。アプリケーション１０４は様々な任意のアプリケーションを表す。このようなアプリケーションの例には、オペレーティングシステム、娯楽プログラム、ユーティリティプログラム、教育プログラム、生産性プログラム、金融プログラムなどを含む。
【００１３】
図２は、汎用ＵＩコマンドアーキテクチャ１０６の一例をさらに詳細に示す。コマンドアーキテクチャ１０６は、コマンドホスト１３０および複数（ｙ）のコマンドブローカ１３２を含む。任意の数のコマンドブローカ１３２をコマンドアーキテクチャ１０６に含めることができる。加えて、複数のコマンドブローカ１３２が図２に示されるが、代わりに単一のコマンドブローカのみをコマンドアーキテクチャ１０６に含んでよい。
【００１４】
アーキテクチャ１０６は、ＵＩを介したユーザ選択のために表示されるコマンドであるＵＩコマンドと共に使用するために設計されるので、コマンドアーキテクチャ１０６はＵＩコマンドアーキテクチャと呼ばれる。コマンドアーキテクチャ１０６は、コマンドが、ユーザインターフェースを介したユーザへの表示、およびユーザによる選択のために、作成または書かかれることを可能にする。任意のタイプのコマンドは、リソース（例えば、ファイル、ストレージデバイス、入力デバイス、出力デバイスなど）にアクセスするためのコマンド、コンテンツをユーザに表示するためのコマンド（例えば、オーディオファイルまたはオーディオ／ビデオファイルの再生、データのハードコピーのプリントアウトなど）、ユーザを特定のロケーション（例えば、ファイル、ネットワークロケーション、コントロールパネルなど）へナビゲートできるようにするためのコマンドなどのコマンドアーキテクチャ１０６によってサポートできる。
【００１５】
コマンドホスト１３０は、コマンドを表示のために配置することができるシェルまたはワークスペースを提供する任意のアプリケーション（図１のアプリケーション１０４など）の少なくとも一部である。コマンドホストは単一のこのようなシェルまたはワークスペースを提供することができ、複数の異なるコマンドホストは同時に異なるシェルまたはワークスペースを提供することができる。このようなワークスペースの例には、ウィンドウまたはディスプレイ、音響リストなどの他の部分を含む。
【００１６】
コマンドホスト１３０は、コマンドの提示のための、１つまたは複数のモードをサポートし、これは、１つまたは複数のプレゼンテーションモデルと呼ばれる、これらの異なるモードまたはプレゼンテーションモデルは、ユーザインターフェースを介してコマンドをユーザに表示することができる、異なる方法を指す。モードまたはプレゼンテーションモデルの例には、メニュー、メニューリスト、コンテキストメニュー、タスクバー、ボタン、リンク（例えば、ハイパーリンク）などが含まれる。これらの異なるモードまたはプレゼンテーションモデルは通常、ＧＵＩ内などのコマンドを視覚的に表示することを含むが、他の表示方法もまた使用される場合がある（例えば、コマンドを音響的に提示すること）。
【００１７】
各コマンドブローカ１３２は、コマンドホスト１３０とコマンドのための最終ハンドラ（コマンドプロバイダと呼ばれ、以下でより詳細に論じる）の間にある中間物である。各コマンドブローカ１３２は特定のコマンドに関連付けられる。コマンドブローカ１３２は、コマンドによってサポートされるモードを列挙し、どのモードがそのコマンドのために使用されるかについて、コマンドホスト１３０と折衝する。特定のモードがコマンドブローカ１３２によってサポートされる場合、コマンドブローカ１３２は、コマンドホスト１３０に、そのモードに関連付けられた特定のコマンドプロバイダを生成し、与えることができる。この折衝はインターフェース１３４を介して実行される。ある実施形態では、ＡＰＩ（アプリケーションプログラミングインターフェース）は、各コマンドブローカ１３２によってエクスポーズされる。折衝プロセスの間、コマンドホスト１３０によって、このＡＰＩを呼び出すことができる。このようなＡＰＩの一例を以下でより詳細に論じる。
【００１８】
ＵＩコマンドアーキテクチャ１０６は、この折衝プロセス、および単一のコマンドブローカがその関連付けられたコマンドをサポートできる様々なモードのために、汎用と呼ばれる。同じコマンドブローカは、コマンドが様々な異なるプレゼンテーションモデルにおいて表示されることを可能にするために使用することができ、したがって、汎用として見なすことができる。
【００１９】
コマンドホスト１３０は、コマンドホストの実行が開始するたびに、コマンドブローカ１３２と折衝する。異なるコマンドブローカ１３２をコマンドホスト１３０にアクセス可能とすることができ、それらに関連付けられたコマンドは、コマンドホスト１３０によってＵＩを介して表示できるようになる。コマンドブローカ１３２をコマンドホスト１３０にアクセス可能にすることができる１つの方法は、コマンドブローカ活動化メカニズムを経ることであり、以下でより詳細に論じる。コマンドホスト１３０はコマンドブローカ１３２と、様々な時点で折衝する場合があり、これは、選択において変化がある時（例えば、ＵＩ内のどのアイテムが選択されるか）、および、ＵＩのタイプにおける変化（例えば、視覚的から音響的ＵＩへの変化）、ＵＩのフォーマットにおける変化（例えば、ウィンドウがサイズ変更される）、ＵＩのコンテンツにおける変化（例えば、異なるアプリケーションが、オペレーティングシステムであるコマンドホストから実行される）などの、コマンドのコンテキストにおいて変化がある時などである。
【００２０】
この折衝の一例として、アプリケーションが、メニューおよびボタンモードの両方を有するユーザインターフェースを表示することができると仮定する。この例において、コマンドホスト１３０はコマンドブローカ１３２と折衝して、２つのモード（メニューおよび／またはボタン）のどちらを使用するべきかを決定するであろう。コマンドブローカ１３２は、プリンタを使用して選択されたデータのハードコピーを作成する、プリントコマンドに関連付けられると仮定する。さらに、コマンドブローカ１３２は、ボタンモードならびにリストモードをサポートすると仮定する。コマンドホスト１３０はコマンドブローカ１３２と折衝し、ホスト１３０およびブローカ１３２がサポートする唯一のモードはボタンモードであると決定するであろう（ブローカ１３２はメニューモードをサポートせず、ホスト１３０はリストモードをサポートしない）。したがって、この折衝はボタンモードの選択という結果となる。
【００２１】
ある実施形態では、コマンドホスト１３０は、コマンドブローカ１３２によってサポートされるモードよりも追加のモードをサポートしてもよいことに留意されたい。加えて、コマンドホスト１３０は、あるモードから別のモードにコマンドを変換することができる、プログラムまたは他のリソースへのアクセスを有してもよい。前例に続いて、コマンドホスト１３０は、ボタンモードにおけるコマンドのための情報を、メニューモードにおけるコマンドに使用可となるように変換することができる、プログラムへのアクセスを有してもよい。したがって、折衝処理の間に、コマンドホスト１３０はボタンモードを選択し、次いで、ボタンモードにおけるプリントコマンドに関して受信した情報を、メニューモードへ変換することができる。このような処理は、例えば、コマンドブローカ１３２の作成の後に生成され、コマンドブローカ１３２がその知識を有していなかったモードで、コマンドブローカ１３２が使用できるようにする。
【００２２】
また、コマンドブローカ１３２はそのモードを異なる順序で列挙できることにも留意されたい。ある実施形態において、コマンドブローカ１３２はそのモードを優先順（例えば、コマンドブローカ１３２またはコマンドブローカ１３２の作成者が好むであろう、モードがコマンドホスト１３０によって選択される順序）で列挙する。しかし、ある実施において、コマンドホスト１３０は、コマンドブローカ１３２によって優先された順序を無視するように選択することができる。ランダムな順序、アルファベット順などの他の順序付けを代わりに使用できることになる。
【００２３】
コマンドブローカ１３２はまた、異なるグループのコマンドを列挙することもできる。これらのグループは、コマンドホスト１３０への、特定のコマンドが互いの近くに位置するべきであるという指示である。通常、ある実施形態において、コマンドホスト１３０は、これらの指示によって提供されたガイダンスに従うことを必要とされないが、しばしば、このガイダンスに従うように試みる。
【００２４】
ある実施形態において、コマンドブローカ１３２はまた、１つまたは複数の他のコマンドブローカのためのコンテナかもしれない。例えば、コマンドブローカは、メニューアイテムであるプレゼンテーションモードをサポートしてもよく、この場合コマンドはＵＩ内で単一のメニューアイテムとして表示されることになる。このコマンドブローカは、メニューリストであるプレゼンテーションモードをサポートしてもよく、この場合コマンドブローカは、各々がＵＩ内でメニューアイテムのリストにおいて表示される複数の追加のコマンドブローカのためのコンテナである。
【００２５】
図３は、汎用ＵＩコマンドアーキテクチャ１０６の例をさらに詳細に示す。コマンドホスト１３０は、上述のようなコマンドブローカ１３２とモードを折衝する。加えて、コマンドコンテキスト１４０およびコマンドプロバイダ１４２が図３で示される。ある実施形態において、コマンドホスト１３０、コマンドブローカ１３２、コマンドコンテキスト１４０およびコマンドプロバイダ１４２の各々は、互いに通信的に連結し、互いに通信できるようにする。ある実施態様において、コマンドホスト１３０、コマンドブローカ１３２、コマンドコンテキスト１４０およびコマンドプロバイダ１４２の各々は、オブジェクトであり、他のメソッド、列挙、属性などを呼び出すことができる。
【００２６】
コマンドプロバイダ１４２は、特定のコマンドのための最終ハンドラである。コマンドプロバイダ１４２は、コマンドが呼び出されるときに従う様々なアクション（例えば、プリントコマンドなど、コマンドのユーザ選択に応答して、呼び出されたアクション）を制御する。コマンドプロバイダ１４２は通常、特定のコマンドが呼び出されるたびに実行される命令を含む。コマンドプロバイダ１４２は、コマンドホスト１３０とのモード折衝の完了で、コマンドブローカ１３２によってインスタンス化されるオブジェクトである。異なるコマンドプロバイダは、コマンドブローカ１３２によってサポートされる各モードに関連付けられる。したがって、モード折衝が特定のモードの結果となるとき、コマンドブローカ１３２は、その特定のモードのためのオブジェクトをインスタンス化する。インスタンス化されたオブジェクトもまたコマンドホスト１３０へ渡され、コマンドホスト１３０がコマンドプロバイダ１４２と対話できるようにする。
【００２７】
ある状況において、コマンドホスト１３０は、複数のプレゼンテーションモデルまたはモードについて、コマンドブローカ１３２と折衝してもよいことに留意されたい。このような状況では、コマンドブローカ１３２は、複数のコマンドプロバイダ１４２をインスタンス化し、これは複数のプレゼンテーションモデルまたはモードの各々につき１つであり、このようなインスタンス化されたコマンドプロバイダ１４２の各々をコマンドホスト１３０に渡す。
【００２８】
代替実施形態において、コマンドブローカ１３２は、１つまたは複数のコマンドプロバイダ１４２と結合されるかもしれない。このような実施形態において、別個のコマンドプロバイダ１４２はインスタンス化する必要はない。むしろ、コマンドホスト１３０はコマンドブローカ１３２とモードを折衝した後、コマンドホスト１３０は、コマンドプロバイダ１４２よりむしろ、コマンドのための最終ハンドラとしてのコマンドホスト１３０と対話することができる。
【００２９】
コマンドコンテキスト１４０は、コマンドホスト１３０によって供給され、それによりコマンドブローカ１３２によってアクセスすることができる、コンテキスト情報のリストである。コマンドコンテキスト１４０に含まれるコンテキスト情報は変更できる。コンテキスト情報は、例えば、ユーザインターフェースを説明する情報、コマンドホスト１３０を説明する情報、何が現在表示されているか、および／またはどのようにそれがユーザインターフェース内で表示されているかを説明する情報、利用可能なリソースについての情報などを指す。コンテキスト情報の具体的な例は、ＵＩ内で表示されている何のアイテム（もしあれば）が現在選択されているか、コマンドが位置づけられるエリアの大きさ（例えば、ピクセル単位）、特定のアイテムまたは機能が現在ＵＩ内で表示されているか否か、特定のリソースがコンピューティングデバイス上で利用可能か否か、他の何のコンポーネントにコンピューティングデバイスが連結されているか（例えば、プリンタが現在、コンピューティングデバイスに連結されているか否か）などを含む。異なるコマンドブローカ１３２は、異なるコンテキスト情報に関心があるかもしれず、いくつかのコマンドブローカ１３２は、いかなるコンテキスト情報にも関心がないかもしれない。特定のコマンドブローカ１３２が特定のコンテキスト情報に気づくことを望むとき、特定のコマンドブローカ１３２は、所望のコンテキスト情報を取得するために、コマンドコンテキスト１４０と対話する。
【００３０】
また、コマンドブローカ１３２によってサポートされたプレゼンテーションモデルは、コマンドコンテキスト１４０に基づいて変化してもよいことにも留意されたい。例えば、コマンドブローカ１３２は、特定のコンポーネント（プリンタ、パーソナルオーディオプレイヤ、スピーカなど）がコンピューティングデバイスに連結される状況で、ある特定のプレゼンテーションモデルをサポートするかもしれないが、特定のコンポーネントがコンピューティングデバイスに連結されない状況では、その特定のプレゼンテーションモデルをサポートしないかもしれない。別の例の方法によって、コマンドブローカ１３２は、コマンドホスト１３０によって提供されたワークスペースのサイズに基づいて、異なるプレゼンテーションモデルをサポートしてもよい。
【００３１】
汎用ＵＩコマンドアーキテクチャ１０６は、コマンドの作成を容易にする。この容易化が達成される１つの方法は、コマンドブローカ１３２を使用することによる。作成者は、複数の異なるプレゼンテーションモデルに、複数の異なる回数、同じコマンドを登録することを必要とするのではなく、そのコマンドのためのすべてのハンドラは、同じコマンドブローカ１３２を介してアクセスすることができる。加えて、そのコマンドのために表示されるべき表示名またはアイコンなどの共通機能性、またはユーザがそのコマンドを選択するときに取られるべき起動アクションは、異なるモードで共有することができる。この共有は、例えば、各コマンドプロバイダ１４２が、コマンドプロバイダ１４２に関連付けられたコマンドがユーザによって選択されるときに実行される命令セットを含む同じオブジェクトを参照することによって達成される。あるいは、いくつかの共通機能性は、コマンドホスト１３０が、関連付けられたコマンドプロバイダ１４２において実装されるか、またはこれを通じてアクセスされるのではなく、コマンドプロバイダ１３２によって、利用可能とできる。
【００３２】
図４は、汎用ＵＩコマンドアーキテクチャ１０６を使用してコマンドを表示するための処理例１８０を示すフロー図である。処理１８０はソフトウェアにおいて実行されるが、代替として処理１８０の態様は、ファームウェア、ハードウェア、またはファームウェア、ハードウェアおよび／またはソフトウェアの組合せにおいて実行してもよい。
【００３３】
最初に、コマンドホストおよびコマンドブローカはモードを折衝する（動作１８２）。ある実施形態では、この折衝は、コマンドブローカが、コマンドホストをサポートするモードを識別すること、および、コマンドホストが、これらのモードを、コマンドホストがサポートするモードと比較すること、そして次いで、コマンドホストが、コマンドホストおよびコマンドブローカの両方がサポートするモードの１つを選択することによって実行される。あるいは、この折衝は、他の実施形態では他の形態を取るかもしれない。例えば、コマンドホストは、それがコマンドブローカをサポートするモードを識別し、コマンドブローカは、これらのモードを、コマンドブローカがサポートするモードと比較し、そして次いで、コマンドブローカは、コマンドホストおよびコマンドブローカの両方がサポートするモードのうちの１つを選択するかもしれない。別の例として、コマンドホストは、サポートするモードのリストを検討し、このような各モードのために、コマンドブローカに、コマンドブローカがそのモードをサポートするか否かについて問い合わせてもよく、コマンドホストが、サポートし、コマンドブローカによってもサポートされるモードのうちの１つを識別するとすぐに、コマンドホストは、コマンドブローカへの問い合わせを停止することができる。
【００３４】
モードが折衝されると、コマンドブローカは、折衝されたモードに関連付けられたコマンドプロバイダを、インスタンス化またはそうでない場合は生成する（動作１８４）。ある実施態様において、コマンドプロバイダは、コマンドホストがコマンドブローカによってエクスポーズされたＧｅｔＰｒｏｖｉｄｅｒメソッドを呼び出すことによって、インスタンス化される。ＧｅｔＰｒｏｖｉｄｅｒメソッドを、以下でさらに詳細に論じる。
【００３５】
コマンドホストは次いで、コマンドをユーザインターフェースに、動作１８４でインスタンス化またはそうでない場合は生成されたコマンドプロバイダに基づいて配置する（動作１８６）。このコマンドの配置は、ユーザインターフェース内での、アイコンの位置決め、名前、および／またはコマンドの他の識別子を指す。上述のように、折衝されたモードは、コマンドの表示のためにコマンドホストによって実際に使用されたモードでないかもしれない（むしろ、コマンドホストは、折衝されたモードのためにコマンドプロバイダから取得した情報を使用して、異なるモードを使用してコマンドを表示するかもしれない。）。
【００３６】
次いで、コマンドホストはコマンドプロバイダと対話する（動作１８８）。この対話は、例えば、コマンドのユーザインターフェースを表示すること、ならびに、コマンドの振る舞いを適切に呼び出すこと（例えば、ユーザがコマンドを呼び出すイベント）が含まれる。
【００３７】
ＡＰＩ実装例
以下は、前述の汎用ＵＩコマンドアーキテクチャ１０６を実装する、ＡＰＩの一例である。
ＰｒｏｖｉｄｅｒＣａｔｅｇｏｒｙおよびＣｏｎｔｅｘｔＯｂｊｅｃｔＤｅｓｃｒｉｐｔｉｏｎは表１に挙げられる。ＣｏｎｔｅｘｔＯｂｊｅｃｔＤｅｓｃｒｉｐｔｉｏｎは、ＣｏｍｍａｎｄＣｏｎｔｅｘｔオブジェクトによって保持され、ホストによって提供された、コンテキストデータの個々の部分のための名前の役割をする。ＰｒｏｖｉｄｅｒＣａｔｅｇｏｒｙは、前述のコンテキストデータの揮発性を決定するために使用される。揮発性コンテキスト値は、何らかのホストコンテキスト値が変更されると、コマンドコンテキストを離れる。不揮発性値はコンテキスト内にとどまる。
【００３８】
【表１】
2007538314.tif 000002
【００３９】
ＣｏｎｔｅｘｔＯｂｊｅｃｔｓクラスが表２に挙げられる。ある実施形態において、予め定義されたＣｏｎｔｅｘｔＯｂｊｅｃｔＤｅｓｃｒｉｐｔｉｏｎｓのセットは、ＣｏｎｔｅｘｔＯｂｊｅｃｔｓ静的クラス内で保たれる。ＣｏｍｍａｎｄＣｏｎｔｅｘｔはまた、この予め定義されたリストの一部ではない、ＣｏｎｔｅｘｔＯｂｊｅｃｔＤｅｓｃｒｉｐｔｉｏｎｓの拡張可能セットを保持することもできる。
【００４０】
【表２】
2007538314.tif 000003
【００４１】
ＣｏｍｍａｎｄＣｏｎｔｅｘｔは表３に挙げられる。ＣｏｍｍａｎｄＣｏｎｔｅｘｔは、ＣｏｎｔｅｘｔＯｂｊｅｃｔＤｅｓｃｒｉｐｔｉｏｎｓをオブジェクト値にマップするインデクサである。ＣｏｍｍａｎｄＣｏｎｔｅｘｔはまた、コンテキストが変化したときにファイアするイベントを有する。ＣｏｍｍａｎｄＣｏｎｔｅｘｔクラスは、図３のコマンドコンテキスト１４０によってエクスポーズされる属性、メソッド、および列挙を含み、これらは、コマンドホスト１３０および／またはコマンドブローカ１３２によって呼び出すことができる。
【００４２】
【表３】
2007538314.tif 000004
【００４３】
ＭｏｄｅＤｅｓｃｒｉｐｔｉｏｎが表４に挙げられる。ＭｏｄｅＤｅｓｃｒｉｐｔｉｏｎは、モードおよび管理された型を命名する文字列である。管理された型は、この例において、ＣｏｍｍａｎｄＢｒｏｋｅｒ．ＧｅｔＰｒｏｖｉｄｅｒメソッドを介して、ブローカがコマンドプロバイダへ返す、要件を指す。
【００４４】
【表４】
2007538314.tif 000005
【００４５】
ＳｔａｎｄａｒｄＭｏｄｅｓクラスが表５に挙げられる。ある実施形態において、「標準」モードのリストは、コマンドブローカが実装するのに利用可能である。これらの標準モードに加えて、モードのセットは拡張可能で、追加のモードを含む。
【００４６】
【表５】
2007538314.tif 000006
【００４７】
ＣｏｍｍａｎｄＢｒｏｋｅｒクラスが表６に挙げられる。ＣｏｍｍａｎｄＢｒｏｋｅｒクラスは、コマンドブローカ１３２によってエクスポーズされる属性、メソッド、および列挙を含み、これらを、図３のコマンドホスト１３０によって呼び出すことができる。
【００４８】
【表６】
2007538314.tif 000007
【００４９】
コマンドプロバイダインターフェースの一例が表７に挙げられる。これは、図３のコマンドプロバイダ１４２の例のためのインターフェースである。挙げられた例は、「タスクボタン」モードをサポートするコマンドのためのインターフェースである、ＩＴａｓｋＢｕｔｔｏｎＰｒｏｖｉｄｅｒである。ＩＴａｓｋＢｕｔｔｏｎＰｒｏｖｉｄｅｒは、コマンドホストによってアクセスおよび使用することができる、２つの文字列（ＳｈｏｒｔＴｉｔｌｅおよびＬｏｎｇＴｉｔｌｅ）を含む。ＩｍａｇｅＳｏｕｒｃｅは、このタスクボタンプロバイダに関連付けられたコマンドがユーザによって選択されるときに実行される命令セットである。このコマンドが選択されるとき、この命令のセットは、コマンドホストがＩＴａｓｋＢｕｔｔｏｎＰｒｏｖｉｄｅｒ．Ｉｎｖｏｋｅ（）を呼び出すことによって、呼び出される。
【００５０】
ＩＰｒｏｖｉｄｅｒＣｈａｎｇｅｓは、コマンドプロバイダが変化通知をコマンドホストに与えるために実装することができるインターフェースである。ＰｒｏｖｉｄｅｒＣｈａｎｇｅＨａｎｄｌｅｒは、ＩＰｒｏｖｉｄｅｒＣｈａｎｇｅｓ内からファイアされるＰｒｏｖｉｄｅｒＣｈａｎｇｅｄイベントの型を宣言する、管理された委任（Ｄｅｌｅｇａｔｅ）である。コマンドホストはＰｒｏｖｉｄｅｒＣｈａｎｇｅｄイベントを使用して、それがいつ、コマンドプロバイダからある状態を再問い合わせすべきかを伝えることができる。
【００５１】
例えば、ＩＴａｓｋＢｕｔｔｏｎＰｒｏｖｉｄｅｒの「ＳｈｏｒｔＴｉｔｌｅ」が変化する場合（例えば、選択が変化したために。）、コマンドプロバイダはコマンドホストに、ＰｒｏｖｉｄｅｒＣｈａｎｇｅｄイベントを介して、その状態が変化したことを、通知することができる。この例において、ＵＩと対話することによってユーザが選択を変更することに応答して、コマンドホストは、コマンドコンテキスト内部で「選択された」状態を変更し、これによりコマンドコンテキストが、コマンドプロバイダに変化通知をファイアすることを引き起こす。コマンドプロバイダは、このコンテキスト変化イベントの結果として、そのＳｈｏｒｔＴｉｔｌｅを変更することを望むであろうことを決定し、そのため、コマンドプロバイダは、コマンドホストがきいている（Ｌｉｓｔｅｎ）、ＰｒｏｖｉｄｅｒＣｈａｎｇｅｄイベントをファイアする。コマンドホストは、ＰｒｏｖｉｄｅｒＣｈａｎｇｅＨａｎｄｌｅｒ型のそれが有するメソッドを介して、ＰｒｏｖｉｄｅｒＣｈａｎｇｅｄイベントを受信する。コマンドホストは、このイベントの結果として、そのＳｈｏｒｔＴｅｘｔ、ＬｏｎｇＴｅｘｔ、ＩｓＥｎａｂｌｅｄなどをコマンドプロバイダに再問い合わせし、その新しい状態が与えられたコマンドを再表示するのに十分な情報を取得する。コマンドホストはこの新しい情報を使用して、このコマンドに関連付けられたＵＩをアップデートする。
【００５２】
【表７】
2007538314.tif 000008
【００５３】
加えて、「ヘルパー」クラスを任意で含めることができ、このクラスは、本明細書で論じる汎用ＵＩコマンドアーキテクチャで使用されるように意図されたコマンドを書くための標準ロジックを実装する。ヘルパークラスは、単一のクラスにおいて上述のインターフェースの様々なものを含んで、本明細書で論じる汎用ＵＩコマンドアーキテクチャを使用したコマンドの作成を容易にする。コマンドブローカ作成者は次いで、その機能性の任意の所望の部分をも、このヘルパークラスから派生およびオーバーライドすることができる。表８は、ヘルパークラスＥｘｐｌｏｒｅｒＣｏｍｍａｎｄの例を挙げ、このクラスは例えば、異なるバージョンのＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムのエクスプローラと共に使用することができる。
【００５４】
【表８】
2007538314.tif 000009
【００５５】
コマンドブローカ活動化メカニズム
図２および３のコマンドブローカ１３２を、様々な従来の方法のいずれかで生成することができる。ある実施形態において、アクティベータを採用する特定のコマンドブローカ活動化メカニズムは、後述のように、コマンドブローカ１３２を生成するために使用される。この作成は、インスタンス化または構造化とも呼ばれる。
【００５６】
図５は、コマンドブローカを生成するためのコンポーネントの例を示すブロック図である。図５はアクティベータ２０２および定義ソース２０４を示す。定義ソース２０２は、コマンドブローカ定義２０４を含み、特定のコマンドブローカ１３２がどのように実装されるべきかを定義する。アクティベータ２０２は、コマンドブローカ定義２０４を取り出すために、定義ソース２０２にアクセスし、次いで、定義２０４で定義されたようにコマンドブローカ１３２を生成する。
【００５７】
定義ソース２０２は、任意の様々な異なるソースであることができる。例えば、定義ソース２０２は、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのレジストリ、データベース、ファイル（例えば、ＸＭＬ（拡張可能マークアップ言語）ファイルまたはいくつかの他のフォーマット）などであってよい。
【００５８】
コマンドブローカ定義２０４は、様々な異なる形式を取ることもできる。ある実施形態において、コマンドブローカ定義２０４は、それらのコンストラクタ引数に関して、１つまたは複数のオブジェクトを記述する。これらのオブジェクト記述（本明細書で鍵名とも呼ばれる）は、コマンドブローカ１３２を生成するためにインスタンス化またはそうでない場合は生成されることになるオブジェクトを記述する。各オブジェクト記述は、ゼロ以上のコンストラクタ引数を有することができる。コンストラクタ引数は、リテラル（例えば、文字列、数、ＸＭＬドキュメント、またはバイトアレイ）、または非リテラル（例えば、別のオブジェクト記述）であることができる。オブジェクト記述が１つまたは複数の非リテラル引数を有する状況において、これらの各非リテラル引数もまた、すべてのオブジェクトがインスタンス化またはそうでない場合は生成されるまで、再帰的にインスタンス化またはそうでない場合は生成される。
【００５９】
図６は、オブジェクト定義２２０のためのデータ構造の例を示す。１つまたは複数のこのようなオブジェクト定義は共に、図５のコマンドブローカ定義２０４を構成する。したがって、コマンドブローカのデータ構造の例は、１つまたは複数のオブジェクト定義２００データ構造の集合である。オブジェクト定義２２０は、アセンブリフィールドまたは部分２２２、型フィールドまたは部分２２４、引数フィールドまたは部分２２６、およびリテラル定義フィールドまたは部分２２８を含む。これらの部分２２２、２２４、２２６および２２８の各々は、後述のように、定義されるオブジェクトの異なる態様を表現する様々なデータを格納する。
【００６０】
アセンブリ部分２２２は、そこからこのコマンドブローカをインスタンス化することができるアセンブリを示す。ある実施態様において、アセンブリ部分２２２は、インスタンス化されるべきコマンドブローカのコードを含む、管理されたアセンブリ（ｄｌｌ）の「ストロング名」を指示する。ストロング名は、名前、バージョン、公開鍵トークン、および国/地域別環境（ｃｕｌｔｕｒｅ）によって、アセンブリを（例えば、ディスク上で）一意に識別する名前を指す。
【００６１】
型部分２２４は、オブジェクト定義２２０によって定義されたオブジェクトの識別子を含む。通常、この識別子は英数字文字列であるが、他の文字または記号が代わりに識別子として使用できる。異なるアセンブリ内の異なるオブジェクト定義は、それらの型部分２２４内の各々に同じ識別子を有することができる。型部分２２４内の識別子は、アセンブリ部分２２２内のアセンブリと組み合わせて、オブジェクトが一意に識別できるようにする。
【００６２】
引数部分２２６は、オブジェクト定義２２０によって定義されたオブジェクトのための引数を識別するために含まれる。特定のオブジェクトはいかなる引数をも有さないかもしれず、この場合、引数部分２２６は含まれる必要はない（または、含まれてもよいが、空あるいは引数がないという指示を含むかもしれない）。引数は、上述のように、リテラルまたは非リテラルであってよい。各非リテラル引数のために、その非リテラル引数であるオブジェクトを定義する、別のオブジェクト定義２２０がある。各リテラル引数のために、そのリテラルを定義する、リテラル定義フィールド２２８内の定義がある（例えば、特定の文字列、特定の数、特定のＸＭＬドキュメント、または特定のバイトアレイを識別する）。オブジェクト定義２２０によって定義されたオブジェクトがいかなる引数も有さない場合、リテラル定義部分２２６は含まれる必要はない。（または、含まれてもよいが空、あるいはリテラルがないという指示を含むかもしれない）。
【００６３】
図７は、コマンドブローカを生成するためのプロセス２４０の例を示す図である。プロセス２４０は、図５のアクティベータ２００によって実装され、通常はソフトウェアにおいて実行される（が、プロセス２４０の少なくとも一部は、ハードウェア、ファームウェア、または、ハードウェア、ファームウェアおよびソフトウェアの組合せにおいて、代わりに実行できる）。
【００６４】
最初に、トップレベルオブジェクト定義が識別される（動作２４２）。識別されたオブジェクト定義が次いでアクセスされ（動作２４４）、識別されたオブジェクト定義の任意の引数が識別される（動作２４６）。次いで、非リテラルである動作２４６において識別された、任意の引数があるか否かについてのチェックがなされる（動作２４８）。このような引数がない（例えば、引数がないか、またはすべての引数がリテラルである）場合、プロセス２４０は、識別されたオブジェクト定義の解析を終了する（動作２５０）。しかし、非リテラルである少なくとも１つの引数がある場合、各非リテラル引数は識別される（動作２５２）。これらの各非リテラル引数は別のオブジェクト定義である。プロセス２４０は次いで、動作２４４へ戻り、識別された各非リテラル引数を解析する。このように、プロセス２４０は、すべてのオブジェクト定義がリテラルに関して定義される（または、引数がなくなる）まで、コマンドブローカ定義内の各オブジェクト定義の解析を再帰的に継続する。すべてのオブジェクト定義がリテラルに関して定義された（または、引数がなくなった）後、これらのオブジェクト定義によって定義された個々のオブジェクト、および、したがってコマンドブローカは、各オブジェクトのためのコンストラクタを呼び出すことによってインスタンス化される（動作２５４）。
【００６５】
このように定義された各オブジェクトはその後、オブジェクト定義中を介して逆上して動くことによって、インスタンス化またはそうでない場合は生成することができる。例えば、アクティベータ２００は、リテラルのみに関して定義されたオブジェクト（または、引数のないオブジェクト）を、インスタンス化またはそうでない場合は生成することができ、次いで、これらのオブジェクトを使用して、ちょうどインスタンス化またはそうでない場合は生成などされたこれらのオブジェクトに関して定義される他のオブジェクトを、インスタンス化またはそうでない場合は生成する。トップレベルオブジェクト定義がインスタンス化されていたとき、コマンドブローカはインスタンス化されている。
【００６６】
「ＦｏｏＢｒｏｋｅｒ」と命名されたコマンドブローカのためのコマンド定義の例を表９に挙げる。
【００６７】
【表９】
2007538314.tif 000010
【００６８】
表９の例を見るとわかるように、トップレベルオブジェクト定義（または、鍵名）＼Ｔｅｓｔは、アセンブリ部分、型部分、引数部分およびリテラル部分により定義される（タイトル行として識別される）。これらの各部分は、表９のトップレベルオブジェクト定義の例において、別々の行である。アセンブリ部分は、そこからこのコマンドブローカをインスタンス化するべきアセンブリ（ＦｏｏＡｓｓｅｍｂｌｙ）を示す。型部分は、このオブジェクト定義によって定義されたオブジェクト型（ＦｏｏＢｒｏｋｅｒ）を示す。引数部分は、このオブジェクト定義のための２つの引数（ｔｉｔｌｅおよびｂａｒ）を識別する。ｔｉｔｌｅは、リテラル定義部分で定義される文字列であり、「Ｈｅｌｌｏ，  Ｗｏｒｌｄ！」として、＼Ｔｅｓｔオブジェクト定義のタイトル行である。ｂａｒ引数は、次のオブジェクト定義で定義される別のオブジェクトである。
【００６９】
オブジェクトのインスタンス化の間、図５のアクティベータ２００は、別のオブジェクト定義を識別するために、定義ソース２０２を検索し、このオブジェクト定義はトップレベルオブジェクト定義＼Ｔｅｓｔの下であり、またｂａｒオブジェクトのためのオブジェクト定義でもある。このオブジェクト定義は＼Ｔｅｓｔ＼ｂａｒ鍵名である。
【００７０】
＼Ｔｅｓｔ＼ｂａｒ鍵名もまた、アセンブリ部分、型部分、引数部分およびタイトル部分で定義される（各々は表９内で１行である）。アセンブリ部分は、そこからこのコマンドブローカをインスタンス化する鍵アセンブリ（ＦｏｏＡｓｓｅｍｂｌｙ）を示す。これは、トップレベル鍵名＼Ｔｅｓｔで識別されたものと同じコマンドホストである。型部分は、このオブジェクト定義によって定義されたオブジェクト型（ＢａｒＯｂｊｅｃｔ）を示す。引数部分は、このオブジェクト定義のための２つの引数（ｃｏｕｎｔおよびｓｎｏｏ）を識別する。ｃｏｕｎｔは、リテラル定義部分で定義される整数であり、１６進数値「３８」として、＼Ｔｅｓｔ＼ｂａｒオブジェクト定義のカウント行である。ｓｎｏｏ引数は、次のオブジェクト定義で定義される別のオブジェクトである。
【００７１】
オブジェクトのインスタンス化の間、図５のアクティベータ２００は、別のオブジェクト定義を識別するために、定義ソース２０２を検索し、このオブジェクト定義は＼Ｔｅｓｔ＼ｂａｒオブジェクト定義の下であり、またｓｎｏｏオブジェクトのためのオブジェクト定義でもある。このオブジェクト定義は＼Ｔｅｓｔ＼ｂａｒ＼ｓｎｏｏ鍵名である。
【００７２】
＼Ｔｅｓｔ＼ｂａｒ＼ｓｎｏｏ鍵名もまた、アセンブリ部分および型部分により定義される。ｓｎｏｏオブジェクトのためのオブジェクト定義は引数を有しておらず、そのため、どの引数部分またはリテラル定義部分も、オブジェクト定義に含まれない。アセンブリ部分は、そこからこのコマンドブローカをインスタンス化する鍵アセンブリ（ＦｏｏＡｓｓｅｍｂｌｙ）を示す。これは、トップレベル鍵名＼Ｔｅｓｔおよび＼Ｔｅｓｔ＼ｂａｒ鍵名で識別されたものと同じコマンドホストである。型部分は、このオブジェクト定義によって定義されたオブジェクト型（ＳｎｏｏＯｂｊｅｃｔ）を示す。
【００７３】
表１０は、本明細書で論じるコマンドブローカ活動化をサポートする、ＡＰＩの例を挙げる。上述の各オブジェクト定義または鍵名は、表１０で挙げられたＩＡｃｔｉｖａｔｉｏｎＤｅｆｉｎｉｔｉｏｎインターフェースによってカプセル化される。アセンブリフィールドおよびタイプフィールドは共に、ＩＡｃｔｉｖａｔｉｏｎＤｅｆｉｎｉｔｉｏｎインターフェースの属性である。各引数およびリテラル定義は、存在するときは、ＩＤｅｆｉｎｉｔｉｏｎＥｌｅｍｅｎｔである。
【００７４】
【表１０】
2007538314.tif 000011
【００７５】
コンピュータ環境の実施例
図８は、本明細書で説明される技術を実施するために使用できる、汎用コンピュータ環境３００を示す。コンピュータ環境３００は、コンピュータ環境の一例でしかなく、コンピュータおよびネットワークアーキテクチャの使用または機能性の範囲についてのいかなる限定を指示することを意図しない。コンピュータ環境３００はまた、例示的コンピュータ環境３００において示されたコンポーネントのいずれか１つまたは組合せに関するいかなる依存性または要件をも有するとして解釈されるべきでない。
【００７６】
コンピュータ環境３００は、コンピュータ３０２の形式における汎用コンピューティングデバイスを含む。コンピュータ３０２を、例えば、図１のコンピューティングデバイス１０２であることができる。コンピュータ３０２は、マルチメディアプレゼンテーションのソースであるエンコーダデバイスであることもできる。コンピュータ３０２のコンポーネントは、１つまたは複数のプロセッサまたは処理装置３０４、システムメモリ３０６、およびプロセッサ３０４を含む様々なシステムコンポーネントをシステムメモリ３０６に結合するシステムバス３０８を含むことができるが、これに限られない。
【００７７】
システムバス３０８は、いくつかのタイプのバス構造のいずれかの１つまたは複数を提示し、これらのバス構造には、メモリバスまたはメモリコントローラ、周辺バス、ＡＧＰ（アクセラレーテッドグラフィクスポート）、およびプロセッサまたはローカルバスを含み、様々なバスアーキテクチャのいずれかを使用する。例として、このようなアーキテクチャは、ＩＳＡ（業界標準アーキテクチャ）バス、ＭＣＡ（マイクロチャネルアーキテクチャ）バス、ＥＩＳＡ(拡張ＩＳＡ）バス、ＶＥＳＡ(Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、および、Ｍｅｚｚａｎｉｎｅバスとしても知られるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ）バスを含むことができる。
【００７８】
コンピュータ３０２は通常、様々なコンピュータ可読媒体を含む。このような媒体は、コンピュータ３０２によってアクセス可能な、任意の利用可能な媒体であることができ、揮発性および不揮発性の媒体、リムーバブルおよび非リムーバブルの媒体を含む。
【００７９】
システムメモリ３０６は、ランダムアクセスメモリ（ＲＡＭ）３１０などの揮発性メモリ、および／または読み取り専用メモリ（ＲＯＭ）３１２などの不揮発性メモリの形式において、コンピュータ可読媒体を含む。起動中などのコンピュータ３０２内での要素間で情報の転送を助ける基本ルーチンを含む、基本入力／出力システム（ＢＩＯＳ）３１４は、ＲＯＭ３１２に格納される。ＲＡＭ３１０は通常、処理装置３０４によって即時アクセス可能および／または現在そこで操作中である、データおよび／またはプログラムモジュールを含む。
【００８０】
コンピュータ３０２は、他のリムーバブル／非リムーバブル、揮発性／不揮発性のコンピュータストレージ媒体を含むこともできる。例として、図８は、非リムーバブル、不揮発性の磁気媒体（図示せず）からの読み取りまたは書き込みを行うためのハードディスクドライブ３１６、リムーバブルで不揮発性の磁気ディスク３２０（例えば、「フロッピーディスク」）への読み取りまたは書き込みを行うための磁気ディスクドライブ３１８、および、ＣＤ  ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体などの、リムーバブルで不揮発性の光ディスク３２４への読み取りおよび／または書き込みを行うための光ディスクドライブ３２２を示す。ハードディスクドライブ３１６、磁気ディスクドライブ３１８、および光ディスクドライブ３２２は、１つまたは複数のデータ媒体インターフェース３２６によって、それぞれシステムバス３０８に接続される。代わりに、ハードディスクドライブ３１６、磁気ディスクドライブ３１８、および光ディスクドライブ３２２は、１つまたは複数のインターフェース（図示せず）によって、システムバス３０８に接続することができる。
【００８１】
これらのディスクドライブおよびこれらの関連付けられたコンピュータ可読媒体は、コンピュータ３０２のための、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージを提供する。この例は、ハードディスク３１６、リムーバル磁気ディスク３２０、およびリムーバブル光ディスク３２４を示すが、磁気カセットもしくは他の磁気ストレージデバイス、フラッシュメモリカード、ＣＤ−ＲＯＭ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋｓ）もしくは他の光ストレージ、ＲＡＭ（ランダムアクセスメモリ）、ＲＯＭ（読み取り専用メモリ）、ＥＥＰＲＯＭ(Ｅｌｅｃｔｒｏｎｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  ｍｅｍｏｒｙ）などの、コンピュータによってアクセス可能であるデータを格納することができる他のタイプのコンピュータ可読媒体も、例示的コンピューティングシステムおよび環境を実施するために利用できることを理解されたい。
【００８２】
任意の数のプログラムモジュールは、ハードディスク３１６、磁気ディスク３２０、光ディスク３２４、ＲＯＭ３１２および／またはＲＡＭ３１０上に格納することができ、これらは例として、オペレーティングシステム３２６、１つまたは複数のアプリケーションプログラム３２８、他のプログラムモジュール３３０およびプログラムデータ３３２を含む。このようなオペレーティングシステム３２６、１つまたは複数のアプリケーションプログラム３２８、他のプログラムモジュール３３０およびプログラムデータ３３２の各々（または、それらのある組合せ）は、分散ファイルシステムをサポートする常駐コンポーネントの全部または一部を実装してもよい。
【００８３】
ユーザは、キーボード３３４およびポインティングデバイス３３６（例えば「マウス」）など、入力デバイスを介して、コマンドおよび情報をコンピュータ３０２へ入力することができる。他の入力デバイス３３８（具体的に図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナ、および／または同様の物を含んでよい。これらおよび他の入力デバイスは、システムバス３０８に連結される入出力インターフェース３４０を介して、処理装置３０４へ接続されるが、パラレルポート、ゲームポートまたはＵＳＢ（ユニバーサルシリアルバス）などの、他のインターフェースおよびバス構造によって接続されてもよい。
【００８４】
モニタ３４２または他のタイプの表示デバイスも、ビデオアダプタ３４４などのインターフェースを介して、システムバス３０８へ接続することができる。モニタ３４２に加えて、他の出力周辺デバイスは、スピーカ（図示せず）およびプリンタ３４６などの、入力／出力インターフェース３４０を介してコンピュータ３０２に接続できるコンポーネントを含めることができる。
【００８５】
コンピュータ３０２は、ネットワーク環境において、リモートコンピューティングデバイス３４８などの、１つまたは複数のリモートコンピュータへの論理接続を使用して動作することができる。例として、リモートコンピューティングデバイス３４８は、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルーター、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノードなどであることができる。リモートコンピューティングデバイス３４８は、本明細書でコンピュータ３０２に関連して説明された要素および特徴の多数またはすべてを含むことができる、ポータブルコンピュータとして示される。
【００８６】
コンピュータ３０２とリモートコンピュータ３４８の間の論理接続は、ＬＡＮ（ローカルエリアネットワーク）３５０および一般のＷＡＮ（ワイドエリアネットワーク）３５２として表される。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
【００８７】
ＬＡＮネットワーキング環境において実装されるとき、コンピュータ３０２は、ネットワークインターフェースまたはアダプタ３５４を通して、ローカルネットワーク３５０へ接続される。ＷＡＮネットワーキング環境において実装されるとき、コンピュータ３０２は通常、モデム３５６、またはワイドネットワーク３５２上で通信を確立するための他の手段を含む。コンピュータ３０２の内部または外部にすることができるモデム３５６は、入力／出力インターフェース３４０または他の適切なメカニズムを通して、システムバス３０８へ接続することができる。示されたネットワーク接続は例示的で、コンピュータ３０２および３４８の間で通信リンクを確立する他の手段を採用できることを理解されたい。
【００８８】
コンピューティング環境３００で示されたようなネットワーク環境において、コンピュータ３０２に関連して表されたプログラムモジュールまたはその一部は、リモートメモリストレージデバイスに格納できる。例として、リモートアプリケーションプログラム３５８は、リモートコンピュータ３４８のメモリデバイス上に備わっている。例示のため、アプリケーションプログラム、および、オペレーティングシステムなどの他の実行可能プログラムコンポーネントは、本明細書で個別ブロックとして示すが、このようなプログラムおよびコンポーネントは、様々な時間において、コンピューティングデバイス３０２の異なるストレージコンポーネント内に備わっていて、コンピュータのデータプロセッサによって実行されることは認識される。
【００８９】
様々なモジュールおよび技術は、１つまたは複数のコンピュータまたは他のデバイスによって実行されるプログラムモジュールなどの、コンピュータ実行可能命令の一般的なコンテンツにおいて、本明細書で説明されるかもしれない。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含み、これらは特定のタスクを実行するか、または特定の抽象データ型を実装する。通常、プログラムモジュールの機能性は、様々な実施形態において望まれるように結合または分散されてよい。
【００９０】
これらのモジュールおよび技術の実施態様は、コンピュータ可読媒体のいくつかの形式で格納されるか、または送信されてもよい。コンピュータ可読媒体は、コンピュータによってアクセスできる任意の利用可能な媒体であり得る。限定ではなく例として、コンピュータ可読媒体は、「コンピュータストレージ媒体」および「通信媒体」を備えてよい。
【００９１】
「コンピュータストレージ媒体」は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの、情報の格納のための任意の方法または技術において実装された、揮発性および不揮発性、リムーバブルおよび非リムーバブルの媒体を含む。コンピュータストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋｓ）、もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージディスク、もしくは他の磁気ストレージデバイス、または、所望の情報を格納するために使用することができ、コンピュータによってアクセスすることができる、他の任意の媒体を含み、それに限られない。
【００９２】
「通信媒体」は通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波あるいは他のトランスポートメカニズムなどの変調データ信号に具体化する。通信媒体もまた、任意の情報配信媒体を含む。「変調データ信号」という語は、信号に情報をエンコードするような方法で、その特性の１つまたは複数を設定又は変更した信号を意味する。例として、通信媒体は、有線ネットワーク、または直接有線接続などの有線媒体、および音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。上記のあらゆる組合せもまた、コンピュータ可読媒体の範囲内に含まれる。
【００９３】
上記の説明は、構造的特徴および／または方法論的動作に特有である言語を使用するが、添付の特許請求の範囲で定義された本発明は、説明された特定の特徴または動作に限定されないことを理解されたい。むしろ、特定の特徴および動作は、本発明の実装の例示的形式として開示される。
【図面の簡単な説明】
【００９４】
【図１】汎用ユーザインターフェースコマンドアーキテクチャが使用される、コンピューティングデバイスの一例を示す。
【図２】汎用ＵＩコマンドアーキテクチャの一例をさらに詳細に示す。
【図３】汎用ＵＩコマンドアーキテクチャの一例をさらに詳細に示す。
【図４】汎用ＵＩコマンドアーキテクチャを使用してコマンドを提示するためのプロセスの一例を示す流れ図である。
【図５】コマンドブローカを作成するためのコンポーネントの一例を示すブロック図である。
【図６】オブジェクト定義のためのデータ構造の一例を示す。
【図７】コマンドブローカを作成するためのプロセスの一例を示す流れ図である。
【図８】本明細書で説明される技術を実現するために使用することができる、汎用コンピュータ環境を示す。
【図１】
2007538314.tif 000012
【図２】
2007538314.tif 000013
【図３】
2007538314.tif 000014
【図４】
2007538314.tif 000015
【図５】
2007538314.tif 000016
【図６】
2007538314.tif 000017
【図７】
2007538314.tif 000018
【図８】
2007538314.tif 000019