(57)【要約】  本発明は、オブジェクトをローカルモジュールとリモートモジュールとの間でドラッグアンドドロップするための方法、システム及びコンピュータプログラム製品に適用する。ターミナルサーバコンポーネントはドラッグアンドドロップ操作における当事者の機能性をシミュレートして、オブジェクトをローカルモジュールとリモートモジュールとの間及びその逆の間でドラッグアンドドロップすることを容易にする。ターミナルサーバコンポーネントは、ローカルに通信してドラッグアンドドロップ操作に参加するモジュールと連動する。ターミナルサーバコンポーネントはターミナルサーバセッションを介してメッセージを送り、ターミナルサーバセッションの他端にある相手方ターミナルサーバコンポーネントに対し適切なドラッグアンドドロップ情報を中継する。
2009540428.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステム（１０１）において、該コンピュータシステム（１０１）は該コンピュータシステム（１０１）において稼働するローカルアプリケーション（１０２）とクライアントコンポーネント（１０６）とを備え、該クライアントコンポーネント（１０６）はサーバコンピュータシステム（１１１）にあるサーバコンポーネント（１１６）とのターミナルサーバセッション（１３１）に参加し、ドラッグアンドドロップを使用してオブジェクトをローカルアプリケーション（１０２）からサーバコンピュータシステム（１１１）にあるリモートモジュールに転送する方法であって、該方法は、
デスクトップウインドウカーソル（１３３）がリモートアプリケーション（１１２）のためのアプリケーションウインドウ（１１２Ｗ）の境界の外側から内側に移動したことをクライアントコンポーネント（１０６）が検出する処理と、
未処理のドラッグアンドドロップ操作を示すドロップ通知であって、ドラッグアンドドロップオブジェクト（１２６）がリモートアプリケーション（１１２）に転送される旨を示すドロップ通知をクライアントコンポーネント（１０６）が受け取る処理と、
ドラッグアンドドロップオブジェクト（１２６）をデスクトップウインドウカーソル（１３３）の座標位置と共にサーバコンピュータシステム（１１１）にターミナルサーバセッション（１３１）を介して転送する要求を、ドロップ通知の受領に応答してクライアントコンポーネント（１０６）が送付する処理と、
ドラッグアンドドロップオブジェクトに関する要求をサーバコンピュータシステム（１１１）からターミナルサーバセッション（１３１）を介してクライアントコンポーネント（１０６）が受け取る処理と、
ドラッグアンドドロップオブジェクト（１２６）に関する要求の受領に応答して、リモートアプリケーション（１１２）の代わりにクライアントコンポーネント（１０６）が代理ドロップターゲットとして作用することであって、
ドラッグアンドドロップオブジェクト（１２６）に関する要求をローカルアプリケーション（１０２）に転送する処理と、
ドラッグアンドドロップオブジェクト（１２６）に関する要求に応答して送付されるローカルアプリケーション（１０２）からのドラッグアンドドロップオブジェクト（１２６）を受け取る処理とを含む、クライアントコンポーネント（１０６）が代理ドロップターゲットとして作用することと、
リモートアプリケーション（１１２）へのデリバリのために、クライアントコンポーネント（１０６）が、ターミナルサーバセッション（１３１）を介してドラッグアンドドロップオブジェクト（１２６）を、サーバコンピュータシステム（１１１）に送付する処理と
を含むことを特徴とする方法。
【請求項２】
クライアントコンポーネントがドラッグアンドドロップオブジェクトをローカルアプリケーションから受け取ることができるよう、クライアントコンポーネントを代理ドロップターゲットとして構成する処理を更に含むことを特徴とする請求項１に記載の方法。
【請求項３】
ローカルアプリケーションのためのユーザインタフェースを表すローカルアプリケーションウインドウの内側からドラッグアンドドロップオブジェクトを選択するユーザ入力を受け取る処理と、
デスクトップウインドウカーソルを変更して、ドラッグアンドドロップオブジェクトが変更されたことを視覚的に示す処理と
を更に含むことを特徴とする請求項１に記載の方法。
【請求項４】
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の外側から内側に移動したことを検出する処理は、デスクトップウインドウカーソルがローカルアプリケーションウインドウの境界の内側からリモートアプリケーションのためのアプリケーションウインドウの境界の内側に移動したことを検出する処理を含むことを特徴とする請求項１に記載の方法。
【請求項５】
未処理のドラッグアンドドロップ操作を示すドロップ通知を受け取るクライアントコンポーネントの処理は、入力装置の上のボタンの状態における変化を検出する処理を含むことを特徴とする請求項１に記載の方法。
【請求項６】
ドラッグアンドドロップオブジェクトをデスクトップウインドウカーソルの座標位置と共にターミナルサーバセッションを介してサーバコンピュータシステムに転送する要求を送付するクライアントコンポーネントの処理は、メッセージをターミナルサーバセッションの仮想チャンネルの上で送付する処理を含むことを特徴とする請求項１記載の方法。
【請求項７】
ドラッグアンドドロップオブジェクトをデスクトップウインドウカーソルの座標位置と共にサーバコンピュータシステムに対しターミナルサーバセッションを介して転送する要求を送付するクライアントコンポーネントの処理は、リモートデスクトッププロトコルセッションを介してメッセージを送付する処理を含むことを特徴とする請求項１記載の方法。
【請求項８】
コンピュータシステムにおいて、該コンピュータシステムは該コンピュータシステムにおいて稼働する一つ以上のリモートアプリケーションとサーバコンポーネントとを含み、該サーバコンポーネントはクライアントコンピュータシステムにあるクライアントコンポーネントとのターミナルサーバセッションに参加し、コンピュータシステムにおいて稼働する一つ以上のリモートアプリケーションはターミナルサーバセッション上でクライアントコンピュータシステムにより遠隔にアクセスされるよう構成され、ドラッグアンドドロップを使用してオブジェクトを一つ以上のリモートアプリケーションのうち一つに対しクライアントコンピュータシステムにあるモジュールから転送する方法であって、該方法は、
ターミナルサーバセッションを介して送付される、ドラッグアンドドロップオブジェクトをコンピュータシステムに転送する要求とクライアントコンピュータシステムにおけるデスクトップウインドウカーソルの座標位置とをサーバコンポーネントが受け取る処理と、
ドラッグアンドドロップオブジェクト転送通知を座標位置に相当するリモートアプリケーションに対しサーバコンポーネントが転送する処理と、
リモートアプリケーションからドラッグアンドドロップオブジェクトに関する要求を受け取るサーバコンポーネントの処理を含めて、ドラッグアンドドロップオブジェクトを転送する要求の受け取りに応答してクライアントコンピュータシステムにあるアプリケーションの代わりにサーバコンポーネントが代理ドロップソースとして作用することと、
ドラッグアンドドロップオブジェクトに関する要求をクライアントコンポーネントにターミナルサーバセッションを介してサーバコンポーネントが転送する処理と、
ドラッグアンドドロップオブジェクトをクライアントコンポーネントからターミナルサーバセッションを介してサーバコンポーネントが受け取る処理と、
ドラッグアンドドロップオブジェクトをリモートコンピュータに対して送付するサーバコンポーネントの処理を含めて、ドラッグアンドドロップオブジェクトの受け取りに応答してクライアントコンピュータシステムにあるアプリケーションの代わりに代理ドロップソースとして作用するサーバコンポーネントと、
を含むことを特徴とする方法。
【請求項９】
クライアントコンピュータシステムにおけるデスクトップウインドウカーソルの位置を示すコンピュータシステムおよび座標位置にドラッグアンドドロップオブジェクトを転送する要求を受け取るサーバコンポーネントの処理は、ターミナルサーバセッションの仮想チャンネルを介してメッセージを受け取る処理を含むことを特徴とする請求項８に記載の方法。
【請求項１０】
代理オブジェクトを作成してドラッグアンドドロップオブジェクトが公示するフォーマットを模倣する処理を更に含むことを特徴とする請求項８に記載の方法。
【請求項１１】
サーバコンポーネントを代理ドロップソースとして構成し、サーバコンポーネントがドラッグアンドドロップオブジェクトをリモートアプリケーションに対して提供することができるようにする処理を更に含むことを特徴とする請求項８に記載の方法。
【請求項１２】
ドラッグアンドドロップモーダルループを開始するサーバコンポーネントの処理を更に含むことを特徴とする請求項８に記載の方法。
【請求項１３】
コンピュータシステムにおいて、該コンピュータシステムは、該コンピュータシステムにおいて稼働するローカルアプリケーションとクライアントコンポーネントとを含み、クライアントコンポーネントはサーバコンピュータシステムにあるサーバコンポーネントとのターミナルサーバセッションに参加し、ドラッグアンドドロップを使用して、オブジェクトをサーバコンピュータシステムにあるリモートモジュールからローカルアプリケーションに対して転送する方法であって、該方法は、
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の内側から外側に移動されたことをクライアントコンポーネントが検出する処理と、
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の内側から外側に移動されたことをサーバコンポーネントに対して通知するメッセージを、ターミナルサーバセッションを介してサーバコンポーネントにクライアントコンポーネントが送付する処理と
ドラッグアンドドロップオブジェクトに関する要求の受領に応答してリモートアプリケーションの代わりに代理ドロップソースとしてクライアントコンポーネントが作用するであって、ドラッグアンドドロップオブジェクトに関するクエリーをローカルアプリケーションから受け取るクライアントコンポーネントの処理を含み、そのクエリーは、ドラッグアンドドロップオブジェクトをローカルアプリケーションに対して転送することを表すローカルアプリケーションにおけるドロップ通知を表示することと、
ドラッグアンドドロップオブジェクトに関する要求をクライアントコンポーネントがサーバコンポーネントに送付する処理であって、その要求はターミナルサーバセッションを介してクエリーに応答して送付され、その要求はサーバコンポーネントに対しローカルアプリケーションがドラッグアンドドロップオブジェクトを要求していることを示す、クライアントコンポーネントが送付する処理と、
ドラッグアンドドロップオブジェクトをサーバコンピュータシステムからターミナルサーバ接続を介して受け取るクライアントコンポーネントの処理と、
ドラッグアンドドロップオブジェクトをローカルコンピュータに送付するクライアントコンポーネントの処理を含め、ドラッグアンドドロップオブジェクトの受領に応答してリモートアプリケーションの代わりにサーバコンポーネントが代理ドロップソースとして作用することと
を含むことを特徴とする方法。
【請求項１４】
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の内側から外側に移動されたことを検出するクライアントコンポーネントの処理は、デスクトップカーソルウインドウがリモートアプリケーションのためのアプリケーションからローカルアプリケーションのためのローカルアプリケーションウインドウに移動したことを検出する処理を含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
代理オブジェクトを作成してドラッグアンドドロップオブジェクトが公示するフォーマットを模倣する処理を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１６】
クライアントコンポーネントを代理ドロップソースとして構成し、クライアントコンポーネントがドラッグアンドドロップオブジェクトをクライアントコンポーネントに対して提供することができるように構成する処理を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１７】
リモートアプリケーションのためのアプリケーションウインドウの内側からドラッグアンドドロップオブジェクト選択するユーザ入力を受け取る処理であって、アプリケーションウインドウはリモートアプリケーションのためのユーザインタフェースを表す処理と、
デスクトップウインドウカーソルを変更して、ドラッグアンドドロップオブジェクトが選択されたことを視覚的に表すこと、
を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１８】
コンピュータシステムにおいて、該コンピュータシステムは該コンピュータシステムにおいて稼働する１または２以上のリモートアプリケーションとサーバコンポーネントとを含み、該サーバコンポーネントはクライアントコンピュータシステムにあるクライアントコンポーネントとのターミナルサーバセッションに参加し、前記コンピュータシステムおいて稼働する１または２以上のリモートルアプリケーションは、ターミナルサーバセッションを介してクライアントコンピュータシステムにより遠隔的にアクセスされるよう構成され、ドラッグアンドドロップを用いてオブジェクトをリモートアプリケーションからクライアントコンピュータシステムにあるモジュールに転送する方法であって、該方法は、
メッセージをクライアントコンポーネントからターミナルサーバセッションを介してサーバコンポーネントが受け取る処理であって、該メッセージは、デスクトップウインドウカーソルがクライアントコンピュータシステムにおいてリモートアプリケーションと対応するアプリケーションウインドウの境界の内側から外側に移動したことをサーバコンポーネントに通知するメッセージである、サーバコンポーネントが受け取る処理と、
デスクトップウインドウカーソルの動きが未処理のドラッグアンドドロップ操作に連結することをサーバコンポーネントが判断する処理と、
ドラッグアンドドロップオブジェクトに関する要求をサーバコンポーネントがクライアントコンポーネントから受け取る処理であって、該要求はクライアントコンピュータシステムにあるアプリケーションからのドラッグアンドドロップオブジェクトに関するクエリーに応じて、ターミナルサーバセッションの上で送付され、該の要求はサーバサーバコンポーネントに対しクライアントコンポーネントにあるアプリケーションがリモートアプリケーションからのドラッグアンドドロップオブジェクト（３２６）を要求していることを通知する、受け取る処理と、
ドラッグアンドドロップオブジェクトに関する要求の受領に応答して、コンピュータシステムにおいてアプリケーションの代わりにサーバコンポーネントが代理ドロップターゲットとして作用することであって、
ドラッグアンドドロップオブジェクトに関する要求をリモートアプリケーションに送付する処理と、
ドラッグアンドドロップオブジェクトに関する要求に応じて送付されるリモートアプリケーションからのドラッグアンドドロップオブジェクトを受け取る処理とを含む、サーバコンポーネントが代理ドロップターゲットとして作用することと、
ターミナルサーバセッションを介してクライアントコンピュータシステムに対し、クライアントコンピュータシステムにあるアプリケーションに対する引き渡しのためにドラッグアンドドロップオブジェクトをサーバコンポーネントが送付する処理と
を含むことを特徴とする方法。
【請求項１９】
サーバコンポーネントを代理ドロップターゲットとして構成して、サーバコンポーネントがドラッグアンドドロップオブジェクトをリモートアプリケーションから受け取ることができるようにする処理を更に含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
ドラッグアンドドロップオブジェクトをクライアントコンピュータシステムに対しターミナルサーバセッションを介して送付するサーバコンポーネントの処理は、ドラッグアンドドロップオブジェクトをリモートデスクトッププロトコルセッションの仮想チャンネルを介してサーバコンポーネントが送付する処理を含むことを特徴とする請求項１８に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータシステム及び関連技術は、社会の多くの面に影響を与える。実際に、コンピュータの情報処理能力は、我々の生活及び仕事の方法を一変させた。コンピュータシステムは今や一般に、コンピュータシステム出現以前には人の手で遂行した各種の仕事（例えば、文書処理、日程計画、及びデータベース管理）を遂行する。一般的には、これら各種の仕事を遂行するため、コンピュータシステムは対応する多数のアプリケーションを含む。例えば、文書処理を実行するために、コンピュータシステムは文書処理アプリケーションを含むことができるし、計算表を扱うのにコンピュータシステムは表計算アプリケーションを含むことができる。
【０００２】
スタンドアロン型計算環境において、コンピュータシステムにおいてある異なるタスクを遂行するアプリケーションの間でオブジェクトを移動することができることはしばしば有用である。例えば、文書処理アプリケーションで作成した文章の一部を、画像又は図面に関する説明文としてプレゼンテーションプログラムの中に移動することは有用であろう。アプリケーションの間のオブジェクトの移動を可能にするため、コンピュータシステムによっては、コンピュータシステムにあるアプリケーションが共通の方法で通信することのできるメモリの一部（例えば、クリップボード）を含む。こうして、一つのアプリケーションがメモリの一部と連動してオブジェクトを記憶すると、次に別のアプリケーションがメモリのその一部と連動してそのオブジェクトを取り出す。こうしてアプリケーションは（直接には矛盾なくオブジェクトを交換することのできないものであっても）メモリの一部を通じてオブジェクトを交換することができる。
【０００３】
多くのスタンドアロン型計算環境は、目視の手掛かりと組み合わせた入力装置を用いて対応するアプリケーションの間でオブジェクトを直接転送するさらに便利な能力を含む。アプリケーションの間の直接転送に関する一つの一般的機構は「ドラッグアンドドロップ」である。ドラッグアンドドロップを容易にするため、ユーザはアプリケーションの中で一つのオブジェクト（例えば、文書、画像又はスプレッドシートセルの一部）を特定する。例えば、ユーザは、マウスを用いて文章の一部を強調する。目視の手掛かり、例えば、背景照明は、その文章を選択したことをユーザに示すのに使用することができる。
【０００４】
ユーザは入力装置を操作して特定オブジェクトを選択する。例えば、ユーザはマウスを操作して特定の文章の上にマウスを移動し、マウスの左ボタンを押すことができる。次いで、ユーザは更に入力装置を操作して、そのオブジェクトを別のアプリケーションへと移動する。例えば、マウス左ボタンを押したまま、ユーザはマウスを操作してカーソルを別のアプリケーションの上に移動（ドラッグ）することができる。別のアプリケーションの上に来たら、ユーザは左ボタンを解放することができる。マウスボタンを解放する動作によりオブジェクトが別のアプリケーションに移動（又はその中にドロップ）させられる。
【０００５】
別の環境においては、コンピュータシステムを互いに、及び別の電子装置に結合して、有線及び無線双方のコンピュータネットワークを形成する。このコンピュータネットワークを介してコンピュータ及び別の電子装置は電子データを転送することができるその結果、コンピュータシステムの上で遂行される多数の仕事（例えば、音声通信、電子メールの利用、家庭電化製品の制御、ウェブ走査検索、及び文書印刷）は、多数のコンピュータシステム及び／又は別の電子装置の間の有線及び／又は無線コンピュータネットワークを介した通信（例えば、電子メッセージの交換）を含む。
【０００６】
一部のアプリケーションはローカルで稼働し、別のアプリケーションは、例えば、ターミナルサーバにおいて、リモートで稼働するネットワーク環境においては、異なるタスクを遂行するアプリケーションの間でオブジェクトを移動することができれば有用であることが多い。ターミナルサーバは、クライアントコンピュータシステムがリモートで実行することのできるアプリケーションを保持するコンピュータシステムである。入力は、クライアントコンピュータシステムで入力され（例えば、リモートデスクトッププロトコル（「ＲＤＰ」）のようなプロトコルのＩＴＵ  Ｔ．１２０群準拠のプロトコルを使用するネットワークの上でターミナルサーバにあるアプリケーションに転送する。このアプリケーションは、この入力をあたかもその入力がターミナルサーバにおいて入力されたように処理する。このアプリケーションは、受け取る入力に応答して出力を生成し、その出力をネットワーク（これもＴ．１２０準拠のプロトコルなど）の上でクライアントコンピュータシステムに転送する。クライアントコンピュータシステムはその出力データを表示する。こうして、処理は実際にはターミナルサーバで生じるが、クライアントコンピュータシステムにおいて入力を受領し出力を表示する。
【０００７】
ローカルアプリケーションとリモートアプリケーションとの間でオブジェクトの移動を可能にするため、一部のネットワークコンピュータシステムは、スタンドアロン型環境において使用するのと同様のクリップボード機能を含む。メモリの一部（即ちクリップボード）を割り当てて、コンピュータシステムにあるアプリケーションが共通の方法で連動することができる。このようにして、ローカルアプリケーションはメモリの一部と連動してオブジェクトを記憶し、次いで、リモートアプリケーションがメモリの一部と連動してそのオブジェクトを受け取る、又は逆も同様である。こうして、アプリケーションは（異なるコンピュータシステム上で稼働するものであっても）メモリの一部を通じてオブジェクトを交換することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、多くのネットワークコンピュータシステムはローカルアプリケーションとリモートアプリケーションとの間及び逆の間でオブジェクトをドラッグアンドドロップする能力に欠ける。即ち、クライアントとサーバのターミナルサーバコンポーネントは、一般的には、ターミナルサーバセッションを介してドラッグアンドドロップオブジェクトを転送し、ドロップソース又はドロップターゲットと会話してドラッグアンドドロップを容易にする構成とはなっていない。例えば、サーバコンポーネントは一般的には、（クライアントシステムにある）リモートデスクトップウインドウの外のマウスカーソルの移動がドラッグアンドドロップ操作に連結しているか、又はユーザが別の理由でマウスを動かしているかを判定する方法がない。
【課題を解決するための手段】
【０００９】
本発明は、ローカルモジュールとリモートモジュールとの間でオブジェクトをドラッグアンドドロップするための方法、システム及びコンピュータプログラム製品に適用される。いくらかの実施形態において、オブジェクトをローカルアプリケーションからリモートアプリケーションにドラッグアンドドロップする。クライアントコンポーネントは、デスクトップウインドウカーソルがリモートアプリケーションに関するウインドウの外側から内側に移動したことを検出する。そのクライアントコンポーネントは、未処理のドラッグアンドドロップ操作を示すドロップ通知を受け取る。このドロップ通知は、ドラッグアンドドロップオブジェクトをリモートアプリケーションに転送する旨を通知する。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトをデスクトップウインドウカーソルの座標位置とともに転送する要求を、ターミナルサーバセッションを介してサーバコンピュータシステムに送付する。
【００１０】
サーバコンポーネントはこの要求を受領し、ドラッグアンドドロップオブジェクトを転送する通知をリモートアプリケーションに送付する。サーバコンポーネントは、このドラッグアンドドロップオブジェクトを転送する要求の受領に応じて、ドラッグアンドドロップオブジェクトに関する要求をリモートアプリケーションから受け取ることを含め、ローカルアプリケーションの代わりに代理ドロップソースとして作用する。サーバコンポーネントは、オブジェクトをドラッグアンドドロップする要求を、ターミナルサーバセッションを介してクライアントコンポーネントに送付する。
【００１１】
クライアントコンポーネントは、サーバコンピュータシステムからターミナルサーバセッションを介してドラッグアンドドロップオブジェクトに関する要求を受け取る。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトに関する要求をローカルアプリケーションに転送することと、ローカルアプリケーションからドラッグアンドドロップオブジェクトを受け取ることを含めて、リモートアプリケーションの代わりに代理ドロップターゲットとして作用する。クライアントコンポーネントは、ターミナルサーバセッションを介してドラッグアンドドロップオブジェクトをサーバコンピュータシステムに送付する。
【００１２】
サーバコンポーネントはドラッグアンドドロップオブジェクトをクライアントコンポーネントからターミナルサーバセッションを介して受け取る。サーバコンポーネントは、ドラッグアンドドロップオブジェクトをリモートアプリケーションに送付することを含め、ローカルアプリケーションの代わりに代理ドロップソースとして作用する。
【００１３】
別の実施形態においては、オブジェクトをリモートコンピュータからローカルコンピュータに対しドラッグアンドドロップする。クライアントコンポーネントは、デスクトップウインドウカーソルがリモートアプリケーションの境界の内側から外側に移動したことを検出する。クライアントコンポーネントは、ターミナルサーバセッションを介してメッセージをサーバコンポーネントに送付する。このメッセージは、サーバコンポーネントに対し、デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の内側から外側に移動した旨を知らせる。
【００１４】
サーバコンポーネントは、クライアントコンポーネントからのメッセージを、ターミナルサーバセッションを介して受け取る。サーバコンポーネントは、デスクトップウインドウカーソルの移動が未処理のドラッグアンドドロップ操作と連結していることを検出する。
【００１５】
クライアントコンポーネントは、ローカルアプリケーションからドラッグアンドドロップオブジェクトに関するクエリーを受け取ることを含め、リモートアプリケーションの代わりに代理ドロップソースとして作用する。このクエリーは、ローカルアプリケーションにおいてはドロップ通知の表示であって、ローカルアプリケーションに対しドラッグアンドドロップオブジェクトを転送することを表す。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトに関する要求を、ターミナルサーバセッションを介してサーバコンポーネントに送付する。
【００１６】
サーバコンポーネントは、その要求を受け取る。サーバコンポーネントは、リモートアプリケーションに対しドラッグアンドドロップオブジェクトに関する要求を送付すること、及びリモートアプリケーションからドラッグアンドドロップオブジェクトを受け取ることを含め、ローカルアプリケーションの代わりに代理ドロップターゲットとして作用する。サーバコンポーネントは、ターミナルサーバセッションを介してドラッグアンドドロップオブジェクトをクライアントコンピュータシステムに送付する。
【００１７】
クライアントコンポーネントは、ドラッグアンドドロップオブジェクトを受け取る。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトをローカルアプリケーションに対して送付することを含め、リモートアプリケーションの代わりに代理ドロップソースとして作用する。
【００１８】
要約を作成して、詳細な説明の中で下記において更に記述する考え方の要点を簡略に紹介する。本要約は、請求項に記載された主題事項の重要な特徴又は不可欠な特徴を特定することも、請求項に記載された主題事項の範囲を判定する補助として使用することも目的とはしていない。
【００１９】
追加の特徴及び利点は、以下の記述において説明するが、一部は記述から明白であるか、又はこの中の教訓の実践により習得されるであろう。本発明の特徴及び利点は、付属請求項において特別に指摘する指示及び組み合わせを用いて実現し獲得される。本発明の特徴は、以下の記述及び付属請求項からさらに完全に明らかになるか、若しくは以下に述べる本発明の実践により習得されるであろう。
【発明を実施するための最良の形態】
【００２０】
上に列挙したこと及び別の利点及び特徴を取得することのできる方法で記述するため、上に簡単に記述した内容の更に詳細な記述を、付属図面に示す具体的実施形態を参照して示す。これらの図面は、典型的な実施形態を記述するのみであって、範囲を限定するものと見なすべきではない。実施形態を、付加的な特異性及び詳細と共に、付属図面を用いて記述し説明する。
【００２１】
本発明は、ローカルモジュールとリモートモジュールとの間でオブジェクトをドラッグアンドドロップするための方法、システム及びコンピュータプログラム製品に適用する。実施形態によっては、オブジェクトをローカルアプリケーションからリモートアプリケーションにドラッグアンドドロップする。クライアントコンポーネントは、デスクトップウインドウカーソルがリモートアプリケーションのためのウインドウの外側から内側に移動したことを検出する。クライアントコンポーネントは、未処理のドラッグアンドドロップ操作を示すドロップ通知を受け取る。このドロップ通知は、ドラッグアンドドロップオブジェクトをリモートアプリケーションに対して転送する旨を通知する。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトを転送する要求を、デスクトップウインドウカーソルの座標位置とともに、ターミナルサーバセッションを介してサーバコンピュータシステムに送付する。
【００２２】
サーバコンポーネントはこの要求を受け取り、ドラッグアンドドロップオブジェクトを転送する通知をリモートアプリケーションに回送する。サーバコンポーネントは、ドラッグアンドドロップオブジェクトを転送する要求を受け取ると、リモートアプリケーションからドラッグアンドドロップオブジェクトに関する要求を受け取ることを含め、ローカルアプリケーションの代わりに代理ドロップソースとして作用する。サーバコンポーネントは、ドラッグアンドドロップオブジェクトに関する要求を、ターミナルサーバセッションを介してクライアントコンポーネントに送付する。
【００２３】
クライアントコンポーネントは、ドラッグアンドドロップオブジェクトに関する要求をサーバコンピュータシステムからターミナルサーバセッションを介して受け取る。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトに関する要求をローカルアプリケーションに送付すること、及びローカルアプリケーションからドラッグアンドドロップオブジェクトを受け取ることを含め、リモートアプリケーションの代わりに、代理ドロップターゲットとして作用する。クライアントコンポーネントは、ターミナルサーバセッションを介してドラッグアンドドロップオブジェクトをサーバコンピュータシステムに送付する。
【００２４】
サーバコンポーネントはドラッグアンドドロップオブジェクトをクライアントコンポーネントからターミナルサーバセッションを介して受け取る。サーバコンポーネントは、リモートアプリケーションにドラッグアンドドロップオブジェクトを送付することを含め、ローカルアプリケーションの代わりに代理ドロップソースとして作用する。
【００２５】
別の実施形態において、オブジェクトをリモートコンピュータからローカルコンピュータにドラッグアンドドロップする。クライアントコンポーネントは、デスクトップウインドウカーソルがリモートアプリケーションの境界の内側から外側に移動したことを検出する。クライアントコンポーネントは、ターミナルサーバセッションを介してメッセージをサーバコンポーネントに送付する。このメッセージは、サーバコンポーネントに対し、デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の内側から外側に移動した旨を知らせる。
【００２６】
サーバコンポーネントは、ターミナルサーバセッションを介してクライアントコンポーネントからのメッセージを受け取る。サーバコンポーネントは、デスクトップウインドウカーソルの移動は未処理のドラッグアンドドロップ操作と連結していることを検出する。
【００２７】
クライアントコンポーネントは、ローカルアプリケーションからドラッグアンドドロップオブジェクトに関するクエリーを受け取ることを含め、リモートアプリケーションの代わりに代理ドロップソースとして作用する。このクエリーは、ローカルアプリケーションにおいてはドロップ通知の表示であって、ローカルアプリケーションに対しドラッグアンドドロップオブジェクトを転送することを表す。クライアントコンポーネントは、ターミナルサーバセッションを介して、オブジェクトをドラッグアンドドロップする要求をサーバコンポーネントに送付する。
【００２８】
サーバコンポーネントは、その要求を受け取る。サーバコンポーネントは、リモートアプリケーションに対しドラッグアンドドロップオブジェクトに関する要求を送付すること、及びリモートアプリケーションからドラッグアンドドロップオブジェクトを受け取ることを含め、ローカルアプリケーションの代わりに代理ドロップターゲットとして作用する。サーバコンポーネントは、ドラッグアンドドロップオブジェクトを、ターミナルサーバセッションを介してクライアントコンピュータシステムに送付する。
【００２９】
クライアントコンポーネントは、ドラッグアンドドロップオブジェクトを受け取る。クライアントコンポーネントは、ドラッグアンドドロップオブジェクトをローカルアプリケーションに送付することを含め、リモートアプリケーションの代わりに代理ドロップソースとして作用する。
【００３０】
本発明の実施形態は、以下に詳細を説明するように、コンピュータハードウェアを含めて特殊目的又は多目的コンピュータを含む。本発明の範囲内の実施形態には、その中に記憶するコンピュータ実行可能命令又はデータ構造体を担い又は有するためのコンピュータ読取可能媒体をも含む。このようなコンピュータ読取可能媒体は、多目的又は特殊目的コンピュータがアクセスすることのできる任意の利用可能な媒体であり得る。限定ではなく一例として、コンピュータ読取可能媒体は、コンピュータ実行可能命令の形態の所望のプログラムコード手段又はデータ構造体を記憶するのに使用することができて、多目的又は特殊目的コンピュータがアクセスすることができるＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、又は別の光ディスク記憶装置、磁気ディスク記憶装置、又は任意の別の記憶装置のような、コンピュータ読取可能記憶媒体を含むことができる。
【００３１】
本記述及び以下の請求項において、「ネットワーク」とは、コンピュータシステム及び／又はモジュールの間で電子データの転送を可能にする一つ以上のデータリンクと定義される。ネットワーク又は別の通信接続（有線、無線、若しくは有線又は無線の組み合わせの何れか）の上で情報をコンピュータに転送又は提供するとき、コンピュータはその接続をコンピュータ読取可能媒体とみなす。したがって、限定ではなく一例として、コンピュータ読取可能媒体は、多目的又は特殊目的コンピュータがアクセスすることのできるネットワーク又はデータリンクを含むことができる。
【００３２】
コンピュータ実行可能命令は、例えば多目的コンピュータ、特殊目的コンピュータ、又は特殊目的処理装置に、一定の機能又は機能のグループを実行させる命令及びデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語のような中間フォーマットであってもよく、又はソースコードでさえあってもよい。内容は、構造的特徴及び／又は方法論的な行動に固有の言語で記述してはいないけれども、付属請求項に定義する内容は必ずしも記述する特徴又は上述の行為に限定されないと了解すべきである。寧ろ、記述する特徴及び処理は、請求項の実施に関する見本の形として開示する。
【００３３】
当業者は、本発明が、個人用コンピュータ、デスクトップコンピュータ、ラップトップ型コンピュータ、携帯端末、多重プロセッサシステム、マイクロプロセッサベース又はプログラム可能の家電製品、ネットワークＰＣ，ミニコンピュータ、大型コンピュータ、携帯情報端末、ポケットベル、及び類似のものを含む多数の形式のコンピュータシステムを有するネットワーク計算環境において実用されることを理解するであろう。本発明は、（有線データリンク、無線データリンク、又は有線データリンクと無線データリンクの組み合わせの何れかを用いる）ネットワークを通じて連結されたローカルコンピュータシステムとリモートコンピュータシステムの双方がタスクを実行する分散型システム環境においても実用される。分散型システム環境においては、プログラムモジュールをローカルとリモート双方のメモリ記憶装置の中に置いてもよい。
【００３４】
本記述及び以下の請求項において、「ドロップターゲット」とは、ドラッグアンドドロップ操作の対象であるオブジェクトを受け取るべきモジュールと定義する。
【００３５】
本記述及び以下の請求項において、「ドロップソース」とは、ドラッグアンドドロップ操作の対象であるオブジェクトの起源となるべきモジュールと定義する。
【００３６】
本記述及び以下の請求項において、「代理ドロップターゲット」とは、ドロップソースと同一のセッションに関連し、ドロップソースとドロップターゲットとの間で仲介的に作用するモジュールと定義する。代理ドロップターゲットは、実際のドロップターゲット機能をシミュレートして、ターミナルサーバセッションを介したドラッグアンドドロップ操作を容易にすることができる。いくつかの実施形態において、代理ドロップターゲットは、ドロップターゲット機能をシミュレートしてターミナルサーバセッションの管理に参加するターミナルサーバセッションコンポーネントである。
【００３７】
本記述及び以下の請求項において、「代理ドロップソース」とは、ドロップソースと同一のセッションに関連し、ドロップソースとドロップターゲットとの間で仲介的に作用するモジュールと定義する。代理ドロップソースは、実際のドロップソース機能をシミュレートして、ターミナルサーバセッションの上のドラッグアンドドロップ操作を容易にすることができる。いくつかの実施形態において、代理ドロップソースは、ドロップソース機能をシミュレートしてターミナルサーバセッションの管理に参加するターミナルサーバセッションコンポーネントである。
【００３８】
本記述及び以下の請求項において、ネットワーク通信を経由して交換しドラッグアンドドロップ操作を容易にするメッセージは、一般的に以下のように定義する：
ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージ：代理ドロップターゲットから代理ドロップソースへのドラッグアンドドロップモーダルループを始動することを示す表示。このメッセージには、提供できるフォーマットデータの名称及びＩＤを含むことができる。
ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージ：代理ドロップソースからのドラッグアンドドロップモーダルループをドロップターゲットのために開始したことを示す表示。
ＵＰＤＡＴＥ＿ＤＲＯＰ＿ＥＦＦＥＣＴメッセージ：ドロップターゲットに関する更新ドロップ効果、即ち、ドロップターゲットがデータを用いて行いたいことを示す。
ＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージ：代理ドロップターゲットから代理ドロップソースへのドラッグアンドドロップ操作を停止することを示す表示。
ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージ：代理ドロップターゲットから代理ドロップソースへのドロップ操作を始動する表示。ドロップメッセージ：ネットワーク通信を経由して送付されたＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージの表示は、オブジェクトのリンクと埋め込み（ＯＬＥ）を経由してドロップターゲットに送付することができる。ドロップメッセージに応答して、ドロップターゲットは代理データオブジェクトを要求しＧｅｔＤａｔａ方法を呼び出すことができる。
ＤＯ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージ：ドラッグアンドドロップ操作が完了したことを知らせる代理ドロップソースからの表示（例えば、ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージに応答して送付する）。
ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージ：ドロップターゲットがデータを要求するとき、代理データオブジェクトが代理ドロップターゲットに送付する。
ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージ：代理ドロップソースが代理データオブジェクトに送付するものであり、要求される任意のデータを含む。
【００３９】
その他のメッセージもネットワークを経由して交換し、ドラッグアンドドロップ操作を容易にすることができる。
【００４０】
図１Ａは、オブジェクトをローカルモジュールからリモートモジュールにドラッグアンドドロップするのを容易にする例示的コンピュータアーキテクチャ１００、コンピュータシステム１０１（即ち、クライアント）及びコンピュータシステム１１１（即ちサーバ）を示す。コンピュータシステム１０１及び１１１は、例えば、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）のようなネットワーク、又はインターネットにさえも接続することができる。したがって、コンピュータシステム１０１及び１１１にある各種のコンポーネントは、ネットワークに接続する別のコンポーネントと同様に、互いにデータを送受信することができる。したがって、コンポーネントは、データ関連のメッセージを作成し、データ関連のメッセージをネットワーク（例えば、インターネットプロトコル（ＩＰ）データグラム及び伝送制御プロトコル（ＴＣＰ）、リモートデスクトッププロトコル（ＲＤＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、単純メール転送プロトコル（ＳＭＴＰ）、独立コンピューティング・アーキテクチャ（ＩＣＡ）など）の上で交換することができる。
【００４１】
描写するようにコンピュータシステム１０１はアプリケーション１０２、クライアントモジュール１０６、及びユーザインタフェース１０４を含み、コンピュータシステム１１１はアプリケーション１１２とサーバモジュール１１６を含む。コンピュータシステム１０１とコンピュータシステム１１１とは、ネットワークの上に開設するターミナルサーバセッション１３１（例えばＲＤＰセッション）を経由して互いに連絡する。クライアントコンポーネント１０６とサーバコンポーネント１１６は、同時に使用してターミナルサーバセッション１３１の管理を容易にすることができる。例えば、ユーザインタフェース１０４において受け取るユーザ入力をコンピュータシステム１０１からコンピュータシステム１１１に送付すること、ユーザ入力をコンピュータシステム１１１にある適切なリモートアプリケーションに転送すること、コンピュータシステム１１１にあるリモートアプリケーションからの出力を受け取ること、そのリモートアプリケーション出力をコンピュータシステム１１１からコンピュータシステム１０１に転送すること、及びリモートアプリケーション出力をユーザインタフェース１０４に出力することである。このようにして、（ユーザインタフェース１０４から）リモートアプリケーションに関しては、コンピュータシステム１０１において入力を受け付けし出力を提示する一方で、処理は実際のところコンピュータシステム１１１において生起する。
【００４２】
仮想チャンネルを使用して、ターミナルサーバセッションの機能を（例えば、ＲＤＰプロトコルを拡張することにより）拡張し、アプリケーションがアプリケーション固有のデータをターミナルサーバセッション（例えば、ＲＤＰ接続）上で転送することができるようにする。こうして、入出力データに加えて、別の型のデータを仮想チャンネルの上で交換することができる。例えば、仮想チャンネル１２１は、ドラッグアンドドロップオブジェクトをコンピュータシステム１０１からコンピュータシステム１１１に転送する構成のチャンネルとすることができる。仮想チャンネル１２１は、クライアントコンポーネント１０６にあるドラッグアンドドロップスレッドをクライアントコンポーネント１１６にあるドラッグアンドドロップスレッドに接続、及び逆の接続をすることができる。したがって、クライアントコンポーネント１０６とサーバコンポーネント１１６とは同時に使用して、仮想チャンネル１２１の上で、コンピュータシステム１０１及びコンピュータシステム１１１にある然るべきアプリケーションの間でデータをドラッグアンドドロップすることができる。
【００４３】
図１Ｂは、ローカルモジュールからリモートモジュールに対するドラッグアンドドロップ操作を描写する例示的デスクトップウインドウ１２３を示す。描写するように、デスクトップウインドウ１２３は、ユーザインタフェース１０４の一部であってアプリケーションウインドウ１０２Ｗ及びリモートデスクトップ１１３を含む。アプリケーションウインドウ１０２Ｗはアプリケーション１０２と対応するので、アプリケーションに１０２のためのユーザ入力を受領し、アプリケーションに１０２からの出力をユーザに提示する構成となっている。リモートデスクトップ１１３は、コンピュータシステム１１１から遠隔の任意のアプリケーションのためのアプリケーションウインドウを含む。例えば、アプリケーションウインドウ１１２Ｗはアプリケーション１１２と対応するので、アプリケーションに１１２のためのユーザ入力を受領しアプリケーションに１１２からの出力をユーザに対して提示する構成となっている。
【００４４】
図２Ａ〜２Ｃは、ローカルモジュールからリモートモジュールに対しオブジェクトをドラッグアンドドロップするための例示的方法２００の流れ図を示す。方法２００を、コンピュータアーキテクチャ１００の中のコンポーネント及びデータに関して記述する。
【００４５】
方法２００は、ドラッグアンドドロップオブジェクトをローカルアプリケーションウインドウから選択する処理を含む（処理２０１）。例えば、コンピュータシステム１０１のユーザは、オブジェクト１２６をアプリケーションウインドウ１０２Ｗの内側から選択することができる。オブジェクト１２６は、例えば、テキスト、グラフィック、又は音声データの一部、スプレッドシートのセル、データベース項目、電子メッセージ、などのようなコンピュータシステムにある事実上選択可能な任意のオブジェクトである。
【００４６】
方法２００は、デスクトップウインドウカーソルを変更して、ドラッグアンドドロップオブジェクトを選択したことを視覚的に表す処理を含む（処理２０２）。例えば、オブジェクト１２６を選択した後、カーソル１３３を変更して、ドロップ効果標識１３４を含ませることができる。ドロップ効果には、移動、コピー、リンク、宛先ハイパーリンクの作成、及び選択オブジェクトへのショートカットの作成の何れをも含むことができる。カーソル１３３は、異なる方法で変更又は補完して異なるドロップ効果を表示することができる。例えば、ドロップ効果標識１３４を表示して、そのドロップ効果がコピーであることを示すことができる。
【００４７】
ドロップ効果は、アプリケーションに対し利用可能なドロップ効果の中から選択することができる。カーソル１３３がデスクトップウインドウ１２３の異なるウインドウ間で移行するにつれ、表示されるドロップ効果標識を変更することができる。例えば、カーソル１３３がアプリケーションウインドウ１０２Ｗの境界の内側にあるときは、アプリケーション１０２（例えば、コピー）の規定値ドロップ効果を表示することができる。カーソル１３３がアプリケーションウインドウの境界の外側にあるときは、デスクトップウインドウ１２３（例えば、オペレーティングシステム）のための規定値ドロップ効果を表示することができる。例えば、デスクトップウインドウ１２３では、ドラッグアンドドロップ機能を全くサポートしないことがあるので、カーソル１３３は、ユーザインタフェース１０４のこの領域にあるとき「不可」記号に変形する。アプリケーションウインドウ１１２Ｗに入ると、アプリケーション１１２のための（例えば、コピーの）規定値ドロップ効果を表示することができる。
【００４８】
方法２００は、デスクトップウインドウカーソルが、リモートアプリケーションのためのアプリケーションウインドウの境界の外側から内側に移動したことを検知するクライアントコンポーネントの処理を含む（処理２０３）。例えば、クライアントコンポーネント１０６は、カーソル１３３がアプリケーションウインドウ１１２Ｗの境界の外側から内側に移動したことを検知することができる。（図１Ｂの点線は、アプリケーションウインドウ１０２Ｗから、デスクトップウインドウ１２３及びリモートデスクトップ１１３を通って、アプリケーションウインドウ１１２Ｗに到るカーソル１３３の経路を示す。）
【００４９】
処理２０１、２０２、及び２０３は、ローカルアプリケーションからリモートアプリケーションに対してオブジェクトを転送するドラッグアンドドロップ操作の設定に含めることができる。カーソル１３４がアプリケーションウインドウ１１２Ｗの上にあるとき、クライアントコンポーネント１０６はＤｒａｇＥｎｔｅｒ方法を呼び出すことができる。ＤｒａｇＥｎｔｅｒ方法を通じて、クライアントコンポーネント１０６（ドロップターゲット代理として作用している）は、元のアプリケーション１０２に対しそれがオブジェクト１２６を受け入れることができるか否かを表示することができる。ＤｒａｇＥｎｔｅｒ方法のパラメータは以下のフォーマットとすることができる。
ＨＲＥＳＵＬＴ  ＤｒａｇＥｎｔｅｒ（
ＩＤａｔａＯｂｊｅｃｔ＊      ｐＤａｔａＯｂｊｅｃｔ，  
／／ソースデータ・オジェクト（例えば、オブジェクト１２６）
ＤＷＯＲＤ          ｄｗＫｅｙＳｔａｔｅ
／／キーボードとマウスの状態
ＰＯＩＮＴＬ        ｐｔ，
／／  カーソル位置
ＤＷＡＲＤ＊        ｐｄｗＤｒｏｐＥｆｆｅｃｔ
／／  結果のドロップ効果
）
【００５０】
ＤｒａｇＥｎｔｅｒ方法を通じて、目標（又は代理目標）は、ｐｄｗＤｒｏｐＥｆｆｅｃｔパラメータを更新することによりそれが見込まれるドロップを受け入れることができるか否かを表示することができる。このパラメータは、当初にソースが容認するドロップ効果一式を含むことができる。結果のドロップ効果は、一部はデータオブジェクトが供給するフォーマットに基づくので現在のキーボードとマウスの状態によっても影響も受け、またマウス位置の影響を受ける可能性もある。
【００５１】
続いて、クライアントコンポーネント１０６は、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージを、仮想チャンネル１２１（例えば、クリップボード仮想チャンネル）を介してサーバコンポーネント１１６に送付することができる。ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージは、オブジェクト１２６の内容及びアプリケーション１０２の許容ドロップ効果を記述するフォーマット名を含むことができる。このメッセージを送付した後、コンピュータシステム１０１にある入力ハンドラはドラッグアンドドロップ操作を開始したとの通知を（例えば、オペレーティングシステム・イベントを通じて）受け取る。このイベントに応答して、入力ハンドラはキーボード接続および入力同期を無効にすることができる。ドロップ開始の前に、フォーマットデータに関する要求を満足することができることを確認するため、オブジェクト１２６を記憶することができる。
【００５２】
サーバコンポーネントにおいてＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージを受け取るとき、オブジェクト１２６の内容及びアプリケーション１０２の許容ドロップ効果を記述するフォーマット名を抽出する。それに応じて、代理データオブジェクト１３６を作成し、サーバコンポーネント１１６のためのウインドウを作成する。このウインドウは透明（又は隠し）とすることができるので、極めて小さいサイズ（例えば、１×１ピクセルサイズ）とすることができる。ウインドウはピントを合わせてＺオーダの最高部に上げることができる。こうして、入力をウインドウに導いて（クリップして）入力をサーバコンポーネント１１６に導くことができる。したがって、デスクトップウインドウ１２３を大幅に変更することなく入力をサーバコンポーネント１１６に導くことができる。例えば、１×１透明ウインドウはユーザが感知することができない可能性がある。
【００５３】
受け取ったマウスダウンイベントに応答して、サーバコンポーネント１１６（代理ドロップソース）はＤｏＤｒａｇＤｒｏｐ方法を呼び出す。ＤｏＤｒａｇＤｒｏｐ方法のパラメータは、以下のフォーマットとすることができる。
ＨＲＥＳＵＬＴ    ＤｏＤｒａｇＤｒｏｐ（
ＩＤａｔａＯｂｊｅｃｔ＊    ｐＤａｔａＯｂｊｅｃｔ，
／／ソースデータ・オブジェクト
ＩＤｒｏｐＳｏｕｒｃｅ＊    ｐＤｒｏｐＳｏｕｒｃｅ，
／／ドロップソースインタフェース
ＤＷＯＲＤ          ｄｗＡｌｌｏｗｅｄＤｒｏｐＥｆｆｅｃｔｓ，
／／許容ドロップ効果
ＤＷＯＲＤ＊        ｄｗＦｉｎａｌＤｒｏｐＥｆｆｅｃｔｓ，
／／最終ドロップ効果
）
【００５４】
ＤｏＤｒａｇＤｒｏｐ方法は、ドラッグアンドドロップ操作を容易にするため使用するモーダルループの中に含めることができる。一般的に、ドラッグアンドドロップ操作を開始するため、コンポーネントは適切なパラメータを有するＤｏＤｒａｇＤｒｏｐを呼び出す。ＤｏＤｒａｇＤｒｏｐは、ＳｅｔＣａｐｔｕｒｅ  ＡＰＩを用いてマウスを捕捉し、その後、ループに入る。
【００５５】
入力をサーバコンポーネント１１６に転送するため、入力ハンドラは、マウスダウンイベントをクライアントコンポーネント１０６に対し送付し、マウスはサーバコンポーネント１１６のための（小さくて透明な可能性のある）ウインドウにクリップされているので、マウスダウンイベントはサーバコンポーネント１１６の入力待ち行列に送付されることで終了する。マウスダウンイベントの受領を使用して、Ｏｂｊｅｃｔ  Ｌｉｎｋｉｎｇ  ａｎｄ  Ｅｍｂｅｄｄｉｎｇ（ＯＬＥ）隠しウインドウを構成し、システム全体のマウスイベントメッセージを受け取ることができる。ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥの受け取りはブーレアンフラグの切り換えを起動する。これは、クライアントコンポーネント１０６にある方法を実行の前にチェックする。これは、サーバコンポーネント１１６が作動中のときメッセージを送付する可能性を増加する。
【００５６】
カーソル１３３をアプリケーションウインドウ１１２Ｗの上でドラッグしているとき、ＤｒａｇＯｖｅｒ方法を呼び出す。ＤｏＤｒａｇＤｒｏｐ方法のパラメータは、以下のフォーマットとすることができる。
ＨＲＥＳＵＬＴ    ＤｒａｇＯｖｅｒ（
ＤＷＯＲＤ        ｄｗＫｅｙＳｔａｔｅ，
／／  キーボードとマウスの状態
ＰＯＩＮＴＬ      ｐｔ，    
／／  カーソル位置
ＤＷＯＲＤ＊      ｐｄｗＤｒｏｐＥｆｆｅｃｔ，
／／  結果のドロップ効果
）
【００５７】
ＤｒａｇＯｖｅｒに対する呼び出しの間、現在のマウス位置、マウスボタン状態、及びキーボード状態の変更に関してチェックすることができる。変更を検出すると、クライアントコンポーネントのための入力ハンドラは、適切なマウス移動、マウスボタン上下、又はキーボードボタン上下のメッセージをサーバコンポーネント１１６に対して送付する。
【００５８】
サーバコンポーネント１１６（代理ドロップソース）は、ＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇ方法を連続して呼び出すことができる。ＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇ方法のパラメータは、以下のフォーマットとすることができる。
ＨＲＥＳＵＬＴ  ＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇ（
ＢＯＯＬ        ｆＥｓｃａｐｅＰｒｅｓｓｅｄ．
／／  ＥＳＣが押されているときＴＲＵＥ  
ＤＷＯＲＤ    ｄｗＫｅｙＳｔａｔｅ，
／／  キーボードとマウスの状態
）
【００５９】
ＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇ方法を使用して、ドロップソース（又は代理ドロップソース）に対しキーボードとマウスの現在状態に関して通知することができる。この入力に基づいて、ドロップソース（又は代理ドロップソース）は、ドラッグの継続、ドラッグの取消、又はドロップの開始許可を決定することができる。ドロップソースは、ＨＲＥＳＵＬＴ戻り値を通じて、その決定を通知する。例えば、Ｓ＿ＯＫは継続を表示し、ＤＲＡＧＤＲＯＰ＿Ｓ＿ＣＡＮＣＥＬは取消を表示し、ＤＲＡＧＤＲＯＰ＿Ｓ＿ＤＲＯＰはドロップの開始許可を表示することができる。カーソル１３３がアプリケーションウインドウ１１２Ｗの上にある間は、取消又はドロップ操作は始まっていないので、ＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇはＳ＿ＯＫを戻すことができる。
【００６０】
サーバコンポーネント１１６は、ＧｉｖｅＦｅｅｄｂａｃｋ  方法を呼び出して、アプリケーショショ１１２のドロップ効果（移動、コピー、リンク、など）をクライアントコンポーネント１０６に戻すことができる。ＧｉｖｅＦｅｅｄｂａｃｋ方法のパラメータは、以下のフォーマットとすることができる。
ＨＲＥＳＵＬＴ  ＧｉｖｅＦｅｅｄｂａｃｋ  （
ＤＷＯＲＤ    ｄｗＤｒｏｐＥｆｆｅｃｔ，
／／  現在の目標（例えば、アプリケーション１１２）
／／ドロップ効果
）
【００６１】
一般的に、ＧｉｖｅＦｅｅｄｂａｃｋ方法は、ドロップソース（又は代理ドロップソース）に現在のドロップ効果を通知するので、ドロップソースは適切な視覚的フィードバックを与えることができる。視覚的フィードバックはＨＲＥＳＵＬＴ戻り値を通じて示される。Ｓ＿ＯＫの値はそのドロップソースがカーソルを適切に設定していることを意味する一方で、ＤＲＡＧＤＲＯＰ＿Ｓ＿ＵＳＥＤＥＦＡＯＵＬＴＣＵＲＳＯＲＳはソースがＯＬＥ提供の規定値カーソルを使用することで十分であることを示す。
【００６２】
サーバコンポーネント１１６がＧｉｖｅＦｅｅｄｂａｃｋを呼び出すとき、アプリケーション１１２のドロップ効果は、ＵＰＤＡＴＥ＿ＤＲＯＰ＿ＥＦＦＥＣＴメッセージの中で、仮想チャンネル１２１を介してサーバコンポーネント１１６からクライアントコンポーネント１０６に送付される。クライアントコンポーネント１０６は、そのドロップ効果を記憶し、そのドロップ効果を（例えば、ＤｒｏｐＯｖｅｒ方法を起動することにより）アプリケーション１０２に戻す。
【００６３】
コンピュータシステム１０１におけるマウス及びキーボードの状態に基づいて、アプリケーション１０２は最終的に、ドラッグ操作を取り消すか又はドロップの発生を許可するかを決定する。したがって、実施形態によっては、ドラッグ操作が取り消される（したがってドロップは発生しない）。取消が起こると、クライアントコンポーネント１０６（代理ドロップターゲット）は、例えば、
ＨＲＥＳＵＬＴ  ＤｒａｇＬｅａｖｅ（）
のフォーマットのＤｒａｇＬｅａｖｅ方法を通じて通知される。
【００６４】
サーバコンポーネント１１６のためのイベントハンドラは、ＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージの中で示される取消結果を記憶することができる。したがって、次回にＱｕｅｒｒｙＣｏｎｔｉｎｕｅＤｒａｇを呼び出すとき、これはＤＲＡＧＳＴＯＰ＿Ｓ＿ＣＡＮＣＥＬを戻して、コンピュータシステム１１１でドラッグ操作を終了させる。
【００６５】
別の実施形態においてはドロップが生起する。したがって、方法２００は、ドロップ操作を開始する処理をも含む（処理２０４）。例えば、アプリケーション１０２は、ドロップ操作をおこなってオブジェクト１２６をアプリケーション１１２に送付することができる。ユーザは入力装置を操作してドロップを開始する。例えば、ユーザは、カーソル１３３がアプリケーションウインドウの上にある間にマウスの左ボタンを離すことができる。
【００６６】
方法２００は、ドラッグアンドドロップオブジェクトがリモートアプリケーションに転送されることを示すドロップ通知を受ける処理を含む（処理２０５）。例えば、クライアントコンポーネント１０６は、未処理のドラッグアンドドロップ操作の一部としてオブジェクト１２６をアプリケーション１０２に送付することを示すドロップ通知を受けることができる。方法２００は、ドラッグアンドドロップオブジェクトを、デスクトップカーソルウインドウの座標位置と共に転送する要求を送る処理を含む（処理２０６）。例えば、ドロップ通知の受領に応答して、クライアントコンポーネント１０６はＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージをサーバコンポーネント１１６に送り、オブジェクト１２６をアプリケーション１１２に転送するよう要求することができる。ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージは、仮想チャンネル１２１を介して送り、カーソル１３３の座標位置を含むことができる。
【００６７】
方法２００は、ドラッグアンドドロップオブジェクトとデスクトップウインドウカーソルの位置座標を転送する要求を受け取る処理を含む（処理２０７）。例えば、サーバコンポーネント１１６は、オブジェクト１２６のアプリケーション１１２への転送を要求するＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージを受け取ることができる。ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージがサーバコンポーネント１１６に到着するとき、イベントハンドラの中にドロップが発生するとの通知を記憶する。したがって、ＱｕｅｒｒｙＣｏｎｔｉｎｕｅＤｒａｇを次回に呼び出すとき、ＱｕｅｒｒｙＣｏｎｔｉｎｕｅＤｒａｇは、ＤＲＡＧＳＴＯＰ＿Ｓ＿ＤＲＯＰ（ドロップが発生するとの表示）を戻す。しかし、この値を戻す前に、ＧＩＶＥ＿ＦＯＣＵＳメッセージをクライアントコンポーネント１０６に送付することができる。
【００６８】
ＧＩＶＥ＿ＦＯＣＵＳメッセージを受け取ると、クライアントコンポーネント１０６はＳｅｔＦｏｒｅｇｒｏｕｎｄＷｉｎｄｏｗ  ＡＰＩを呼び出すことにより入力にピントを合わせることができる。
【００６９】
サーバコンポーネント１１６は、仮想チャンネル１２１を介してＤＯ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージをクライアントコンポーネント１０６に送ることができる。
【００７０】
方法２００は、ドラッグアンドドロップオブジェクトの転送通知を相手方アプリケーションに送付する処理を含む（処理２０８）。例えば、サーバコンポーネント１１６は、オブジェクト１２６に関するドロップ通知を（例えば、アプリケーションウインドウ１１２Ｗの上にある）カーソル１３３の座標位置に基づいてアプリケーション１１２に転送することができる。方法２００は、ドラッグアンドドロップオブジェクトを送付する通知を受け取る処理を含む（処理２０９）。例えば、アプリケーション１１２は、オブジェクト１２６に関するドロップ通知をサーバコンポーネント１１６から受け取ることができる。
【００７１】
方法２００は、ドラッグアンドドロップオブジェクトを要求する処理を含む（処理２１０）。例えば、アプリケーション１１２はサーバコンポーネント１１６に対しオブジェクト１２６を要求することができる。方法２００は、相手方アプリケーションからドラッグアンドドロップオブジェクトに関する要求を受け取る処理を含む（処理２１１）。例えば、サーバコンポーネント１１６は、オブジェクト１２６に関する要求をアプリケーション１１２から受け取ることができる。サーバコンポーネント１１６は、代理オブジェクト１３６の上にＧｅｔＤａｔａコールを検出することができる。
【００７２】
方法２００は、ドラッグアンドドロップオブジェクトに関する要求をクライアントコンポーネントに送る処理を含む（処理２１２）。例えば、サーバコンポーネント１１６は仮想チャンネル１２１を介してＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージをクライアントコンポーネント１０６に送付することができる。ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージは、アプリケーション１１２のためにオブジェクト１２６を要求する。方法２００は、サーバコンポーネントからドラッグアンドドロップオブジェクトに関する要求を受け取る処理を含む（処理２１３）。例えば、クライアントコンポーネント１０６は、仮想チャンネル１２１を介してサーバコンポーネント１１６からＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージを受け取ることができる。
【００７３】
方法２００は、ドラッグアンドドロップオブジェクトに関する要求をローカルアプリケーションに転送する処理を含む（処理２１４）。例えば、クライアントコンポーネント１０６は、オブジェクト１２６に関する要求をアプリケーション１０２に転送することができる。方法２００は、ドラッグアンドドロップオブジェクトに関する要求を受け取る処理を含む（処理２１５）。例えば、アプリケーション１０２は、オブジェクト１２６に関する要求を受け取ることができる。
【００７４】
実施形態によっては、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージのためのイベントハンドラは、ＤｒａｇＥｎｔｅｒ方法に記憶するドラッグアンドドロップオブジェクトに関する参照を使用してＧｅｔＤａｔａコールを実行する。フォーマットデータを回収すると、適切に符号化する。
【００７５】
方法２００は、ドラッグアンドドロップオブジェクトを送る処理を含む（処理２１６）。例えば、戻されるフォーマット及びドロップ効果を受領の後、アプリケーション１０２はオブジェクト１２６をクライアントコンポーネント１０６に送ることができる。方法２００は、ローカルアプリケーションからドラッグアンドドロップオブジェクトを受け取る処理を含む（処理２１７）。例えば、クライアントコンポーネント１０６は、アプリケーション１０２からオブジェクト１２６を受け取ることができる。
【００７６】
方法２００は、ドラッグアンドドロップオブジェクトをサーバコンポーネントに対し送付する処理を含む（処理２１８）。例えば、クライアントコンポーネント１０６は、オブジェクト１２６からのデータを含むＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージを、サーバコンポーネント１１６に仮想チャンネル１２１を介して送付することができる。  方法２００は、クライアントコンポーネントからドラッグアンドドロップオブジェクトを受け取る処理を含む（処理２１９）。例えば、サーバコンポーネント１１６は、オブジェクト１２６からのデータを含むＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージを、クライアントコンポーネント１０６から仮想チャンネル１２１を介して受け取ることができる。
【００７７】
方法２００は、ドラッグアンドドロップオブジェクトをリモートアプリケーションに転送する処理を含む（処理２２０）。例えば、サーバコンポーネント１１６は、データをオブジェクト１２６からアプリケーション１１２に転送することができる。方法２００は、ドラッグアンドドロップオブジェクトを受け取る処理を含む（処理２２１）。例えば、アプリケーション１１２は、データをオブジェクト１２６から受け取ることができる。したがって、選択するドロップ効果に応じて、オブジェクト１２６からのデータは、アプリケーション１０２からアプリケーション１１２に移動、コピー、リンク、ハイパーリンク、又はショートカットされる。
【００７８】
実施形態によっては、適切に符号化されたデータを、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージの中で、続けて有線を介して送信する。サーバコンポーネント１１６におけるこのＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージの受け取りに際し、適切なイベントハンドラを呼び出しフォーマットされたデータを抽出して復号化する。イベントハンドラが実行を完了すると、フォーマットされたデータはドロップターゲットに戻されて、ローカルドロップターゲットのＤｒｏｐ方法コールは完了する結果となる。
【００７９】
Ｄｒｏｐコールが完了するとき、ＤｏＤｒａｇＤｒｏｐループは終結してドロップ効果が（例えば、サーバコンポーネント１１６に）戻される。ドラッグアンドドロップオブジェクトはＰｅｒｆｏｒｍｅｄＤｒｏｐＥｆｆｅｃｔ及びＬｏｇｉｃａｌＰｅｒｆｏｒｍｅｄＤｒｏｐＥｆｆｅｃｔに関しクエリーされる。これら二つのフォーマットは、最終のドロップ効果及びＤｏＤｒａｇＤｒｏｐ  ＨＥＲＥＳＵＬＴと共に、ＤＯ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージの中で、クライアントコンポーネント１０６にローカルに送付される。クライアントコンポーネント１０６は、これらの結果をその代理ドロップ方式に戻す。ＤＯ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージの受け取りに際して、クライアントコンポーネント１０６にあるイベントハンドラはその結果を記憶する。クライアントコンポーネント１０６の代理ドロップ方式は、戻されたフォーマットを用いてオブジェクト１２６を初期化しドロップ効果及びＨＲＥＳＵＬＴをＯＬＥサブシステムに戻して、実行を継続する。
【００８０】
クライアントコンポーネント１０６（代理ドロップターゲット）及びサーバコンポーネント１１６（代理ドロップソース）は、各種の異なる方法で構成して、方法２００の実装を容易にすることができる。
【００８１】
例えば、クライアントコンポーネント１０６（代理ドロップターゲット）は、ドラッグアンドドロップモーダルループを開始する時期を表示する構成とすることができる。クライアントコンポーネント１０６は、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージを、仮想チャンネル１２１を介してサーバコンポーネント１１６に送付することができる。ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰが処理されるとき、サーバコンポーネント１１６（代理ドロップソース）は、アプリケーション１１２（ドロップターゲット）に対してドラッグアンドドロップモーダルループを開始することができる。
【００８２】
クライアントコンポーネント１０６は、アプリケーション１０２（ドロップソース）がサポートすることのできるフォーマットのリストを送付する構成とすることもできる。ＤｒａｇＥｎｔｅｒ方法のパラメータのうち一つは、アプリケーション１０２が提供することのできるデータを含むデータオブジェクトに対するポインタである。フォーマットエニュメレータを用いて、フォーマット名をこのデータオブジェクトから抽出し、符号化し、次いでパラメータとしてＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージに送付して、サーバコンポーネント１１６が代理データオブジェクトを作成することができるようにする。
【００８３】
クライアントコンポーネント１０６は、リモートのマウス位置、キー状態及びキーボード状態を更新する構成とすることもできる。ドラッグアンドドロップモーダルループを開始する直前に、サーバコンポーネント１１６は、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージを、仮想チャンネル１２１を介して送付することができる。クライアントコンポーネント１０６がこのメッセージを受け取るとき、クライアントコンポーネント１０６のＤｒａｇＯｖｅｒ方法は解放されて、現在のマウス位置、マウスキー状態及びキーボード状態の更新をサーバコンポーネント１１６に送付する。マウス及びキーボード双方のキー状態は、ＤｒａｇＯｖｅｒ方法に渡されるパラメータから獲得する。これらの更新は、入力フォーカス及びマウスキャプチャを有するアプリケーション１０２を補う。
【００８４】
クライアントコンポーネント１０６は、サーバコンポーネント１１６から受け取る最新のドロップ効果を戻す構成とすることもできる。サーバコンポーネント１１６は、アプリケーション１１２がドロップ効果を変更するときは何時でも、ＵＰＤＡＴＥ＿ＤＲＯＰ＿ＥＦＦＥＣＴメッセージをクライアントコンポーネント１０６に送付することができる。ＤｒｏｐＯｖｅｒ処理の一部として、更新ドロップ効果はコンピュータシステム１０１のＯＬＥサブシステムに戻され、アプリケーション１０２に対し現在のドロップ効果に関して通知する。
【００８５】
クライアントコンポーネント１０６は、現在のドラッグ操作の状態に関して、サーバコンポーネント１１６を更新する構成とすることもできる。ＤｒａｇＬｅａｖｅ方法が呼び出されると、アプリケーション１０２は、ドラッグアンドドロップ操作を取り消すと決定している。したがって、アプリケーション１１２は、同じことをして自分のＤｒａｇＬｅａｖｅ方法を呼び出さなければならない。クライアントコンポーネント１０６は、適切な情報をサーバコンポーネント１１６に中継してアプリケーション１１２に自分のＤｒａｇＬｅａｖｅ方法を呼び出させる。
【００８６】
クライアントコンポーネント１０６は、ドロップが発生するとオブジェクト１２６に対するポインタを記憶する構成とすることもできる。ドロップが行われると、次いでアプリケーション１１２はオブジェクト１２６を要求することができる。オブジェクト１２６を戻せることを保証する補助のため、クライアントコンポーネント１０６は、ドロップコールで受け取ったオブジェクト１２６に対するポインタを記憶することができる。したがって、オブジェクトに対する要求をＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージの形で受け取るとき、クライアントコンポーネント１０６は、セーブしたオブジェクト１２６に向かってＧｅｔＤａｔａコールを実行することにより適切なフォーマットを提供し、そのデータをＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳメッセージへ戻すことができる。
【００８７】
サーバコンポーネント１１６は、正しいフォーマット名を公示する代理データオブジェクトを作成する構成とすることができる。ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージパラメータのうち一つは、アプリケーション１１２が提供することのできるフォーマットのリストである。リモートモーダルループを開始する前に、代理データオブジェクトを作成し、これらのフォーマット名で投入する。次いで、作成したデータオブジェクトを、コンピュータシステム１１１のＯＬＥサブシステムに、ＤｏＤｒａｇＤｒｏｐコールの中のパラメータとして渡す。こうして、リモートセッション内部のドロップターゲットは、ドロップが発生するとフォーマットをクエリーしてデータを取り出すことができる。
【００８８】
サーバコンポーネント１１６は、現在のドロップ効果をクライアントコンポーネント１０６に中継する構成とすることもできる。アプリケーション１１２がコンピュータシステム１１１のＯＬＥサブシステムに戻すドロップ効果は、ＧｉｖｅＦｅｅｄｂａｃｋコールの一部としてクライアントコンポーネント１０６に渡される。このドロップ効果を、仮想チャンネル１２１を介してコンピュータシステム１０１にＵＰＤＡＴＥ＿ＤＲＯＰ＿ＥＦＦＥＣＴメッセージに渡して、そのＤｒａｇＯｖｅｒ方法を呼び出すときクライアントコンポーネント１０６がこのドロップ効果を戻すことができるようにする。
【００８９】
サーバコンポーネント１１６は、クライアントコンポーネント１０６が命令するとき、取消又はドロップを開始する構成とすることもできる。コンピュータ１０１においてドロップ又は取消の操作を行うとき、クライアントコンポーネント１０６のＤｒｏｐ又はＤｒｏｐＬｅａｖｅ方法を呼び出すことができる。これが生じるとき、サーバコンポーネント１１６にメッセージを送付して、次回にＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇを呼び出す際、コンピュータシステム１１１のＯＬＥサブシステムに正しいＨＲＥＳＵＬＴを戻すことができるようにする。ＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージを受け取るとＤＲＡＧＤＲＯＰ＿Ｓ＿ＣＡＮＣＥＬメッセージを戻す。ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージを受け取ると、ＤＲＡＧＤＲＯＰ＿Ｓ＿ＤＲＯＰメッセージを戻す。さもなければ、Ｓ＿ＯＫを戻し、モーダルループは継続する。
【００９０】
代理オブジェクト１３６を、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージを受け取るとき作成することができる。代理オブジェクト１３６は、オブジェクト１２６が公示するのと同一のフォーマットを戻すことにより、実質的にオブジェクト１２６を模倣する。代理オブジェクト１３６がデータを要求するときは、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージをコンピュータシステム１０１に送付する。クライアントコンポーネント１０６は次いでオブジェクト１２６からデータを取り出してそのデータをＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージへ送り返すことができる。
【００９１】
したがって、本発明の実施形態は、リモートモジュールからローカルモジュールにオブジェクトをドラッグアンドドロップすることを容易にすることができる。
【００９２】
図３Ａは、リモートデスクトップモジュールからローカルデスクトップモジュールへのオブジェクトのドラッグアンドドロップを容易にすることができるコンピュータアーキテクチャの例３００を示す。コンピュータシステム３０１（例えば、クライアント）及びコンピュータシステム３１１（例えばサーバ）。コンピュータシステム３０１及びコンピュータシステム３１１は、例えば、「ＬＡＮ」（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ））、「ＷＡＮ」（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、又はインターネット、のようなネットワークに接続することができる。したがって、コンピュータシステム３０１及びコンピュータシステム３１１における様々なコンポーネントは、ネットワークに接続する他のコンポーネントと同様、互いにデータを送受信することができる。したがって、コンポーネントは、メッセージ関連のデータを作成し、メッセージ関連のデータをネットワーク（例えば、「ＩＰ」（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ））、データグラム及び、「ＴＣＰ」（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）、「ＲＤＰ」（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）、「ＨＴＴＰ」（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）、「ＳＭＴＰ」（Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ、「ＩＣＡ」（Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）のようなＩＰデータグラムを使用する他の上層プロトコル、など）を介して交換することができる。
【００９３】
図に示すように、コンピュータシステム３０１は、アプリケーション３０２、クライアントモジュール３０６、及びユーザインタフェース３０４を含み、コンピュータシステム１１１は、アプリケーション３１２、及びサーバモジュール３１６を含む。コンピュータシステム３０１及びコンピュータシステム３１１は、ネットワーク上に設立されるターミナルサーバセッション３３１（例えば，ＲＤＰセッション）を経由して互いに通信する。クライアントコンポーネント３０６及びサーバコンポーネント３１６は同時に使用して、ターミナルサーバセッション３３１の管理を容易にすることができる。例えば、ユーザインタフェース３０４で受け取るユーザ入力をコンピュータシステム３０１からコンピュータシステム３１１に転送すること、ユーザ入力をコンピュータシステム３１１にある適切なリモートアプリケーションに転送すること、リモートアプリケーションからの出力をコンピュータシステム３１１において受け取ること、リモートアプリケーションの出力をコンピュータシステム３１１からコンピュータシステム３０１に転送すること、及びリモートアプリケーションの出力をユーザインタフェース３０４で出力することである。このように、（ユーザインタフェース３０４の観点から）リモートアプリケーションに対し、コンピュータシステム３０１において入力を受け取り、出力を提示する一方で、処理は実際にコンピュータシステム３１１において発生する。
【００９４】
仮想チャンネル３２１は、ドラッグアンドドロップオブジェクトをコンピュータシステム３１１からコンピュータシステム３０１に転送する構成のチャンネルであることができる。仮想チャンネル３２１は、クライアントコンポーネント３０６にあるドラッグアンドドロップスレッドをサーバコンポーネント３１６にあるドラッグアンドドロップスレッドに接続すること及びその逆を行うことができる。したがって、クライアントコンポーネント３０６及びサーバコンポーネント３１６を同時に使用して、コンピュータシステム３０１にある適切なアプリケーションとコンピュータシステム３１１にある適切なアプリケーションとの間の仮想チャンネル３２１を介して、ドラッグアンドドロップデータを転送することができる。
【００９５】
図３Ｂは、ローカルモジュールからリモートモジュールへのドラッグアンドドロップ操作を描写するデスクトップウインドウの例３２３を示す。図に示すように、デスクトップウインドウ３２３はユーザインタフェース３０４の一部であって、アプリケーションウインドウ３０２Ｗ及びリモートデスクトップ３１３を含む。アプリケーションウインドウ３０２Ｗは、アプリケーション３０２に対応し、アプリケーション３０２に対するユーザ入力を受け取りアプリケーション３０２からの出力をユーザに提示する構成となっている。リモートデスクトップ３１３は、コンピュータシステム３１１からリモートである任意のアプリケーションに対するアプリケーションウインドウを含む。例えば、アプリケーションウインドウ３１２Ｗはアプリケーション３１２に対応し、アプリケーション３１２に対するユーザ入力を受け取りアプリケーション３１２からの出力をユーザに提示する構成となっている。
【００９６】
図４Ａ−４Ｃは、リモートモジュールからローカルモジュールに対してオブジェクトをドラッグアンドドロップするための方法の例４００の流れ図を示す。方法４００を、コンピュータアーキテクチャ３００内のコンポーネント及びデータに関して記述する。
【００９７】
方法４００は、リモートアプリケーションウインドウからドラッグアンドドロップオブジェクトを選択する処理を含む（処理４０１）。例えば、コンピュータシステム３０１のユーザはアプリケーションウインドウ３１２Ｗ内部からオブジェクト３２６を選択することができる。オブジェクト３２６は、例えば、テキスト、グラフィックス、又は音声データの一部、スプレッドシートのセル、データベース項目、電子メッセージ、などのようなコンピュータシステムにある事実上選択可能な任意のオブジェクトである。
【００９８】
方法４００は、デスクトップウインドウカーソルを変更してドラッグアンドドロップオブジェクトを選択することを視覚的に表現する処理を含む（処理４０２）。例えば、オブジェクト３２６を選択した後、カーソル３３３を変更して、ドロップ効果標識３３４を含むことができる。ドロップ効果には、移動、コピー、リンク、ハイパーリンクの作成、及び選択オブジェクトへのショートカットの作成の何れをも含むことができる。カーソル３３３は、異なる方法で変更又は補完して異なるドロップ効果を表示することができる。例えば、ドロップ効果標識３３４を表示して、そのドロップ効果が移動することを示すことができる。
【００９９】
ドロップ効果は、アプリケーションに対し利用可能なドロップ効果から選択することができる。カーソル３３３がデスクトップウインドウ３２３の異なるウインドウの間で移行するにつれ、表示されるドロップ効果標識を変更することができる。例えば、カーソル３３３がアプリケーションウインドウ３１２Ｗの境界の内側にあるときは、アプリケーション３１２に対する（例えば、移動の）規定値ドロップ効果を表示することができる。カーソル３３３が任意のアプリケーションウインドウの境界の外側にあるときは、デスクトップウインドウ３２３（例えば、オペレーティングシステム）に対する規定値ドロップ効果を表示することができる。例えば、デスクトップウインドウ３２３に対しては、ドラッグアンドドロップ機能を全くサポートしないことがあるので、カーソル３３３は、ユーザインタフェース３０４のこの領域にあるとき「不可」記号に変形する。アプリケーションウインドウ３０２Ｗに入ると、アプリケーション３０２に対する（例えば、移動の）規定値ドロップ効果を表示することができる。
【０１００】
方法４００は、デスクトップウインドウカーソルが、リモートアプリケーションウインドウの境界の外側から内側に移動したことを検知するクライアントコンポーネントの処理を含む（処理４０３）。例えば、クライアントコンポーネント３０６は、カーソル３３３がアプリケーションウインドウ３０２Ｗの境界の外側から内側に移動したことを検知することができる。（図３Ｂの点線は、アプリケーションウインドウ３１２Ｗから、リモートデスクトップ３１３及びデスクトップウインドウ３２３を通って、アプリケーションウインドウ３０２Ｗに到るカーソル３３３の経路を示す。）
【０１０１】
方法４００は、デスクトップウインドウカーソルが移動したことを示すメッセージを送付する処理を含む（処理４０４）。例えば、クライアントコンポーネント３０６は、ＭＯＵＳＥ＿ＨＡＳ＿ＬＥＦＴメッセージをサーバコンポーネント３１６に仮想チャンネル３２１を介して送付することができる。このＭＯＵＳＥ＿ＨＡＳ＿ＬＥＦＴメッセージは、カーソル３３３がアプリケーションウインドウ３１２Ｗの外側（及び／又はリモートデスクトップ３１３の外側）に移動したことを示す。方法４００は、デスクトップウインドウカーソルが移動したことを示すメッセージを受け取る処理を含む（処理４０５）。例えば、サーバコンポーネント３１６はＭＯＵＳＥ＿ＨＡＳ＿ＬＥＦＴメッセージを、仮想チャンネル３２１を介してクライアントコンポーネント３０６から受け取ることができる。
【０１０２】
方法４００は、デスクトップウインドウカーソルの移動は、未処理のドラッグアンドドロップ操作に関連すると判定する処理を含む（処理４０６）。例えば、サーバコンポーネント３１６は、カーソルがアプリケーションウインドウ３１３の外側へ移動することは、オブジェクト３２６に対するドラッグアンドドロップ操作に関連すると判定することができる。サーバコンポーネント３１６は、共通オブジェクトモデル（「ＣＯＭ」）ＡＰＩを呼び出して、実際のドラッグアンドドロップ操作が未処理のものであるか又はマウスが別の理由で移動されるのか否かをクエリーすることができる。
【０１０３】
処理４０１、４０２、４０３、４０４及び４０５を、リモートモジュールからローカルモジュールに対するドラッグアンドドロップ操作の設定の一部として含むことができる。例えば、ユーザがマウスボタンをクライアントウインドウの中で押下するとき、入力ハンドラウインドウがマウスをキャプチャする。マウスをドラッグする間、繰り返しマウスをチェックして、未だに入力ハンドラウインドウ上にあるか否かを判定することができる。マウスが入力ハンドラウインドウ上にない場合は、ドラッグがリモートモジュールからローカルモジュールに対して開始されている可能性がある。マウスがリモートモジュールを離れたことを検出した後、ＭＯＵＳＥ＿ＨＡＳ＿ＬＥＦＴメッセージをサーバコンポーネント３１６に仮想チャンネルを介して送付する。
【０１０４】
このメッセージの受け取りに際して、サーバコンポーネント３１６は移行して代理ドロップターゲットとなる。代理ドロップターゲットへの移行は、少なくとも二つの異なる機構を用いて達成することができる。一つの機構は、アルファブレンドされたドラッグアンドドロップウインドウを最大にしてセッションスクリーン物的財産全部を満たし、次いでそのアルファブレンドされたドラッグアンドドロップウインドウをＺオーダのトップに強制することを含む。別の機構は、ＯＬＥ  ＡＰＩ呼び出すことを含む。
【０１０５】
代理ドロップターゲットサーバへの移行の後、コンポーネント３１６はリモートセッション内で代理ドロップターゲットとして作用することができる。例えば、代理ドロップターゲットになるに際して、サーバコンポーネント３１６に対するＤｒａｇＥｎｔｅｒ方法を呼び出すことができる。このＤｒａｇＥｎｔｅｒ方法は、オブジェクト３２６を記憶させ、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージをクライアントコンポーネント３０６に送付させる。
【０１０６】
ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージはクライアントコンポーネント３０６上でイベントハンドラが処理することができる。このイベントハンドラは、フォーマット名及び許容ドロップ効果を抽出することができる。これに応じ、クライアントコンポーネント３０６は、ＤＯ＿ＭＯＤＡＬ＿ＬＯＯＰイベントを開始して、コンピュータシステム３０１に対する入力ハンドラに、ローカルのドラッグアンドドロップループを開始することを通知する。ＤＯ＿ＭＯＤＡＬ＿ＬＯＯＰイベントを受け取ると、入力ハンドラは代理オブジェクト３２８を構築してドラッグアンドドロップ通知イベントをクライアントコンポーネント３０６にリダイレクトする。こうして、クライアントコンポーネント３０６を代理ドロップソースに移行させる。
【０１０７】
ドラッグアンドドロップ通知イベントを、ドラッグアンドドロップスレッドの上のイベントシンクを無効にし、クライアントコンポーネント３０６対して特別に作成するイベントシンクを有効にすることによりリダイレクトすることができる。ＤｏＤｒａｇＤｒｏｐモーダルループを開始する前に、ドラッグアンドドロップスレッドに合図して、ループをまさに開始しようとしていることを通知する。これに応じて、クライアントコンポーネント３０６は、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージをサーバコンポーネント３１６に送付することができる。ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージを受け取ると、サーバコンポーネント３１６は、例えば、ＤＯ＿ＤＲＡＧ＿ＤＲＯＰ及びＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージのようなドラッグアンドドロップメッセージをクライアントコンポーネント３０６に自由に送付することができる。
【０１０８】
しかしながら、マウスをアプリケーションウインドウ３０２Ｗ内であちこちドラッグしているとき、様々なマウス及びキーボードイベントが関係することがある。ＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇをアプリケーション３１２（リモートアプリケーション）の上で使用して、この情報に対する更新を獲得することができる。現在の入力状態を有するサーバコンポーネント３１６を更新するには、入力ハンドラが適切なマウスボタンを上げ下げするよう、及びキーボードボタンを上げ下げするよう送付する。ＵＰＤＡＴＥ＿ＤＲＯＰ＿ＥＦＦＥＣＴメッセージを活用することにより、ＧｉｖｅＦｅｅｄｂａｃｋ方法をクライアントコンポーネント３０６の上で呼び出し、アプリケーション３０２が戻すドロップ効果を用いてサーバコンポーネント３１６を更新する。コンピュータシステム３１１において、ドロップ効果を記憶し、後にサーバコンポーネント３１６が呼び出すＤｒａｇＯｖｅｒ方法に戻す。
【０１０９】
コンピュータシステム３０１におけるマウス及びキーボードの状態に基づいて、アプリケーション３１２はドラッグ操作を取り消すか又はドロップの発生を許すかを最後的に決定することができる。このように、実施形態によっては、ドラッグ操作を取り消す（したがってドロップは生じない）。取消が行われると、サーバコンポーネント３１６（代理ドロップソース）には、ＤｒａｇＬｅａｖｅ方法を通じて通知する。
【０１１０】
取消に応じて、サーバコンポーネント３１６はクライアントコンポーネント３０６にＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージを送付することもできる。ＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージを送付した後、オブジェクト３２６を解放することができる。クライアントコンポーネント３０６に対するイベントハンドラは、ＳＴＯＰ＿ＤＲＡＧ＿ＤＲＯＰメッセージの中に示す取消結果を記憶することができる。こうして次回にＱｕｅｒｙＣｏｎｔｉｎｕｅＤｒａｇを呼び出すと、これはＤＲＡＧＤＲＯＰ＿Ｓ＿ＣＡＮＳＥＬを戻して、コンピュータシステム３０１においてドラッグ操作を終了させる。
【０１１１】
別の実施例においては、ドロップが生じる。ユーザがローカルアプリケーションウインドウ３０２Ｗ上でマウスをあちこち動かすとき、ユーザはマウスボタンを解放することがある。マウスボタンが解放されると、クライアントコンポーネント３０６は、その解放をサーバコンポーネント３１６に仮想チャンネル３２１を介して通知する。これに応じて、サーバコンポーネント３１６は、クライアントコンポーネント３０６にＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージを送付して、アプリケーション３０２に対するオブジェクト３２６の転送を要求する。サーバコンポーネント３１６は、ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージの表示をアプリケーション３０２に送付することができる。クライアントコンポーネント３０６は、ＤＯ＿ＤＲＡＧ＿ＤＲＯＰ＿ＲＥＳＰＯＮＳＥメッセージをサーバコンポーネント３１６に仮想チャンネル３２１を介して送付することができる。
【０１１２】
方法４００は、ドラッグアンドドロップオブジェクトに関するクエリーを送付する処理を含む（処理４０７）。例えば、ＤＯ＿ＤＲＡＧ＿ＤＲＯＰメッセージの表示に応答して、アプリケーション３０２は、代理オブジェクト３２８に関してクエリーすることができる。方法４００は、ドラッグアンドドロップオブジェクトに関するクエリーをローカルアプリケーションから受け取る処理を含む（処理ｔ４０８）。例えば、クライアントコンポーネント３０６は、アプリケーション３０２からオブジェクト３２６に関するクエリーを受け取ることができる。
【０１１３】
方法４００は、サーバコンポーネントにドラッグアンドドロップオブジェクトに関する要求を送付する処理を含む（処理４０９）。例えば、クライアントコンポーネント３０６は、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージをサーバコンポーネント３１６に仮想チャンネル３２１を介して送付することができる。ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージは、アプリケーション３１２に対してオブジェクト３２６を要求する。方法４００は、クライアントコンポーネントからドラッグアンドドロップオブジェクトに関する要求を受け取る処理を含む（処理４１０）。例えば、サーバコンポーネント３１６は、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージを、クライアントコンポーネント３０６から仮想チャンネル３２１を介して受け取ることができる。
【０１１４】
方法４００は、ドラッグアンドドロップオブジェクトに関する要求をリモートアプリケーションに転送する処理を含む（処理４１１）。例えば、サーバコンポーネント３１６はオブジェクト３２６に関する要求をアプリケーション３１２に転送することができる。方法４００は、ドラッグアンドドロップオブジェクトに関する要求を受け取る処理を含む（処理４１２）。例えば、アプリケーション３１２はサーバコンポーネント３１６からオブジェクト３２６に関する要求を受け取ることができる。
【０１１５】
方法４００は、ドラッグアンドドロップオブジェクトを送付する処理を含む（処理４１３）。例えば、アプリケーション３１２は、オブジェクト３２６をサーバコンポーネント３１６に送付することができる。方法４００は、ドラッグアンドドロップオブジェクトをリモートアプリケーションから受け取る処理を含む（処理４１４）。例えば、サーバコンポーネント３１６は、アプリケーション３１２からオブジェクト３２６を受け取ることができる。
【０１１６】
方法４００は、ドラッグアンドドロップオブジェクトをクライアントコンポーネントに送付する処理を含む（処理４１５）。例えば、サーバコンポーネント３１６は、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージを、オブジェクト３２６からのデータを含めて、クライアントコンポーネント３０６に仮想チャンネル３２１を介して送付することができる。方法４００は、サーバコンポーネントからドラッグアンドドロップオブジェクトを受け取る処理を含む（処理４１６）。例えば、クライアントコンポーネント３０６は、ＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージを、オブジェクト３２６からのデータを含めて、サーバコンポーネント３０６から仮想チャンネル３２１を介して受け取ることができる。
【０１１７】
方法４００は、ドラッグアンドドロップオブジェクトをローカルアプリケーションに転送する処理を含む（処理４１７）。例えば、クライアントコンポーネント３０６は、オブジェクト３２６からのデータをアプリケーション３１２に転送することができる。方法４００は、ドラッグアンドドロップオブジェクトを受け取る処理を含む（処理４１８）。例えば、アプリケーション３０２は、オブジェクト３０６からのデータをクライアントコンポーネント３０６から受け取ることができる。したがって、選択するドロップ効果にしたがって、オブジェクト３２６からのデータは、アプリケーション３１２からアプリケーション３０２に、移動、コピー、リンク、ハイパーリンク又はショートカットされる。
【０１１８】
クライアントコンポーネント３０６（代理ドロップソース）及びサーバコンポーネント３１６（代理ドロップターゲット）を各種の異なる方法で構成して方法４００の実装を容易にすることができる。
【０１１９】
例えば、クライアントコンポーネント３０６（代理ドロップソース）は、正しいフォーマット名を公示する代理データオブジェクトを作成し、現在のドロップ効果をサーバコンポーネント３１６に中継し、サーバコンポーネント３１６が命令するとき取消又はドロップを指示し、及びアプリケーションウインドウ３１２Ｗ内のマウスキー状態及びキーボード状態を更新する構成とすることができる。ＱｕｅｒｙＣｏｎｔｉｎｕｅドラッグ方法を使用して、キーボードキー及びマウスボタンの状態を含むキー状態ベクトルを受け取ることができる。キーボードキーとマウスボタンの状態は、サーバコンポーネント３１６に仮想チャンネル３２１を介して送付することができる。
【０１２０】
サーバコンポーネント３１６（代理ドロップターゲット）は、ドラッグアンドドロップモーダルモードを開始する時期を表示し、アプリケーション３１２が提供することのできるフォーマットのリストを送付し、クライアントコンポーネント３０６から受け取る最新のドロップ効果をアプリケーション３１２に戻し、未処理のドラッグアンドドロップ操作の状態に関してクライアントコンポーネント３０６を更新し、及びドロップが発生する場合はポインタオブジェクト３２６を記憶する構成とすることができる。
【０１２１】
代理データオブジェクト３２８は、ＳＴＡＲＴ＿ＤＲＡＧ＿ＤＲＯＰメッセージを受け取るとき作成することができる。代理データオブジェクト３２８は、オブジェクト３２６が公示するのと同一のフォーマットを戻すことにより、実質的にオブジェクト３２６を模倣する。代理データオブジェクト３２８がデータを要求するとき、それはＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＱＵＥＳＴメッセージをコンピュータシステム３１１に送付する。サーバコンポーネント３１６は次いでオブジェクト３２６からデータを取り出してそのデータをＦＯＲＭＡＴ＿ＤＡＴＡ＿ＲＥＳＰＯＮＳＥメッセージに送り返す。
【０１２２】
したがって、本発明の実施形態は、リモートモジュールからローカルモジュールにオブジェクトをドラッグアンドドロップすることを容易にすることができる。
【０１２３】
本発明は、その精神又は本質的特徴から逸脱することなく他の固有の形で具体化することができる。記述する実施形態はあらゆる観点において単に例示的なものであって限定的なものではないと見なすべきである。したがって、発明の範囲は、前述の内容によってではなく、付属請求項によって示される。請求項の等価の意味及び範囲に入る変更はすべて、請求項の範囲に包含される。
【図面の簡単な説明】
【０１２４】
【図１Ａ】オブジェクトをローカルモジュールからリモートモジュールにドラッグアンドドロップすることを容易にする例示的コンピュータアーキテクチャの一例を示す図である。
【図１Ｂ】ローカルモジュールからリモートモジュールに対するドラッグアンドドロップ操作を描写する例示的デスクトップウインドウを示す図である。
【図２Ａ】オブジェクトをローカルモジュールからリモートモジュールにドラッグアンドドロップするための、例示的方法の流れを示す図である。
【図２Ｂ】オブジェクトをローカルモジュールからリモートモジュールにドラッグアンドドロップするための、例示的方法の流れを示す図である。
【図２Ｃ】オブジェクトをローカルモジュールからリモートモジュールにドラッグアンドドロップするための、例示的方法の流れを示す図である。
【図３Ａ】リモートモジュールからローカルモジュールにオブジェクトをドラッグアンドドロップすることを容易にする例示的コンピュータアーキテクチャの一例を示す図である。
【図３Ｂ】リモートモジュールからローカルモジュールに対するドラッグアンドドロップ操作を描写する例示的デスクトップウインドウを示す図である。
【図４Ａ】リモートモジュールからローカルモジュールにオブジェクトをドラッグアンドドロップするための、例示的方法の流れを示す図である。
【図４Ｂ】リモートモジュールからローカルモジュールにオブジェクトをドラッグアンドドロップするための、例示的方法の流れを示す図である。
【図４Ｃ】リモートモジュールからローカルモジュールにオブジェクトをドラッグアンドドロップするための、例示的方法の流れを示す図である。
【図１Ａ】
2009540428.tif 000003
【図１Ｂ】
2009540428.tif 000004
【図２Ａ】
2009540428.tif 000005
【図２Ｂ】
2009540428.tif 000006
【図２Ｃ】
2009540428.tif 000007
【図３Ａ】
2009540428.tif 000008
【図３Ｂ】
2009540428.tif 000009
【図４Ａ】
2009540428.tif 000010
【図４Ｂ】
2009540428.tif 000011
【図４Ｃ】
2009540428.tif 000012
【手続補正書】
【提出日】平成21年8月18日(2009.8.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて稼働するローカルアプリケーションとクライアントコンポーネントとを備えたコンピュータシステムにおいて、前記クライアントコンポーネントはサーバコンピュータシステムにあるサーバコンポーネントとのターミナルサーバセッションに参加し、ドラッグアンドドロップを使用してオブジェクトをローカルアプリケーションからサーバコンピュータシステムにあるリモートモジュールに転送する方法であって、該方法は、
ローカルアプリケーションウインドウ内からドラッグアンドドロップオブジェクトを選択するユーザ入力を受け付ける処理であって、前記ローカルアプリケーションウインドウは前記ローカルアプリケーションのためのユーザインタフェースを表す、処理と、
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の外側から内側に移動したことをクライアントコンポーネントが検出する処理と、
未処理のドラッグアンドドロップ操作を示すドロップ通知であって、ドラッグアンドドロップオブジェクトがリモートアプリケーションに転送される旨を示すドロップ通知をクライアントコンポーネントが受け取る処理と、
ｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージの受領に応答して前記サーバコンポーネントが前記リモートアプリケーションへのドラッグアンドドロップモーダルループを開始するように、前記サーバコンポーネントへｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージを前記クライアントコンポーネントが送付する処理と、
ドロップ通知の受領に応答して、デスクトップウインドウカーソルの座標位置と共にドラッグアンドドロップオブジェクトを、ターミナルサーバセッションを介してサーバコンピュータシステムに転送する要求を、クライアントコンポーネントが送付する処理と、
ターミナルサーバセッションを介してサーバコンピュータシステムからクライアントコンポーネントがドラッグアンドドロップオブジェクトに関する要求を受け取る処理と、
ドラッグアンドドロップオブジェクトに関する要求の受領に応答して、リモートアプリケーションの代わりにクライアントコンポーネントが代理ドロップターゲットとして作用することを含む方法であって、
該クライアントコンポーネントが代理ドロップターゲットとして作用することは、
ドラッグアンドドロップオブジェクトに関する要求をローカルアプリケーションに転送する処理と、
ドラッグアンドドロップオブジェクトに関する要求に応答して送付されるローカルアプリケーションからのドラッグアンドドロップオブジェクトを受け取る処理と、
リモートアプリケーションへの引き渡しのために、クライアントコンポーネントが、ターミナルサーバセッションを介してサーバコンピュータシステムに、ドラッグアンドドロップオブジェクトを送付する処理とを含むことを特徴とする方法。
【請求項２】
クライアントコンポーネントがドラッグアンドドロップオブジェクトをローカルアプリケーションから受け取ることができるよう、クライアントコンポーネントを代理ドロップターゲットとして構成する処理を更に含むことを特徴とする請求項１に記載の方法。
【請求項３】
デスクトップウインドウカーソルを変更して、ドラッグアンドドロップオブジェクトが変更されたことを視覚的に示す処理と
を更に含むことを特徴とする請求項１に記載の方法。
【請求項４】
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の外側から内側に移動したことを検出する処理は、デスクトップウインドウカーソルがローカルアプリケーションウインドウの境界の内側からリモートアプリケーションのためのアプリケーションウインドウの境界の内側に移動したことを検出する処理を含むことを特徴とする請求項１に記載の方法。
【請求項５】
未処理のドラッグアンドドロップ操作を示すドロップ通知を受け取るクライアントコンポーネントの処理は、入力装置の上のボタンの状態における変化を検出する処理を含むことを特徴とする請求項１に記載の方法。
【請求項６】
ドラッグアンドドロップオブジェクトをデスクトップウインドウカーソルの座標位置と共にターミナルサーバセッションを介してサーバコンピュータシステムに転送する要求を送付するクライアントコンポーネントの処理は、メッセージをターミナルサーバセッションの仮想チャンネルの上で送付する処理を含むことを特徴とする請求項１記載の方法。
【請求項７】
ドラッグアンドドロップオブジェクトをデスクトップウインドウカーソルの座標位置と共にサーバコンピュータシステムに対しターミナルサーバセッションを介して転送する要求を送付するクライアントコンポーネントの処理は、リモートデスクトッププロトコルセッションを介してメッセージを送付する処理を含むことを特徴とする請求項１記載の方法。
【請求項８】
クライアントコンポーネントがＳｔａｒｔ  Ｄｒａｇ  Ｄｒｏｐ応答を受け取る処理をさらに含むことを特徴とする請求項１記載の方法。
【請求項９】
コンピュータシステムにおいて稼働する１または２以上のリモートアプリケーションとサーバコンポーネントとを備えたコンピュータシステムにおいて、前記サーバコンポーネントはクライアントコンピュータシステムにあるクライアントコンポーネントとのターミナルサーバセッションに参加し、コンピュータシステムにおいて稼働する１または２以上のリモートアプリケーションは、ターミナルサーバセッション上でクライアントコンピュータシステムにより遠隔にアクセスされるよう構成され、ドラッグアンドドロップを使用して、クライアントコンピュータシステムにあるモジュールから１または２以上のリモートアプリケーションのうち１つに対し、オブジェクトを転送する方法であって、該方法は、
ｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージの受領に応答して、サーバコンポーネントがリモートアプリケーションへのドラッグアンドドロップモーダルループを開始するように、サーバコンポーネントがクライアントコンポーネントからｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージを受け取る処理と、
サーバコンポーネントが、ドラッグアンドドロップオブジェクトをコンピュータシステム転送する要求とクライアントコンピュータシステムにおけるデスクトップウインドウカーソルの位置を示す座標位置とを受け取る処理であって、前記要求および座標位置はターミナルサーバセッションを介して送付される、処理と、
サーバコンポーネントが、前記座標位置に相当するリモートアプリケーションにドラッグアンドドロップオブジェクト転送通知を転送する処理と、
サーバコンポーネントが、ドラッグアンドドロップオブジェクトを転送する要求の受領に応答して、クライアントコンピュータシステムでアプリケーションの代わりの代理ドロップソースとして作用する処理であって、サーバコンポーネントが、リモートアプリケーションからのドラッグアンドドロップオブジェクトの要求を受け取る処理を含む、処理と、
サーバコンポーネントが、ターミナルサーバセッションを介してクライアントコンピュータへドラッグアンドドロップオブジェクトに関する要求を転送する処理と、
サーバコンポーネントが、ターミナルサーバセッションを介してクライアントコンポーネントからドラッグアンドドロップオブジェクトを受け取る処理と、
ドラッグアンドドロップオブジェクトをリモートアプリケーションに送付するサーバコンポーネントを含むドラッグアンドドロップオブジェクトの受領に応答してクライアントコンピュータシステムにおけるアプリケーションの代わりの代理ドロップソースとして作用する処理と
を含むことを特徴とする方法。
【請求項１０】
クライアントコンピュータシステムにおけるデスクトップウインドウカーソルの位置を示すコンピュータシステムおよび座標位置にドラッグアンドドロップオブジェクトを転送する要求を受け取るサーバコンポーネントの処理は、ターミナルサーバセッションの仮想チャンネルを介してメッセージを受け取る処理を含むことを特徴とする請求項９に記載の方法。
【請求項１１】
代理オブジェクトを作成してドラッグアンドドロップオブジェクトが公示するフォーマットを模倣する処理を更に含むことを特徴とする請求項９に記載の方法。
【請求項１２】
サーバコンポーネントを代理ドロップソースとして構成し、サーバコンポーネントがドラッグアンドドロップオブジェクトをリモートアプリケーションに対して提供することができるようにする処理を更に含むことを特徴とする請求項９に記載の方法。
【請求項１３】
コンピュータシステムにおいて稼働するローカルアプリケーションとクライアントコンポーネントとを備えたコンピュータシステムにおいて、前記クライアントコンポーネントはサーバコンピュータシステムにあるサーバコンポーネントとのターミナルサーバセッションに参加し、ドラッグアンドドロップを使用して、オブジェクトをサーバコンピュータシステムにあるリモートモジュールからローカルアプリケーションに対して転送する方法であって、該方法は、
リモートアプリケーションのためのアプリケーションウインドウ内からドラッグアンドドロップオブジェクトを選択するユーザ入力を受け取る処理であって、前記アプリケーションウインドウはクライアントコンピュータシステム上のリモートアプリケーションについてユーザインタフェースを表す、処理と、
デスクトップウインドウカーソルが前記リモートアプリケーションのための前記アプリケーションウインドウの境界の内側から外側に移動されたことをクライアントコンポーネントが検出する処理と、
デスクトップウインドウカーソルが前記リモートアプリケーションのための前記アプリケーションウインドウの境界の内側から外側に移動されたことをサーバコンポーネントに対して通知するメッセージを、ターミナルサーバセッションを介してサーバコンポーネントにクライアントコンポーネントが送付して、前記メッセージに応答して前記サーバコンポーネントがドラッグアンドドロップオペレーションに対応するマウスの動きを決定するようにした処理と
前記クライアントコンポーネントがｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージを前記サーバコンポーネントから受領し、応答して前記クライアントコンピュータシステム上でドラッグアンドドロップモーダルループを開始する処理と、
ドラッグアンドドロップオブジェクトに関する要求の受領に応答してリモートアプリケーションの代わりに代理ドロップソースとしてクライアントコンポーネントが作用する処理であって、ドラッグアンドドロップオブジェクトに関するクエリーをローカルアプリケーションから受け取るクライアントコンポーネントの処理を含み、そのクエリーは、ドラッグアンドドロップオブジェクトをローカルアプリケーションに対して転送することを表すローカルアプリケーションにおけるドロップ通知を表示する、処理と、
ドラッグアンドドロップオブジェクトに関する要求をクライアントコンポーネントがサーバコンポーネントに送付する処理であって、その要求はターミナルサーバセッションを介してクエリーに応答して送付され、その要求はサーバコンポーネントに対しローカルアプリケーションがドラッグアンドドロップオブジェクトを要求していることを示す、処理と、
ドラッグアンドドロップオブジェクトをサーバコンピュータシステムからターミナルサーバ接続を介して受け取るクライアントコンポーネントの処理と、
ドラッグアンドドロップオブジェクトをローカルコンピュータに送付するクライアントコンポーネントの処理を含め、ドラッグアンドドロップオブジェクトの受領に応答してリモートアプリケーションの代わりにサーバコンポーネントが代理ドロップソースとして作用する処理と
を含むことを特徴とする方法。
【請求項１４】
デスクトップウインドウカーソルがリモートアプリケーションのためのアプリケーションウインドウの境界の内側から外側に移動されたことを検出するクライアントコンポーネントの処理は、デスクトップカーソルウインドウがリモートアプリケーションのためのアプリケーションからローカルアプリケーションのためのローカルアプリケーションウインドウに移動したことを検出する処理を含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
代理オブジェクトを作成してドラッグアンドドロップオブジェクトが公示するフォーマットを模倣する処理を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１６】
クライアントコンポーネントを代理ドロップソースとして構成し、クライアントコンポーネントがドラッグアンドドロップオブジェクトをクライアントコンポーネントに対して提供することができるように構成する処理を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１７】
デスクトップウインドウカーソルを変更して、ドラッグアンドドロップオブジェクトが選択されたことを視覚的に表すこと、
を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１８】
コンピュータシステムにおいて稼働する１または２以上のリモートアプリケーションとサーバコンポーネントとを備えたコンピュータシステムにおいて、前記サーバコンポーネントはクライアントコンピュータシステムにあるクライアントコンポーネントとのターミナルサーバセッションに参加し、前記コンピュータシステムおいて稼働する１または２以上のリモートルアプリケーションは、ターミナルサーバセッションを介してクライアントコンピュータシステムにより遠隔的にアクセスされるよう構成され、ドラッグアンドドロップを使用して、オブジェクトをリモートアプリケーションからクライアントコンピュータシステムにあるモジュールに転送する方法であって、該方法は、
サーバコンポーネントが、クライアントコンポーネントからターミナルサーバセッションを介してメッセージを受け取る処理であって、該メッセージは、デスクトップウインドウカーソルがクライアントコンピュータシステムにおいてリモートアプリケーションと対応するアプリケーションウインドウの境界の内側から外側に移動したことをサーバコンポーネントに通知するメッセージである、処理と、
デスクトップウインドウカーソルの動きが未処理のドラッグアンドドロップ操作に連結することをサーバコンポーネントが判断する処理と、
ｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージの受領に応答して、前記クライアントコンポーネントがドラッグアンドドロップモーダルループを前記クライアントコンピュータシステム上で開始するように、前記サーバコンポーネントがｓｔａｒｔ  ｄｒａｇ  ｄｒｏｐメッセージを前記クライアントコンポーネントに送付する処理と、
ドラッグアンドドロップオブジェクトに関する要求をサーバコンポーネントがクライアントコンポーネントから受け取る処理であって、該要求はクライアントコンピュータシステムにあるアプリケーションからのドラッグアンドドロップオブジェクトに関するクエリーに応じて、ターミナルサーバセッションの上で送付され、該要求はクライアントコンポーネントにあるアプリケーションがリモートアプリケーションからのドラッグアンドドロップオブジェクトを要求していることをサーバコンポーネントに対し通知する、受け取る処理と、
ドラッグアンドドロップオブジェクトに関する要求の受領に応答して、コンピュータシステムにおいてアプリケーションの代わりにサーバコンポーネントが代理ドロップターゲットとして作用することを含む方法であって、
前記サーバコンポーネントが代理ドロップターゲットとして作用することは、
ドラッグアンドドロップオブジェクトに関する要求をリモートアプリケーションに送付する処理と、
ドラッグアンドドロップオブジェクトに関する要求に応じて送付されるリモートアプリケーションからのドラッグアンドドロップオブジェクトを受け取る処理と、
クライアントコンピュータシステムにあるアプリケーションに対する引き渡しのために、ドラッグアンドドロップオブジェクトをサーバコンポーネントがターミナルサーバセッションを介してクライアントコンピュータシステムに対し送付する処理とを含むことを特徴とする方法。
【請求項１９】
サーバコンポーネントを代理ドロップターゲットとして構成して、サーバコンポーネントがドラッグアンドドロップオブジェクトをリモートアプリケーションから受け取ることができるようにする処理を更に含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
サーバコンポーネントがＤｏ  Ｄｒａｇ  Ｄｒｏｐ応答を受け取る処理をさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２１】
ドラッグアンドドロップオブジェクトをクライアントコンピュータシステムに対しターミナルサーバセッションを介して送付するサーバコンポーネントの処理は、ドラッグアンドドロップオブジェクトをリモートデスクトッププロトコルセッションの仮想チャンネルを介してサーバコンポーネントが送付する処理を含むことを特徴とする請求項１８に記載の方法。
【請求項２２】
リモートコンポーネントに対するドラッグアンドドロップモーダルループの開始に応答して、サーバコンピュータシステムにおけるサーバコンポーネントについてウインドウを作成することと、
前記クライアントコンポーネントが、ウインドウがフォーカスを得られるようにサーバコンポーネントに対するウインドウにマウスダウンイベントを送付し、結果として前記サーバコンピュータシステムがコンピュータシステムへの次のマウス入力を受け取る処理とをさらに含むことを特徴とする請求項１に記載の方法。
【国際調査報告】
2009540428.tif 000013
2009540428.tif 000014