(57)【要約】      （修正有）【課題】対話型ホワイトボードプロジェクターのペンデバイスをＰＣ上のアプリケーションと共有する。【解決手段】リモートデスクトップ接続を介して（クライアント）と通信しているコンピューター（ホスト）が、複数のマウス（すなわち、描画ペン）をサポートするサードパーティアプリケーションを起動し、これらのアプリケーションに、プロジェクター上で接続されている各ペンデバイスに関する仮想マウスデバイスおよび入力イベント信号を提供する。追加のドライバーも、接続された物理的なハードウェアも存在しないにもかかわらず、アプリケーションは、インストールされた複数のマウスとともにホストシステムが構成されているかのように挙動する。【選択図】図２
2013168142.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供する方法であって、
前記クライアントプロジェクターと、前記ホストコンピューターとの間のリモートデスクトップセッションを確立することと、
前記クライアントプロジェクターにおいて、前記プロセッサーを使用して、
複数のヒューマンインターフェイスデバイスからの入力を捕捉し、前記ヒューマンインターフェイスデバイス入力を前記ホストコンピューターに転送することと、
前記ホストコンピューターにおいて、プロセッサーを使用して、
前記クライアントプロジェクターから前記ヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持することと、
前記ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることと、
各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集することと、
前記ホストコンピューター上で実行中の前記アプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返すことと、
を含む方法。
【請求項２】
ｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることは、フックハンドラーを用いて前記関数呼び出しを処理することを含む、請求項１に記載の方法。
【請求項３】
デバイス到着およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートすることをさらに含む、請求項１に記載の方法。
【請求項４】
各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持することをさらに含む、請求項１に記載の方法。
【請求項５】
前記アプリケーションに返される前記情報は、ホストコンピューターヒューマンインターフェイスデバイスハンドルおよび仮想デバイスハンドルのカウントおよびリストを含む、請求項１に記載の方法。
【請求項６】
前記クライアントプロジェクターヒューマンインターフェイスデバイスからの前記入力は、フラグ、ボタン状態および座標情報のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項７】
前記クライアントプロジェクターヒューマンインターフェイスデバイスは、電子ホワイトボードペンである、請求項１に記載の方法。
【請求項８】
前記ホストコンピューターと、前記クライアントプロジェクターとの間のリモートデスクトップサービス仮想チャネルを確立することと、
前記リモートデスクトップサービス仮想チャネル上で前記クライアントプロジェクターから転送されたヒューマンインターフェイスデバイス入力を、前記ホストコンピューターによって受信することと、をさらに含む、請求項１に記載の方法。
【請求項９】
仮想デバイスは、仮想マウスである、請求項１に記載の方法。
【請求項１０】
ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供するシステムであって、
前記クライアントプロジェクターと、前記ホストコンピューターとの間のリモートデスクトップセッションを確立し、
複数のヒューマンインターフェイスデバイスからの入力を捕捉し、前記ヒューマンインターフェイスデバイス入力を前記ホストコンピューターに転送する
プロセッサーを、前記クライアントプロジェクター内に含み、
前記クライアントプロジェクターから前記ヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持し、
前記ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトし、
各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集し、
前記ホストコンピューター上で実行中の前記アプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返す
プロセッサーを、前記ホストコンピューター内に含む、
システム。
【請求項１１】
前記ホストコンピュータープロセッサーは、ｒａｗ  ｉｎｐｕｔ関数呼び出しを、フックハンドラーを用いて前記関数呼び出しを処理することによってインターセプトする、請求項１０に記載のシステム。
【請求項１２】
前記ホストコンピュータープロセッサーまたはクライアントプロジェクタープロセッサーは、デバイス到着およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートする、請求項１０に記載のシステム。
【請求項１３】
前記ホストコンピュータープロセッサーまたはクライアントプロジェクタープロセッサーは、各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持する、請求項１０に記載のシステム。
【請求項１４】
前記アプリケーションに返される前記情報は、ホストコンピューターヒューマンインターフェイスデバイスハンドルおよび仮想デバイスハンドルのカウントおよびリストを含む、請求項１０に記載のシステム。
【請求項１５】
前記クライアントプロジェクターヒューマンインターフェイスデバイスは、電子ホワイトボードペンである、請求項１０に記載のシステム。
【請求項１６】
前記クライアントプロジェクターから転送されたヒューマンインターフェイスデバイス入力を、前記ホストコンピューターによって受信するために、前記ホストコンピューターと、前記クライアントプロジェクターとの間のリモートデスクトップサービス仮想チャネルをさらに含む、請求項１０に記載のシステム。
【請求項１７】
ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供する方法を実行するためにコンピューターによって実行可能な命令を具現化する、１つ以上の有形の非一時的コンピューター可読媒体であって、前記方法は、
前記クライアントプロジェクターと、前記ホストコンピューターとの間のリモートデスクトップセッションを確立することと、
前記クライアントプロジェクターにおいて、前記プロセッサーを使用して、
複数のヒューマンインターフェイスデバイスからの入力を捕捉し、前記ヒューマンインターフェイスデバイス入力を前記ホストコンピューターに転送することと、
前記ホストコンピューターにおいて、プロセッサーを使用して、
前記クライアントプロジェクターから前記ヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持することと、
前記ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることと、
各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集することと、
前記ホストコンピューター上で実行中の前記アプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返すことと、
を含む、１つ以上の有形の非一時的コンピューター可読媒体。
【請求項１８】
ｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることは、フックハンドラーを用いて前記関数呼び出しを処理することを含む、請求項１７に記載の１つ以上の有形の非一時的コンピューター可読媒体。
【請求項１９】
前記方法は、デバイス到着およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートすることをさらに含む、請求項１７に記載の１つ以上の有形の非一時的コンピューター可読媒体。
【請求項２０】
前記方法は、各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持することをさらに含む、請求項１７に記載の１つ以上の有形の非一時的コンピューター可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本方法は、全般的に、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのリモートデスクトップサービスコンポーネント（以前のターミナルサービス）およびＲａｗ  Ｉｎｐｕｔ  ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ：アプリケーションプログラミングインターフェイス）に関し、特に、リモートデスクトップセッションの中で実行中のアプリケーションに、複数のクライアントマウスデバイスの入力イベントを提供することに関する。
【背景技術】
【０００２】
一般に、従来のプロジェクターは、十分に大きな投写面積をもたらすには、表示面から長い距離を置いて配置される必要がある。さらに、適切に設置・配置されなければ、放出される光路に障害物のない状態が維持されないこともある。そのような表示面の前または付近を通る発表者は、プロジェクターの明るい光の方に向き、それが目に入ることがよくあり、または表示面に自分の影をもたらしながら投写画像の色に染まることもある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
短投写距離プロジェクターは、こうした問題の緩和を助けるものであり、特に、対話型投写システムには不可欠である。こうしたプロジェクターは、理想的には、目標の表示面より上の壁または天井に配置される。短投写距離技術は、プロジェクターが下の壁に十分大きなスクリーン画像を出力できるようにし、さらに、高所に設置されることで、対話するユーザーが簡単に近づくことができ遮るもののないスクリーン画像を提供する。さらに、ターゲット面の上、且つ近くに設置された短投写距離プロジェクターは、発表者／参加者の目への光の投写を減少させ、ユーザーが光の出力経路と交差するときに生じる影を軽減する。このような理由により、多数の対話型ホワイトボードシステムが、その表示コンポーネントに短投写距離プロジェクターを使用している。
【０００４】
対話型電子ホワイトボードシステムでは、デジタルペンがインクに取って代わり、仮想ホワイトボード上にコンテンツを描く入力インターフェイスを提供する。従来、デジタルペンは、自然なユーザーエクスペリエンスを与えるためにそのインク等価物をモデルにした、物理的なハードウェア要素である。デジタルペンは、その位置を伝送することも、他の形でその表示面上のポジションに関してリモート監視されることもある。さらに、ボタン、向き、またはそのほか各ペンの一意の識別特徴が、サポートするアプリケーションによって検出されることもあり、動作に影響を及ぼすために、または描画機能を変更もしくは操作するために、またはアクティビティーを変更するために使用可能である。コンピューターアプリケーションは、そのようなペンの対話を使用して、ホワイトボードの面に種々の出力を生成することができる。例えば、移動するペンのポジション情報が、コンピューターアプリケーションによって監視され、その結果としてコンピューターアプリケーションは、アプリケーションウィンドウ内の対応するペンポジションにおいて、仮想キャンバス上に電子カラー画素をペイントする。アプリケーションによって同時に表示されているキャンバスが、仮想ペンを使用して電子インクを付けて書いたかのように見せる。この種の技術は新しいものではなく、タブレット、「ペン」の代用物としてのマウス、または他の入力ソースを使用する電子ペインティングアプリケーションは非常に人気があり、簡単に入手できる。
【０００５】
対話型ホワイトボードシステムが人気を得るにつれ、複数のペン入力のサポートを提供するシステムがより強く望まれるようになっている。複数の入力は、同時ユーザーが対話を共有することを可能にするか、または特定の入力デバイスを用いて異なる対話型要素を区別する簡単な方法を提供する。残念ながら、多入力認識アプリケーションのサポートは限られている。アプリケーション開発者は、特定のハードウェアに対してシステムベンダーにより提供されるＡＰＩを使用するか、または、アプリケーションのオペラビリティを最大化するために、ベンダーがペン入力をマウスデバイスとして機能するよう構成していれば、一般的なオペレーティングシステムのサポートに依存しなければならない。アプリケーションが複数のデバイスにアクセスしてその入力を得ることを可能にする、オペレーティングシステムの開発者ＡＰＩでさえ、比較的新しいか、または明確に定義されていない。さらに、オペレーティングシステム自体、典型的には、一度に１人のユーザー対話向けに構成されており、同じ種類の複数のデバイスを単一の統合されたデバイスとして扱う。例えば、複数のマウスが取り付けられ、多数のコンピューターおよびそのオペレーティングシステムによって認識されることは可能である。しかし、一般に、個々のマウスそれぞれの操作は、提供される単一のシステムポインターを制御するよう機能する。その結果、接続された複数のマウスは、統合され、単一のスクリーン要素を制御／共有する。
【０００６】
様々なオペレーティングシステム内のいくつかの低レベル開発者ＡＰＩは、確かに、個々の一意のマウスデバイスへのアプリケーションアクセスを可能にする。しかし、アプリケーションのＧＵＩ（ｇｒａｐｈｉｃａｌ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ：グラフィカルユーザーインターフェイス）のみと動作し得る、各マウスデバイスの別々のポインターおよびポジション関数を作成することは、アプリケーションの責任であることが多い。その結果、複数のペンをサポートするアプリケーションは、通常、特定の目的または特定のデバイスのセット専用である。他の場合には、アプリケーションは、制限された、単一デバイスオペレーティングシステムＡＰＩのみサポートすることを選ぶ。
【０００７】
Ｍｉｃｒｏｓｏｆｔオペレーティングシステムは、低レベルＲａｗ  Ｉｎｐｕｔ  ＡＰＩを開発者に提供し、これを介してアプリケーションは、システムに接続された任意のヒューマンインターフェイスデバイス（ＨＩＤ：ｈｕｍａｎ  ｉｎｔｅｒｆａｃｅ  ｄｅｖｉｃｅ）に関する情報を獲得することができる。さらに、Ｍｉｃｒｏｓｏｆｔは、複数のマウスデバイスをサポートする共通アプリケーション環境を公開するＭｕｌｔｉＰｏｉｎｔ  Ｍｏｕｓｅ  ＳＤＫ（ｓｏｆｔｗａｒｅ  ｄｅｖｅｌｏｐｍｅｎｔ  ｋｉｔ：ソフトウェア開発キット）を用いる、マネージドコードソリューションを開発した。このＳＤＫは、複数のデバイスを追跡するためのウィンドウプラットフォームをアプリケーションに与え、カーソルアイコン、ポジション、ならびにその他のマウスに関係するＧＵＩを管理しイベントを追跡するための、有用なサポートを含む。
【０００８】
例えば、ＥｐｓｏｎのＢｒｉｇｈｔＬｉｎｋ  ４７５Ｗｉインタラクティブプロジェクターは、対話型ホワイトボードプロジェクター（ＩＷＰ：ｉｎｔｅｒａｃｔｉｖｅ  ｗｈｉｔｅｂｏａｒｄ  ｐｒｏｊｅｃｔｏｒ）をもたらす電子ホワイトボードアプリケーションを備える短投写距離プロジェクターとして構成されている。このオールインワン製品ソリューションは、プロジェクターによって出力される描画領域上で動作する２つの電子ペンを提供することによって、従来のホワイトボードに取って代わろうとするものである。ペンは、受信機によって検出および管理され、内部ホワイトボードアプリケーションに入力を提供する。ＩＷＰおよびペンを使用するよう構成されていることもあるホストＰＣ上の任意のアプリケーションに、同様の入力を提供することが、本発明の目的である。
【０００９】
図１は、ネットワーク１２上でホストコンピューター１６に接続されているいくつかの対話型ホワイトボードプロジェクター（ＩＷＰ）１０の例を示す。短投写距離プロジェクターは、壁の高いところまたは天井に設置されるため、機能的インターフェイスブレイクアウトボックス１４は、プロジェクターから下方へ延長されて、表示面３０の隣に配置されている。このボックスは、ユーザーボタンと、ホワイトボードアプリケーションの対話型ペンデバイスとを含む。ＩＷＰは、ネットワークベースのプロジェクターとして、コンテンツおよび対話を他のＩＷＰデバイスと共有するよう構成されていてもよい。その結果、複数のユーザーペン入力が、サポートしているリモートのアプリケーション内で提供および利用され得る。
【００１０】
実際には、ネットワークプロジェクターは、いくつかのリモートソースデバイスから得られた表示コンテンツを出力するために利用可能である。ネットワークプロジェクター上でのデバイス入力も、リモートターゲットデバイスにより使用され得る。
【００１１】
それほど多くの入力デバイスを提供することに関する主要な課題は、ＩＷＰに接続されたホストＰＣ上のアプリケーションとのデバイスハードウェアの共有である。以前の製品ソリューションでは、供給される入力ハードウェアは、ペン入力を解釈するドライバーがインストールされたホストＰＣに物理的に接続されていた。しかし、ＩＷＰは、ネットワークベースの製品であるため、入力デバイスを接続する追加の配線は適切ではない。既存のネットワーク上でハードウェア信号を伝送することが、１つのソリューションである。これには例えば、デバイスのネットワークベースのＵＳＢドライバーがＰＣにインストールされることが要求され得る。しかし、一般に、ユーザーはそのシステムにデバイスドライバーをインストールすることを好まない。
【００１２】
ネットワークプロジェクターでは、アプリケーションスクリーンコンテンツをネットワーク上でホストＰＣからプロジェクター表示に送信することが、既に何らかの伝送方法を要求する。同時係属出願第１３／３３２，７５１号で説明されているように、Ｍｉｃｒｏｓｏｆｔのリモートデスクトップサービスは、Ｗｉｎｄｏｗｓオペレーティングシステム環境におけるこの状況に、理想的に適している可能性がある。この伝送インターフェイスを介して入力デバイスを送信することは可能である。残念ながら、ホストされたリモートデスクトップセッションでは、リモートデスクトップ接続クライアントアプリケーションによって、単一のマウスおよびキーボードデバイスしか提供されない。クライアント（プロジェクター）上の複数のマウスは、リモートデスクトッププロトコルによって単一のマウスデバイスへと統合されることになる。リモートデスクトップセッションを実行しているアプリケーションは、単一のマウスデバイスしか認識しないことになる。
【００１３】
ホスト上で追加のデバイスを物理的に接続することは、配線およびドライバーの理由で望ましくないものとして既に説明したが、これは、リモートデスクトップセッションで動作する場合にも問題がある。この理由は、ホストマシンのローカルＨＩＤデバイスが、リモートデスクトップ接続の間、Ｗｉｎｄｏｗｓログオンスクリーンデスクトップとなる入力デスクトップに動作を制限されるためである。これは、ホストされたリモートデスクトップセッション内で実行中のアプリケーションでは、複数のＨＩＤデバイスは、見られることも利用されることもできないことを意味する。
【００１４】
望ましいのは、ＩＷＰおよびインターフェイスボックスクライアントが、リモートデスクトップサービスを使用してホストＰＣと接続し、デスクトップアプリケーションに期待される表示出力パフォーマンスを得ることを可能にするソリューションである。さらに、望ましいソリューションは、リモートデスクトップセッション内で、ＩＷＰおよびインターフェイスボックスクライアント上の複数のペンデバイスが、ホストＰＣ上で起動された任意の多入力アプリケーションに利用可能となることも可能にすると考えられる。これは、大規模な追加のソフトウェアまたはドライバーのインストールを要求しないことが理想的であろう。さらに、ＩＷＰ表示がホストＰＣによって利用されていないときに、ＩＷＰのペンデバイスを同ＰＣ上のアプリケーションと共有することが望ましいと考えられる。本発明は、これらの目標およびその他の目標を達成することを対象とする。
【００１５】
本発明の方法および装置は、クライアントデバイスに取り付けられている複数のマウスからの入力イベントを、ホスト上でリモートデスクトップセッションにおいて実行中のターゲットアプリケーションに、リモートデスクトップ接続を使用して伝送する。本発明は、ホストシステム上にマウスドライバーがインストールされることは必要とせず、それでも、ＭｉｃｒｏｓｏｆｔのＲａｗ  ＩｎｐｕｔまたはＭｕｌｔｉＰｏｉｎｔ  Ｍｏｕｓｅ  ＳＤＫを使用するターゲットアプリケーションが、クライアントデバイス上のマウスにそれぞれ関連する仮想マウスデバイスのセットからのマウス入力を特定して、それと相互運用することを可能にする。
【００１６】
具体的には、本発明は、リモートデスクトップ接続を介してＥＰＳＯＮの対話型ホワイトボードプロジェクター（クライアント）と通信しているＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗ’ｓ（登録商標）ベースのコンピューター（ホスト）が、複数のマウス（すなわち、描画ペン）をサポートするサードパーティアプリケーションを起動し、これらのアプリケーションに、プロジェクター上で接続されている各ペンデバイスの仮想マウスデバイスおよび入力イベント信号を提供することを可能にする。追加のドライバーも、接続された物理的なハードウェアも存在しないにもかかわらず、アプリケーションは、インストールされた複数のマウスとともにホストシステムが構成されているかのように挙動する。
【００１７】
本発明は、ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供するためのシステム、方法および／またはコンピューター可読媒体を提供する。本方法は、例えば、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションを確立することと、クライアントプロジェクターにおいて、プロセッサーを使用して、複数のヒューマンインターフェイスデバイスからの入力を捕捉し、ヒューマンインターフェイスデバイス入力をホストコンピューターに転送することと、ホストコンピューターにおいて、プロセッサーを使用して、クライアントプロジェクターからヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持することと、ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることと、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集することと、ホストコンピューター上で実行中のアプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返すことと、を含む。
【００１８】
好適な実施形態では、ｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることは、フックハンドラーを用いて関数呼び出しを処理することを含む。別の実施形態は、デバイス到着（ａｒｒｉｖａｌ）およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートすることをさらに含む。
【００１９】
実施形態は、各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持することをさらに含む。別の実施形態では、アプリケーションに返される情報は、ホストコンピューターヒューマンインターフェイスデバイスハンドルおよび仮想デバイスハンドルのカウントおよびリストを含む。
【００２０】
実施形態では、クライアントプロジェクターヒューマンインターフェイスデバイスからの入力は、フラグ、ボタン状態、および座標情報のうちの少なくとも１つを含み、別の実施形態では、クライアントプロジェクターヒューマンインターフェイスデバイスは、電子ホワイトボードペンである。
【００２１】
さらなる実施形態では、本発明の方法は、ホストコンピューターと、クライアントプロジェクターとの間のリモートデスクトップサービス仮想チャネルを確立することと、リモートデスクトップサービス仮想チャネル上でクライアントプロジェクターから転送されたヒューマンインターフェイスデバイス入力を、ホストコンピューターによって受信することとをさらに含む。さらに別の実施形態では、仮想デバイスは、仮想マウスである。
【００２２】
添付の図面と併せて解釈される以下の説明および特許請求の範囲を参照することによって、本発明のより深い理解とともに、このほかの目的および達成が明らかになり正しく認識される。
【課題を解決するための手段】
【００２３】
本発明の方法は、
（１）ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供する方法であって、
前記クライアントプロジェクターと、前記ホストコンピューターとの間のリモートデスクトップセッションを確立することと、
前記クライアントプロジェクターにおいて、前記プロセッサーを使用して、
複数のヒューマンインターフェイスデバイスからの入力を捕捉し、前記ヒューマンインターフェイスデバイス入力を前記ホストコンピューターに転送することと、
前記ホストコンピューターにおいて、プロセッサーを使用して、
前記クライアントプロジェクターから前記ヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持することと、
前記ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることと、
各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集することと、
前記ホストコンピューター上で実行中の前記アプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返すことと、
を含むことを特徴とする。
【００２４】
（２）  ｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることは、フックハンドラーを用いて前記関数呼び出しを処理することを含む。
【００２５】
（３）  デバイス到着およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートすることをさらに含む。
【００２６】
（４）  各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持することをさらに含む。
【００２７】
（５）  前記アプリケーションに返される前記情報は、ホストコンピューターヒューマンインターフェイスデバイスハンドルおよび仮想デバイスハンドルのカウントおよびリストを含む。
【００２８】
（６）  前記クライアントプロジェクターヒューマンインターフェイスデバイスからの前記入力は、フラグ、ボタン状態および座標情報のうちの少なくとも１つを含む。
【００２９】
（７）  前記クライアントプロジェクターヒューマンインターフェイスデバイスは、電子ホワイトボードペンである。
【００３０】
（８）  前記ホストコンピューターと、前記クライアントプロジェクターとの間のリモートデスクトップサービス仮想チャネルを確立することと、
前記リモートデスクトップサービス仮想チャネル上で前記クライアントプロジェクターから転送されたヒューマンインターフェイスデバイス入力を、前記ホストコンピューターによって受信することと、をさらに含む。
【００３１】
（９）  仮想デバイスは、仮想マウスである。
【００３２】
また、本発明のシステムは、
（１）  ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供するシステムであって、
前記クライアントプロジェクターと、前記ホストコンピューターとの間のリモートデスクトップセッションを確立し、
複数のヒューマンインターフェイスデバイスからの入力を捕捉し、前記ヒューマンインターフェイスデバイス入力を前記ホストコンピューターに転送する
プロセッサーを、前記クライアントプロジェクター内に含み、
前記クライアントプロジェクターから前記ヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持し、
前記ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトし、
各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集し、
前記ホストコンピューター上で実行中の前記アプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返す
プロセッサーを、前記ホストコンピューター内に含むことを特徴とする。
【００３３】
（２）  前記ホストコンピュータープロセッサーは、ｒａｗ  ｉｎｐｕｔ関数呼び出しを、フックハンドラーを用いて前記関数呼び出しを処理することによってインターセプトする。
【００３４】
（３）  前記ホストコンピュータープロセッサーまたはクライアントプロジェクタープロセッサーは、デバイス到着およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートする。
【００３５】
（４）  前記ホストコンピュータープロセッサーまたはクライアントプロジェクタープロセッサーは、各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持する。
【００３６】
（５）  前記アプリケーションに返される前記情報は、ホストコンピューターヒューマンインターフェイスデバイスハンドルおよび仮想デバイスハンドルのカウントおよびリストを含む。
【００３７】
（６）  前記クライアントプロジェクターヒューマンインターフェイスデバイスは、電子ホワイトボードペンである。
【００３８】
（７）  前記クライアントプロジェクターから転送されたヒューマンインターフェイスデバイス入力を、前記ホストコンピューターによって受信するために、前記ホストコンピューターと、前記クライアントプロジェクターとの間のリモートデスクトップサービス仮想チャネルをさらに含む。
【００３９】
また、本発明のコンピューターによる読み取り可能な記録媒体は、
（１）  ネットワークによって接続されている、クライアントプロジェクターと、ホストコンピューターとの間のリモートデスクトップセッションにおいて、複数のヒューマンインターフェイスデバイス入力を提供する方法を実行するためにコンピューターによって実行可能な命令を具現化する、１つ以上の有形の非一時的コンピューター可読媒体であって、前記方法は、
前記クライアントプロジェクターと、前記ホストコンピューターとの間のリモートデスクトップセッションを確立することと、
前記クライアントプロジェクターにおいて、前記プロセッサーを使用して、
複数のヒューマンインターフェイスデバイスからの入力を捕捉し、前記ヒューマンインターフェイスデバイス入力を前記ホストコンピューターに転送することと、
前記ホストコンピューターにおいて、プロセッサーを使用して、
前記クライアントプロジェクターから前記ヒューマンインターフェイスデバイス入力を受信し、各クライアントプロジェクターヒューマンインターフェイスデバイスに関する情報を仮想デバイスとして記憶および保持することと、
前記ホストコンピューター上で実行中のアプリケーションからのｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることと、
各ホストコンピューターヒューマンインターフェイスデバイスに関する情報を収集することと、
前記ホストコンピューター上で実行中の前記アプリケーションに、各ホストコンピューターヒューマンインターフェイスデバイスに関する情報および各仮想デバイスに関する情報を返すことと、
を含む。
【００４０】
（２）  ｒａｗ  ｉｎｐｕｔ関数呼び出しをインターセプトすることは、フックハンドラーを用いて前記関数呼び出しを処理することを含む。
【００４１】
（３）  前記方法は、デバイス到着およびデバイス取り外しイベントを含む各仮想デバイスに関するシステムイベントをシミュレートすることをさらに含む。
【００４２】
（４）  前記方法は、各クライアントプロジェクターヒューマンインターフェイスデバイスを命名および特定するために使用される仮想デバイスオブジェクトを保持することをさらに含む。
【図面の簡単な説明】
【００４３】
【図１】ネットワーク上のいくつかの対話型ホワイトボードプロジェクター（ＩＷＰ）を示す図。
【図２】本発明のシステムの概略のブロック図。
【図３】本発明の方法の概略のステップを示す図。
【図４】本発明のホストコンピューターおよびクライアントプロジェクターのプロセッサーおよびメモリーの単純なブロック図。
【発明を実施するための形態】
【００４４】
ＩＷＰ（対話型ホワイトボードプロジェクター）上のハードウェアペン入力デバイス、実質的にはコンピューターマウスを、ホストコンピューター内のアプリケーションに提供することが有用なのは、そのハードウェア入力が、アプリケーションによって検出および使用可能である場合に限られる。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム内で実行されているアプリケーションは、接続されている各マウスおよびその入力に関する詳細をアプリケーションに提供できるいくつかのＡＰＩ（アプリケーションプログラミングインターフェイス）にアクセスできる。Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩは、コアＷｉｎｄｏｗｓオペレーティングシステムのユーザーＡＰＩクライアント動的リンクライブラリー（ＤＬＬ：ｄｙｎａｍｉｃ  ｌｉｎｋ  ｌｉｂｒａｒｙ）、すなわちｕｓｅｒ３２．ｄｌｌにあり便利な、Ｃ関数、構造体およびメッセージの小さなコレクションを与えるものである。Ｒａｗ  Ｉｎｐｕｔは、デバイスへの低レベルアクセスおよび登録されているトップレベルコレクションクラスからのイベントの好ましいインターフェイスである。Ｍｉｃｒｏｓｏｆｔは、よりハイレベルなＭｕｌｔｉＰｏｉｎｔ  Ｍｏｕｓｅ  ＳＤＫ（ソフトウェア開発キット）も提供するが、これは内部ではＲａｗ  Ｉｎｐｕｔインターフェイスの上に構築される。したがって、複数のマウス入力デバイスをサポートするアプリケーションは、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩを利用している可能性が高い。
【００４５】
Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩを、独自のカスタムバージョンに置き換えることが容易にできれば、本発明の１つの目的を達成できるであろう。このカスタムバージョンは、公開されるインターフェイス関数それぞれに関して期待されるＲａｗ  Ｉｎｐｕｔ  ＡＰＩの挙動をまねて、その一方で、カスタム要件をサポートするために必要な変更も提供するよう実装されることが可能であると考えられる。例えば、カスタムバージョンは、各ＡＰＩメソッドから返される結果が、確実にすべてのマウスデバイスを除外するようにできるであろう。使用するアプリケーションの観点からは、ＡＰＩメソッドは、正しく動作していることになり、アプリケーションは、マウスデバイスは接続されていないとレポートすることになる。別の例では、カスタムバージョンは、実際に利用可能であるよりも多いデバイスにより応答することができるであろう。使用するアプリケーションは、ＡＰＩがそのようにインターフェイスガイドラインの範囲内で応答したため、より多くのデバイスが存在すると確信し、それに応じて応答することになる。したがって、カスタムバージョンは、ネットワーク上のＩＷＰからの入力、例えば各ペンデバイスのイベントデータを受信して、この情報を、アプリケーションが対話している変更されたＲａｗ  Ｉｎｐｕｔ  ＡＰＩを介して、アプリケーションに中継できるであろう。
【００４６】
この置き換え手法の問題の１つは、ｕｓｅｒ３２．ｄｌｌが、Ｒａｗ  Ｉｎｐｕｔメソッドのみではなく、ＡＰＩの大きなセットを公開するということである。それらをすべて置き換えるのは困難であり、可能性は低いと考えられる。さらに、このｕｓｅｒ３２．ｄｌｌは、それが本物であることを確認することができる、様々なシステムユーティリティーによる検査を受けることが多い、コアＷｉｎｄｏｗｓオペレーティングシステムファイルである。
【００４７】
この問題を克服するために、本発明には、インターセプト、すなわちフッキングという、別のオプションが選ばれた。フッキングは、ソフトウェアコンポーネント間のインターフェイスにて、関数呼び出しまたはメッセージイベントをインターセプトすることによって、そうしたコンポーネントを改変または拡大できるようにする。この手法により、ターゲット関数のインメモリーコードを書き換えることによって、任意の関数をインターセプトおよび拡張することができる。拡張されたバージョンが、もとのターゲット実装を呼び出してもとの結果を獲得することができるように、もとのターゲット関数が保存されることも可能である。ＡＰＩ監視方法に関して都合がよければ、ユーザーモードフッキングも、関数の結果を変更または改変するために使用され得る。Ｍｉｃｒｏｓｏｆｔ  Ｄｅｔｏｕｒ、ＡＰＩＳｐｙ３２、またはオープンソースＥａｓｙＨｏｏｋエンジンなどの製品は、フッキング手法を利用するアプリケーションを自分の製品において作成したい開発者に、フッキング関数を備えるライブラリーおよびフレームワークを提供する。
【００４８】
実装され得るＡＰＩフッキングメソッドは多数ある。これには、インポートテーブルパッチング（ｉｍｐｏｒｔ  ｔａｂｌｅ  ｐａｔｃｈｉｎｇ）、拡張インポートテーブルパッチング（ｅｘｔｅｎｄｅｄ  ｉｍｐｏｒｔ  ｔａｂｌｅ  ｐａｔｃｈｉｎｇ）、エクスポートテーブルパッチング（ｅｘｐｏｒｔ  ｔａｂｌｅ  ｐａｔｃｈｉｎｇ）、シンプルコード上書き（ｓｉｍｐｌｅ  ｃｏｄｅ  ｏｖｅｒｗｒｉｔｉｎｇ）および拡張コード上書き（ｅｘｔｅｎｄｅｄ  ｃｏｄｅ  ｏｖｅｒｗｒｉｔｉｎｇ）などの手法が含まれる。本発明は、フッキングが、コアＲａｗ  Ｉｎｐｕｔ  ＡＰＩ関数へのアクセスを得るために使用され、必須の要件であることを除いて、特定のフッキング手法またはそのメソッドに関係することも、それに限定されることもない。
【００４９】
多くのフッキングメソッドでは、インジェクターコンポーネントが、カスタムフックライブラリーコードモジュールを、ターゲットアプリケーションのプロセス内に適切な時にロードしてインストールする。一手法では、インジェクターは、実行時に、プロセスメモリーにロードされた共有ライブラリー内の所望のターゲット関数のインポート記述子テーブルを変更する。このような変更は、アプリケーションがインポートテーブルマッピングを使用してメソッドを呼び出そうと試みると所望のターゲット関数をインターセプトする、カスタムフックライブラリー内のフックハンドラーに、呼び出しを提供する。フックハンドラー内に実装されたコードは、単にアクションを監視してログをとり、もとのネイティブターゲット実装に実行を転送してもよい。代わりに、意図される関数挙動を変更するよう、またはもとの結果をカスタマイズもしくはフィルタリングするよう、またはメソッドを完全に置き換えるようコードが作られ得る。最終的に、フックは、呼び出しアプリケーションに実行を返す。フッキング手法を使用すると、完全なＡＰＩライブラリーの置き換えに似たターゲットソリューションを実現できる。
【００５０】
本発明は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムにおいてＭｉｃｒｏｓｏｆｔのＲａｗ  Ｉｎｐｕｔ  ＡＰＩを使用するサードパーティアプリケーションに「仮想マウス」を提供し、１つ以上のマウスデバイスをサポートする。本発明の方法は、サードパーティアプリケーションがリモートデスクトップセッション内で実行されていても機能する。本発明の目標の１つは、ＩＷＰ上の複数の一意のペンデバイスからの入力を、ホストＰＣ上で実行されているアプリケーションに、ネットワーク上で安全に提供することである。本発明は、他のソース位置からの「仮想マウス」がアプリケーション動作に含まれることを可能にする。
【００５１】
「仮想マウス」は、それらをオペレーティングシステムが認識していないという点で、実際のマウスデバイスと区別される。一方、アプリケーションは、それらを獲得するためにオペレーティングシステムＡＰＩサービスを使用することになるため、「仮想マウス」は、アプリケーションレイヤーには実際のマウスデバイスのように見えなければならない（すなわちＲＡＷ  Ｉｎｐｕｔ）。ＥｐｓｏｎのＢｒｉｇｈｔＬｉｎｋ  ４７５Ｗｉ  ＩＷＰなどの対話型ホワイトボードプロジェクターとともに動作するペンデバイスをサポートするために、いかなるカスタムアプリケーション変更も要求しないことが目的である。マウスドライバーがリモートの物理ハードウェアとともに動作する場合でも、そのようなドライバーをオペレーティングシステムにおいてインストールまたは使用することは望ましくない。これは、ネイティブＲａｗ  Ｉｎｐｕｔまたは関係するＡＰＩを介して、アプリケーションにデバイスへのアクセアスを自動的に提供するであろうが、デバイスは、すべてのアプリケーションに公開され、システムにより使用可能となる。最も重要なことは、リモートデスクトップセッション内で動作している間、オペレーティングシステムに公開されているすべてのマウスは、入力デスクトップに向けられるということである。リモートデスクトップセッションは、ある種の仮想マウスであり、リモートデスクトップ接続クライアントによって提供される、単一のリモートデスクトップマウスのみに制限される。したがって、ペンデバイスをオペレーティングシステムに公開することは、この状況では望ましくない。
【００５２】
本願明細書に記載されるネットワークプロジェクターは、クライアントと呼ばれることも、プロジェクターと呼ばれることもある。このプロジェクターは、リモートデスクトップコンテンツを表示するために、仮想ネットワーク接続に対するクライアント側アプリケーションを提供する。本願明細書に記載されるホストは、ネットワークコンピューター、ラップトップまたはハンドヘルドデバイスとして定義され、特に、クライアントとの仮想ネットワーキング接続においてサービング機能を提供することができる。実施形態では、ネットワークプロジェクターは、リモートデスクトップ接続クライアントアプリケーションのサポートを提供する、Ｗｉｎｄｏｗｓ組み込みオペレーティングシステムを導入する。ホストは、リモートデスクトップターミナルサーバーと呼ばれる、Ｍｉｃｒｏｓｏｆｔのリモートデスクトップサービスのサーバーコンポーネントを提供するネットワークコンピューターである。
【００５３】
図２は、本発明の主要なコンポーネントのブロック図による概観である。上記のように、本発明のクライアントは、ネットワーク１２に接続されたネットワークプロジェクター１０である。ネットワークプロジェクター１０（クライアント）は、ウェブサーバーコンポーネントを有するとよく、これは、必要なコンポーネントをホスト１６がインストールするためのアクセスインターフェイスを提供するためにプロジェクター１０で実行され、リモートデスクトップ接続プロセスを開始する方法を提供する。リモートデスクトップ接続プロセスの詳細は、本発明の理解に必要ではないが、２０１１年１２月２１日に出願された、所有者共通の米国特許出願第１３／３３２，７５１号に開示されており、その内容全体を参照によって本願明細書に引用したものとする。以下、ネットワークプロジェクター１０は、クライアントプロジェクター１０と呼ばれる。上記のように、ホスト１６は、例として図２に示されているネットワークコンピューターであっても、例として図３に示されているラップトップであっても、ハンドヘルドデバイスであってもよい。ホスト１６は、本願明細書では概してホストコンピューター１６と呼ばれる。図２に示されている好適な実施形態では、クライアントプロジェクター１０は、リモートデスクトップ接続クライアント１８アプリケーションのサポートを提供するＷｉｎｄｏｗｓ組み込みオペレーティングシステムを導入し、ホストコンピューター１６は、Ｗｉｎｄｏｗｓオペレーティングシステム提供のサーバーコンポーネントであるリモートデスクトップターミナルサーバー３４を導入する。
【００５４】
リモートデスクトップ接続クライアント１８は、クライアントプロジェクター１０内で実行され、リモートデスクトッププロトコル（ＲＤＰ：Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）４６を使用してホストコンピューター１６と通信するアプリケーションであり、ＲＤＰ４６は、ホストコンピューター１６がデスクトップ表示をクライアントプロジェクター１０に提供し、クライアントプロジェクター１０がキーボード／マウスイベント４９をホストコンピューター１６に提供するのに用いるインターフェイスである。リモートデスクトップ接続クライアント１８は、リモートデスクトップセッションを用いたアクセスおよび対話のために、クライアント上にユーザーインターフェイスを提供する。このコンポーネントは、マルチペン入力リダイレクションコンポーネント２４のように、リモートデスクトップサービス仮想チャネル２２を拡張するために必要なものなど、任意の外部動的リンクライブラリーのローディングを管理する。
【００５５】
クライアントプロジェクター１０のマルチペン入力捕捉モジュール２６は、接続されたペンデバイス２８（すなわち電子ホワイトボードペン）に対する列挙およびアクセス、個々のペンデバイス識別データの保持、ならびに最終的には各ペンのイベントデータを集めることを担当する。捕捉されたデータおよびデバイス情報は、ネットワーク１２上でホストコンピューター１６のコンポーネントに転送するために、マルチペン入力リダイレクションコンポーネント２４に送信される。ハードウェアデバイスからのイベントデータの捕捉には、このコンポーネントが、ドライバーまたはその他の低レベルインターフェイスの一部であることが必要であることもある。または、別のモジュールからこの情報を受信するよう構成されていてもよい。
【００５６】
マルチペン入力捕捉モジュール２６から出て行くイベントデータは、一般的なマウス関係のアクティビティー情報を含む構造の形式をとる。マルチペン入力捕捉モジュール２６は、構造がやり取りに適していることを保証する。一実施形態では、イベントデータは、Ｍｉｃｒｏｓｏｆｔの＿ＭＯＵＳＥ＿ＩＮＰＵＴ＿ＤＡＴＡ構造に似た形式に従い、フラグ、ボタン状態、および座標移動情報を含む。
【００５７】
一実施形態では、マルチペン入力リダイレクションコンポーネント２４との通信は、ＣｒｅａｔｅＭｓｇＱｕｅｕｅまたは同様のＡＰＩを使用してメッセージキューを介して提供される。その他の形式のプロセス間通信が使用されてもよい。代わりに、マルチペン入力捕捉モジュール２６は、マルチペン入力リダイレクションコンポーネント２４のサブコンポーネントとして含まれることが可能であろう。
【００５８】
クライアントプロジェクター１０のマルチペン入力リダイレクションコンポーネント２４は、リモートデスクトップサービス仮想チャネル２２のクライアント側エンドポイントを作成し、マルチペン入力捕捉モジュール２６によって受信されるマルチペン入力イベント３２を伝送する。マルチペン入力リダイレクションコンポーネント２４は、新たなリモートデスクトップ接続が確立されるとリモートデスクトップサービスによってロードされる、動的リンクライブラリーとしてパッケージ化される。
【００５９】
代わりの実施形態では、マルチペン入力リダイレクションコンポーネント２４は、別個に起動され、それ用の、マルチペン入力受信コンポーネント３６へのネットワークリンクを使用し、マルチペン入力受信コンポーネント３６も、その別個のネットワークリンクを使用するよう構成されている。このように、マルチペン入力イベント３２は代わりに別個のネットワークリンク上で送信されるため、リモートデスクトップコンポーネントは、マルチペン入力イベント３２を伝送するために必須ではない。
【００６０】
ホストコンピューター１６のリモートデスクトップターミナルサーバー３４は、リモートデスクトッププロトコル（ＲＤＰ）４６を使用してクライアントと通信する。これは、リモートデスクトップなどの、リモートデスクトップセッションのホスティングコンポーネントを提供し、クライアントマシン（すなわちクライアントプロジェクター１０）が、ユーザーデスクトップにアクセスするためにホストコンピューター１６と接続できるようにする。
【００６１】
ホストコンピューター１６のマルチペン入力受信コンポーネント２６は、リモートデスクトップサービス仮想チャネル２２のサーバー側エンドポイントを作成し、マルチペン入力リダイレクションコンポーネント２４から、マルチペン入力捕捉モジュール２６によって提供された入力イベントが伝送されるのを待つ。マルチペン入力受信コンポーネント２６は、受信されたペンデバイスイベント３２を、受信されたとおりに仮想マウスデバイスインターフェイス３８に送出する。
【００６２】
代わりの実施形態では、マルチペン入力受信コンポーネント２６は、別個のネットワーク接続を含むほかのソースから入力イベントを受信することができる。不必要なデータマーシャリングを回避するために、マルチペン入力受信コンポーネント２６は、仮想マウスデバイスインターフェイス３８のモジュールとして導入されることが可能であろう。
【００６３】
ホストコンピューター１６の仮想マウスデバイスインターフェイス３８は、収集する入力イベントから「仮想マウス」デバイス４０を準備または破棄するメソッドを提供する。この基本的なインターフェイスは、デバイス識別ハンドルおよびオプションのイベントデータを使用するＤｅｖｉｃｅＡｄｄ、ＤｅｖｉｃｅＲｅｍｏｖｅおよびＤｅｖｉｃｅＥｖｅｎｔインターフェイス関数を提供する。仮想マウスデバイスインターフェイス３８コンポーネントは、各論理（仮想）マウスの情報を記憶および保持し、それが受信するイベントデータを送出するか、またはそれを獲得するためのインターフェイスを提供する。
【００６４】
仮想マウスデバイスインターフェイス３８は、クイック起動フックインジェクターアプリケーション４２内に導入されてもよく、Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４の統合された部分であってもよい。
【００６５】
ホストコンピューター１６のクイック起動フックインジェクターアプリケーション４２は、実行中のターゲットアプリケーションへのＲａｗ  Ｉｎｐｕｔフックハンドラー４４コンポーネントのインジェクションを管理する。ターゲットアプリケーションは、任意選択で、クイック起動フックインジェクターアプリケーション４２によって起動され、アプリケーションのロードの直後、且つ実行の前にフックされる。
【００６６】
クイック起動フックインジェクターアプリケーション４２は、ツールバー、アプリケーションウィンドウ、またはその他のＧＵＩ（グラフィカルユーザーインターフェイス）要素を表示するとよく、「仮想マウス」入力を導入することが望まれるｒａｗ  ｉｎｐｕｔ認識ターゲットアプリケーションのユーザー選択を支援するために使用可能である。例えば、システム内のインストールされているアプリケーションのアイコンを含む、ツールバーに似たＧＵＩが提示されてもよい。アプリケーションを任意選択で起動し、続いてアプリケーションにＲａｗ  Ｉｎｐｕｔフックハンドラー４４コンポーネントをインジェクトするには、ユーザーは、単にアイコンを選択すればよい。別の実施形態では、実行中のアプリケーションのリストが選択され得る。リストから１つ選択することで、既に実行中のプロセスの動的フッキングが可能となる。別の実施形態では、ツールバー上のアプリケーションアイコンは、設定可能である。ユーザーは、例えば、アプリケーションショートカットまたは実行可能ファイルをツールバーエリアへとドラッグアンドドロップしてもよく、これは、アプリケーションアイコンにＧＵＩを追加させる。代わりに、ファイル選択ダイアログが提供され、ツールバーのアプリケーション要素を特定するために使用されてもよい。アイコンの選択は、関係するアプリケーションを起動する。
【００６７】
インジェクションは、使用されるフッキングフレームワークおよび方法に従って生じる。クイック起動フックインジェクターアプリケーション４２は、フッキングプロセスの確立が難しいことをユーザーに知らせることのような（すなわち、選ばれたアプリケーションがＲａｗ  Ｉｎｐｕｔプロトコルを使用していない）、インジェクションプロセスのステータスのレポートを行うよう構成され得る。
【００６８】
クイック起動フックインジェクターアプリケーション４２は、典型的には、新たなリモートデスクトップセッションのデスクトップ内に自動的に起動される。代わりに、クイック起動フックインジェクターアプリケーション４２は、ユーザーによって直接呼び出されてもよい。ツールバーとして、このアプリケーションは、ユーザーデスクトップ内の通常のコンポーネントとして構成され得る。いずれの場合にも、クイック起動フックインジェクターアプリケーション４２は、本発明のフッキング動作が供給されるアプリケーションへのブックマークを提供するよう利用可能であり、将来使用するために、任意の構成済みアプリケーションまたはインジェクションステータスイベントの状態を保存することができる。
【００６９】
一実施形態では、クイック起動フックインジェクターアプリケーション４２は、仮想マウスデバイスインターフェイス３８を保持し、起動されているすべてのＲａｗ  Ｉｎｐｕｔフックハンドラー４４との通信のためのコンジットを提供する。このように、クイック起動フックインジェクターアプリケーション４２は、システム内のすべての「仮想マウス」を管理することができる。
【００７０】
Ｒａｗ  ＩｎｐｕｔアプリケーションＡ．．．Ｎ５０は、独立した複数のマウスデバイスが有効であるとよいホストコンピューター１６上の既存のマルチデバイス認識アプリケーションである。各アプリケーションは、ネイティブオペレーティングシステムのＲａｗ  Ｉｎｐｕｔ  ＡＰＩ４８を使用するよう構成されている。
【００７１】
ホストコンピューター１６のＲａｗ  Ｉｎｐｕｔフックハンドラー４４は、選択された各ターゲットアプリケーションの実行中のプロセス空間にインジェクトされ、Ｍｉｃｒｏｓｏｆｔのｕｓｅｒ３２．ｄｌｌによって提供される必要なＲａｗ  Ｉｎｐｕｔ  ＡＰＩ４８を「フック」するために実行を開始する。このコンポーネントの主な役割は、インジェクトされたＲａｗ  Ｉｎｐｕｔ認識アプリケーションによって使用されるすべてのＲａｗ  Ｉｎｐｕｔ  ＡＰＩ４８関数呼び出しをインターセプトし、それをカスタム実装に置き換えることである。このカスタム実装は、ネイティブＲａｗ  Ｉｎｐｕｔ  ＡＰＩメソッドと通信するよう構成されているアプリケーションに、「仮想マウス」と、仮想マウスデバイスインターフェイス３８の関連する入力イベントとを提供する。このカスタム実装を完成させるには、Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４はさらに、ネイティブＲａｗ  Ｉｎｐｕｔ  ＡＰＩメカニズムと一致する形で、アプリケーションに対するいくつかのシステムイベントおよびメッセージをシミュレートしなければならない。例えば、「仮想マウス」デバイスに関するレポートおよび管理がホストオペレーティングシステムプロセスによって実行されたかのように、アプリケーションウィンドウメッセージキュー内にイベントをポストしたり、他の場合にはデバイスの到着およびデバイスの取り外しイベントをレポートしたりする。
【００７２】
一実施形態では、Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４内にいくつかのコンポーネントがある。それらについて、以下で概説する。
【００７３】
ＲａｗＩｎｐｕｔＨｏｏｋｓモジュールは、フックハンドラーインターセプトエントリポイントに、フックされる各Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩ関数の代わりのメソッドを提供する。Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩ４８関数がアプリケーションによって呼び出されると、フックハンドラーがその関数呼び出しを処理する。
【００７４】
ＧｅｔＲａｗＩｎｐｕｔＢｕｆｆｅｒ＿Ｈｏｏｋｅｄ関数は、呼び出しスレッドのＷｉｎｄｏｗｓメッセージキューに関連する仮想マウスイベントデータを返す。これは、ネイティブＧｅｔＲａｗＩｎｐｕｔＢｕｆｆｅｒメソッドから取得された任意のデータにこの情報を追加する。
【００７５】
ＧｅｔＲａｗＩｎｐｕｔＤａｔａ＿Ｈｏｏｋｅｄ関数は、送られてくる渡されたデータイベントハンドルを調べ、それが、以前提供されて仮想マウスメソッドに使用された一意のハンドルと一致すれば、イベントハンドルに関連する適切なデータおよび情報リクエストコマンドが返される。そうでなければ、メソッドは単に、ネイティブＧｅｔＲａｗＩｎｐｕｔＤａｔａを呼び出し、そのデータイベントハンドルに従ってシステムに処理を行わせる。
【００７６】
ＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＩｎｆｏＷ＿Ｈｏｏｋｅｄ（Ｕｎｉｃｏｄｅ）およびＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＩｎｆｏＡ＿Ｈｏｏｋｅｄ（ＡＮＳＩ）は、関係するＲａｗ  Ｉｎｐｕｔ  ＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＩｎｆｏＷおよびＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＩｎｆｏＡ関数のフックメソッドを提供する。フックされたハンドラーは、送られてくる渡されたデバイスハンドルを調べ、それが任意の既知の仮想マウスのデバイスハンドルと一致すれば、メソッドは、仮想マウスデバイスインターフェイス３８から、デバイスに関して集められた適切な情報を返す。その他の場合、デバイスハンドルは未知であるため、ネイティブＲａｗ  Ｉｎｐｕｔメソッドを呼び出した結果が返される。
【００７７】
ＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＬｉｓｔ＿Ｈｏｏｋｅｄ関数は、まず、ネイティブＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＬｉｓｔメソッドを呼び出すことによって、既知のデバイス、カウントなどのセットを収集する。続いて、フックされた関数は、返された結果を、仮想マウスデバイスインターフェイス３８内の情報に従って調整する。例えば、返された結果は、システムＨＩＤ（ヒューマンインターフェイスデバイス）ハンドルおよびすべての「仮想マウス」４０の仮想マウスデバイスハンドルの、カウントおよびリストの両方を供給する。
【００７８】
ＲｅｇｉｓｔｅｒｅｄＲａｗＩｎｐｕｔＤｅｖｉｃｅｓ＿Ｈｏｏｋｅｄ関数は、単に、ネイティブＲｅｇｉｓｔｅｒｅｄＲａｗＩｎｐｕｔＤｅｖｉｃｅメソッドを呼び出し、監視メソッドを実行し、ネイティブ結果を返す。監視メソッドは、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩにおけるアプリケーションの登録を調べるタスクを課されており、どのアプリケーションウィンドウまたはスレッドキューがマウスイベント情報をリクエストしているかを検出する。通知プロセスは、Ｒａｗ  Ｉｎｐｕｔ制御メソッドと似た形で適切なウィンドウターゲットに「仮想マウス」イベントデータを送信するために、この情報を使用する。ＧｅｔＲｅｇｉｓｔｅｒｅｄＲａｗＩｎｐｕｔＤｅｖｉｃｅｓメソッドは、通知状態を初期化するために、フックインジェクションプロセス中に呼び出される。
【００７９】
ＲａｗＩｎｐｕｔＮｏｔｉｆｉｅｒモジュールは、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩ４８に代わって（「仮想マウス」を認識しない）、「仮想マウス」イベントデータをアプリケーションに伝送することを担当するイベント通知スレッドを提供する。このモジュールはさらに、このプロセスをサポートするために、共通メッセージキュー関数へのフックエントリポイントを提供する。
【００８０】
ＧｅｔＭｅｓｓａｇｅ＿ＨｏｏｋｅｄおよびＰｅｅｋＭｅｓｓａｇｅ＿Ｈｏｏｋｅｄ関数は、ネイティブＧｅｔＭｅｓｓａｇｅおよびＰｅｅｋＭｅｓｓａｇｅ関数をインターセプトする。フックメソッドはまず、ネイティブ関数を呼び出し、アプリケーションによる処理の前に、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩのＷＭ＿ＩＮＰＵＴメッセージの、Ｗｉｎｄｏｗｓメッセージキュー削除を監視する。このＲａｗＩｎｐｕｔＮｏｔｉｆｉｅｒモジュールによってキュー内にメッセージがポストされたときに与えられる、一意的に提供されるＲａｗ  Ｉｎｐｕｔハンドルによって、メッセージが「仮想マウス」４０をターゲットにしていることが示されていれば、フックメソッドは、仮想マウススレッドバッファー内の次の「仮想マウス」イベントの削除を合図する。次のイベントが「古い」か、または他のメソッド（すなわち、ＧｅｔＲａｗＩｎｐｕｔＢｕｆｆｅｒ）によって処理されていれば、フックされた関数は、次のイベントが有効となるまで、必要に応じてＧｅｔＭｅｓｓａｇｅまたはＰｅｅｋＭｅｓｓａｇｅ関数でループする。
【００８１】
通知スレッドは、仮想マウスデバイスインターフェイス３８によって「仮想マウス」イベントが送出されると始動するよう構成されている。このスレッドは、任意の未解決イベントを収集し、アプリケーションに通知する。これは、ＰｏｓｔＭｅｓｓａｇｅを呼び出して、一意のＲａｗ  Ｉｎｐｕｔハンドルを使用してイベントに関するＷＭ＿ＩＮＰＵＴメッセージを挿入してもよい。アプリケーションは、後にこのメッセージを受信し、イベントデータおよびその他の詳細を獲得するために適切なＲａｗ  Ｉｎｐｕｔメソッドを呼び出す。通知メソッドはさらに、ＳｅｎｄＭｅｓｓａｇｅＴｉｍｅｏｕｔを呼び出して、ＷＭ＿ＩＮＰＵＴ＿ＤＥＶＩＣＥ＿ＣＨＡＮＧＥ通知を提供し、ＰｏｓｔＭｅｓｓａｇｅを呼び出して、「仮想マウス」の新たな到着または未解決の離脱（ｄｅｐａｒｔｕｒｅ）に関するＷＭ＿ＩＮＰＵＴ＿ＤＥＶＩＣＥ＿ＣＨＡＮＧＥメッセージを挿入するとよい。仮想マウスデバイスインターフェイス３８は、状態を保持するため、または未解決のデバイス変更の最終的なテアダウン（ｔｅａｒｄｏｗｎ）を実行するために必要に応じて呼び出される。最後に、通知スレッドは、ＳｅｎｄＩｎｐｕｔを使用して、Ｗｉｎｄｏｗｓメッセージキューステータス（変更のために直接のためには利用できない）を変更し、ｒａｗ  ｉｎｐｕｔイベントの未解決状態を反映するとよい。これは、このキューステータス状態を待つ任意のアプリケーションスレッドが始動することを可能にする。
【００８２】
ＶｉｒｔｕａｌＭｏｕｓｅオブジェクトは、一意のＤｅｖｉｃｅＨａｎｄｌｅおよびＤｅｖｉｃｅＩＤによって維持される。これらは、オペレーティングシステムによって他のデバイスに関して既に生成されたものに干渉しないように選ばれ、さらに、アプリケーションに対する特定のマウスを命名および特定するために使用される。
【００８３】
場合により仮想マウスデバイスインターフェイス３８を実装するＶｉｒｔｕａｌＤｅｖｉｃｅＭａｎａｇｅｒモジュールは、ＶｉｒｔｕａｌＭｏｕｓｅオブジェクトのリストの記憶を提供する。これは、一意のデバイスハンドルおよび外部仮想マウスデバイス識別子によって、ＶｉｒｔｕａｌＭｏｕｓｅオブジェクトへのマッピングを保持する。ＭｏｕｓｅＥｖｅｎｔｓ（ポストされたときの通知ウィンドウ、マウスデバイスハンドル、マウスイベントデータ、到着／離脱／データ状態などを含む）が、特定のアプリケーションスレッドｉｄに固有のＭｏｕｓｅＥｖｅｎｔＢｕｆｆｅｒｓに保持される。スレッド毎のバッファーおよびマッピングは、ＶｉｒｔｕａｌＤｅｖｉｃｅＭａｎａｇｅｒ内にある。送られてくる「仮想マウス」イベントの通知メッセージは、アプリケーションにポストされ、イベントは、適切なＭｏｕｓｅＥｖｅｎｔＢｕｆｆｅｒに記憶される。アプリケーションが通知メッセージを処理すると、イベントデータを取得するためにこれらのバッファーがアクセスされる。
【００８４】
以下は、図３内の概略のステップ（１〜６）に示されている、本発明の説明である。
【００８５】
図３の上半分は、本発明が解決する問題を示す。対話型ホワイトボードプロジェクター（ＩＷＰ）、すなわちクライアントプロジェクター１０が、リモートＰＣ、すなわちホストコンピューター１６に、リモートデスクトッププロトコル（ＲＤＰ）接続を介して接続されている。本発明のソリューションを用いないＲＤＰ接続では、複数のプロジェクター入力デバイス、すなわち電子ホワイトボードペン２８の入力は、システム（ホストコンピューター１６）およびホストコンピューター１６上で実行中のアプリケーションには１つのＲＤＰマウスしか見えないように、ＲＤＰ全体でマージされる。
【００８６】
本発明のソリューションは、３つの主な部分からなる。以下、図２を参照する。第１の部分は、ＩＷＰ（クライアントプロジェクター１０）上でペンデバイス入力を収集し（すなわちマルチペン入力捕捉モジュール２６）、それらをマウスイベント（３２）としてホストＰＣ（ホストコンピューター１６）上の受信機（マルチペン入力受信コンポーネント３６）へ伝送する。第２の部分は、仮想マウス４０のプールと、それらに関連するマウス入力データのイベントキューとを保持するインターフェイス（仮想マウスデバイスインターフェイス３８）を管理する。第３の部分は、ターゲットアプリケーション５０によって使用されているＲａｗ  Ｉｎｐｕｔ  ＡＰＩ４８メソッドをフックし（クイック起動フックインジェクターアプリケーション４２が、Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４をアプリケーションプロセス空間内にインジェクトする）、仮想マウス４０および関連するイベントを、フックされたメソッドの結果に挿入する。
【００８７】
本発明は、ローカルエリアネットワーク１２に接続され、クライアントからホストへのリモートデスクトップ接続４６によって相互接続された、クライアントプロジェクター１０（ＩＷＰ）およびホストコンピューター１６（例えばラップトップ）により開始する。ペン入力デバイス２８は、監視されるか、またはクライアントプロジェクター１０に接続され、クライアントプロジェクター１０は、これらの入力デバイスを列挙し、それぞれの一意の識別子のリストを保持するよう構成されている。入力デバイスおよび生成されるイベントは、適切なドライバー、ＡＰＩまたはその他の通知インターフェイスを使用してクライアントのマルチペン入力捕捉モジュール２６において捕捉される。
【００８８】
本発明は、必要に応じてペンイベントをマウスデバイスイベントに変換し（マルチペン入力捕捉モジュール２６によって）、それら（すなわちマルチペン入力イベント３２）を、ネットワーク上でホストコンピューター１６に伝送することによって続行する。クライアントとホストとの間に作成され接続されているリモートデスクトップサービス仮想チャネル２２は、このデータの好ましい経路の１つである。リモートデスクトッププロトコル４６を介してリモートデスクトップサービスによって自動的に提供されるセキュリティーおよび暗号化は、有利である。
【００８９】
本発明は、ホストコンピューター１６上で続行し、複数ペンデバイスのマウスデータが、マウスペン入力受信コンポーネント３６によって受信される。２０１１年１２月２１日に出願され、その内容全体を参照によって本願明細書に引用したものとする、所有者共通の米国特許出願第１３／３３２，７５１号により詳しく説明されているように、ホストコンピューター１６上で必要なモジュールは、プレインストールされていて、クライアントからのリモートデスクトップ接続の直前に起動されてもよい。あるいは、これらのモジュールは、ダウンロードされても、または他の場合にはプレインストールおよび構成されてもよい。任意選択で、受信コンポーネントは、ユーザーによって起動されるフッキングコンポーネントと統合されてもよい。
【００９０】
受信された入力は、仮想マウスデバイスインターフェイス３８に渡され、仮想マウスデバイスインターフェイス３８は、ホストアプリケーション５０によって使用されるＲａｗ  Ｉｎｐｕｔ  ＡＰＩ４８メソッドをオーバーライドするフックハンドラーによって処理される「仮想マウス」４０および情報キューを構築または無効化する。「仮想マウス」イベントは、任意のＲａｗ  Ｉｎｐｕｔフックハンドラー４４に送出され、メソッドの結果に追加される。したがって、アプリケーション５０は、「仮想マウス」からのイベントデータを含むＡＰＩメソッド結果を、この情報が物理マウスデバイスに関係するオペレーティングシステムマウスドライバーによって提供されたかのように受信する。
【００９１】
本発明は、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩ４８を介した１つ以上のマウス入力を必要とするアプリケーション５０を、ユーザーが特定して起動すると続行する。ツールバーまたは同様のアプリケーション要素のような任意選択のＧＵＩインターフェイスが、アプリケーションを起動するため、または既存のアプリケーションを列挙するために提供されてもよい。本発明は、起動されたアプリケーションに本発明のフッキングモジュールをインジェクトする合図が提供されると、続行する。合図は、アプリケーション起動プロセス内のステップとして任意選択のＧＵＩツールバーによって提供されてもよく、または別個のアクションの間に生じてもよい。Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４のＲａｗＩｎｐｕｔＨｏｏｋｓモジュールについては、上記にさらに詳しく記載されている。インジェクター（クイック起動フックインジェクターアプリケーション４２）は、フッキングモジュール（ＲａｗＩｎｐｕｔＨｏｏｋｓ）をターゲットアプリケーションのプロセス空間内にロードし、実行を開始する。
【００９２】
フッキングモジュールは、Ｒａｗ  Ｉｎｐｕｔメソッドに対するアプリケーション呼び出しを、フッキングモジュールが提供する代わりの実装でインターセプトするために、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩ４８メソッドを発見し、フックをセットする。続いて、本発明は、通常のアプリケーション実行を可能にすることによって続行する。
【００９３】
フッキングモジュールは、仮想マウスデバイスインターフェイス３８からの、デバイス到着および離脱を含む、送られてくる「仮想マウス」イベントを獲得および監視するために、スレッドを作成する。登録されたデバイスクラス、受信イベントウィンドウなどをセットアップするアプリケーションＲａｗ  Ｉｎｐｕｔ呼び出しに従って、関係するメッセージが構築されアプリケーションのＷｉｎｄｏｗｓメッセージキュー内に挿入される。アプリケーション５０がＲａｗ  Ｉｎｐｕｔ  ＡＰＩ呼び出しを行うとき、それらは、Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４内のフックメソッドによってインターセプトされ、フックメソッドは、オペレーティングシステム（ＯＳ）結果を受信するためにネイティブＲａｗ  Ｉｎｐｕｔメソッドを呼び出し、続いてＯＳ結果が、「仮想マウス」データを含むよう変更される。
【００９４】
図３の下半分は、本発明の概略のプロセスを示す。一般に、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム内で実行されているアプリケーションは、接続されている各マウスおよびその入力に関する詳細をアプリケーションに提供できるいくつかのＡＰＩ（アプリケーションプログラミングインターフェイス）にアクセスできる。ホストコンピューター１６上で実行中のアプリケーション５０が、図面の左側に示されており、本発明のＲａｗ  Ｉｎｐｕｔフックが、図面の右側にある。ステップ１において、動的リンクライブラリー（ＤＬＬ）インジェクションが、Ｒａｗ  Ｉｎｐｕｔメソッドに対する本発明のＲａｗ  Ｉｎｐｕｔフックハンドラー４４を、アプリケーション５０によってロードされたＳＤＫ（ソフトウェア開発キット）ライブラリー内にインストールする。ステップ２において、アプリケーション５０がＲａｗ  Ｉｎｐｕｔ  ＡＰＩ関数を呼び出す。この例では、アプリケーションは、任意の接続された入力デバイスをまとめるために、ＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＬｉｓｔ  ＳＤＫメソッドを呼び出そうとする。ステップ３において、Ｒａｗ  Ｉｎｐｕｔフックハンドラー４４は、Ｒａｗ  Ｉｎｐｕｔ  ＡＰＩ４８関数呼び出しに対するアプリケーション５０呼び出しをインターセプトし、それを、本発明によるフックハンドラーメソッドにリダイレクトする。例えば、ステップ３において、システム内のすべての登録されているＨＩＤ（ヒューマンインターフェイスデバイス）を獲得するべきである、ＧｅｔＲａｗＩｎｐｕｔＤｅｖｉｃｅＬｉｓｔのフックされたバージョンが呼び出される。ステップ４において、もとのネイティブＲａｗ  Ｉｎｐｕｔ  ＳＤＫライブラリーメソッドが呼び出され、オペレーティングシステム（ＯＳ）は、２つのデバイス、すなわちリモートデスクトップキーボード５４およびマウスデバイス５６を返す。ステップ５において、続いて本発明のフッキングモジュールは、仮想マウスインターフェイス３８から、認識している仮想マウス（すなわち３つのマウス）を追加し、ステップ６において、変更されたメソッドの結果（すなわち合計５つのデバイス）をアプリケーション５０に返す。
【００９５】
上記の本発明の方法ステップは、好適には、ホストコンピューター１６および／またはクライアントプロジェクター１０内のメモリーおよび／またはアクセス可能な外部メモリーに記憶されているかまたはロード可能な、コンピューター実行可能命令、プログラム、ソフトウェア、ファームウェアを実行する、ホストコンピューター１６および／またはクライアントプロジェクター１０内の１つ以上のプロセッサーによって実行される。図４は、ホストコンピューター１６およびクライアントプロジェクター１０内のプロセッサーおよびメモリーを概略的に示す、大幅に単純化されたブロック図である。ホストコンピューター１６のプロセッサーは、例えば中央処理ユニット（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）１６１および１つ以上のグラフィカル処理ユニット（ＧＰＵ：ｇｒａｐｈｉｃａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）１６２を含むとよい。内部メモリーは、例えばＲＡＭ１６３およびＲＯＭ１６４を含むとよい。Ｉ／Ｏインターフェイス１６５は、例えばキーボード５４、マウス５６および外部メモリー１６６との通信を可能にする。クライアントプロジェクター１０は、同様に、ＣＰＵ１０１、ＲＡＭ１０２およびＲＯＭ１０２を含むとよい。
【００９６】
様々な実施形態が、デジタル電子回路において、またはコンピューターハードウェア、ファームウェア、ソフトウェアにおいて、またはその組み合わせにおいて実装可能である。装置は、プログラマブルプロセッサーによる実行のために非一時的機械可読記憶デバイスにおいて有形に具現化されたコンピュータープログラム製品において実装可能であり、方法ステップは、入力データに作用し出力を生成することにより機能を実行するために命令のプログラムを実行するプログラマブルプロセッサーにより実行可能である。実施形態は、データ記憶システムからデータおよび命令を受信し、データ記憶システムにデータおよび命令を伝送するよう結合された、少なくとも１つのプログラマブルプロセッサーと、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを含むプログラマブルシステム上で実行可能な、１つ以上のコンピュータープログラムにおいて有効に実装可能である。各コンピュータープログラムは、高水準手続き型もしくはオブジェクト指向プログラミング言語で、または必要に応じてアセンブリー言語もしくは機械語で実装可能である。いずれの場合も、言語は、コンパイラー型またはインタプリタ型言語とされ得る。適切なプロセッサーには、例として、汎用および専用両方のマイクロプロセッサーが含まれる。一般に、プロセッサーは、読み取り専用メモリーおよび／またはランダムアクセスメモリーから命令およびデータを受信する。一般に、コンピューターは、データファイルを記憶する１つ以上の大容量記憶デバイスを含む。そのようなデバイスには、内蔵ハードディスクおよび取り外し可能ディスクなどの磁気ディスク、光磁気ディスクおよび光ディスクがある。コンピュータープログラム命令およびデータを有形に具現化するのに適した記憶デバイスには、あらゆる形式の不揮発性メモリーがあり、例として、ＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリーデバイスなどの半導体メモリーデバイス、内蔵ハードディスクおよび取り外し可能ディスクなどの磁気ディスク、光磁気ディスクならびにＣＤ−ＲＯＭディスクなどがある。前述のうち任意のものは、ＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ：特定用途向け集積回路）により補完されること、またはそれに組み込まれることが可能である。
【００９７】
いくつかの特定の実施形態と関連して本発明について記載したが、当業者には当然のことながら、さらなる多数の選択肢、変更および変形物が、前述の説明を考慮に入れると明らかとなる。例えば、提案されたフッキングモジュールは、オペレーティングシステム内にインストールも、他の形で構成もされていない「仮想マウス」を、選ばれたアプリケーション内に挿入する方法を提供する。こうした仮想マウスのイベントデータは、リモートデスクトップ接続のクライアントから到着する必要はない。代わりに、別の実施形態では、リモートデスクトップサービス仮想チャネルが使用されず、マウスイベントデータは、代わりのネットワーク接続から到着する。例えば、別のコンピューターが、イベントを生成すること、またはローカル接続されたマウスからのイベントをホストＰＣ上のアプリケーションと共有することができるであろう。このように、リモートデスクトップサービスは、本方法の、独立した無関係な任意選択のコンポーネントである。
【００９８】
さらに別の実施形態では、ネットワーク接続は使用されず、マウスイベントデータは、ホスト内で実行中の別のアプリケーションから到着する。このアプリケーションは、本物のマウスデバイスをシミュレートしても、アクティブなマウスを選ぶ何らかのメカニズムを用いて追加の選択可能なマウスを与えても、当該データをマウスデータに書き換えフックされたアプリケーションの仮想マウスデバイスインターフェイスへ送信される、マウスのようなほかの何らかのハードウェアデバイス間のインターフェイスを提供しても、または単に任意数の入力イベントをデモンストレーションスクリプトに従って提供してもよい。したがって、本願明細書に記載された発明は、添付の特許請求の範囲の意図および範囲内に入るそうした選択肢、変更、適用および変形物すべてを包含するものとする。
【図４】
2013168142.tif 000003
【図１】
2013168142.tif 000004
【図２】
2013168142.tif 000005
【図３】
2013168142.tif 000006