ホーム > シルバー >シルバークリップボードAPI

SilverlightのクリップボードAPI

SilverlightでクリップボードAPI

Silverlightの4は、クリップボードのサポートを追加します。 でのスコット·ガスリーとブライアン·ゴールドファーブによる素晴らしいデモが今日チェックアウトPDC Silveilght4クリップボードのサポートによって可能にシナリオを披露。

SilverlightのクリップボードAPIは、WPFののサブセットであるクリップボード API:

  パブリック静的クラスクリップボード 
{
パブリック静的ブール ContainsText();
パブリック静的文字列gettextの ();
text); パブリック静的な無効 SetTextによって( 文字列テキスト );
}

これは、システムのクリップボードから/へコピー/ペーストUnicode文字列を可能にする。 GetTextはとSetTextによっては、成功するために、次のいずれかが必要です。

  1. 呼び出しSilverlightアプリケーションは、高い信頼アプリケーションです、または
  2. それは、ユーザーが開始し、ユーザー補助金のクリップボードへのアクセスです

第二のケースでは、はgettextもしくはSetTextによっては、最初にユーザーが開始し、イベント処理に呼び出されたときに、Silverlightは、以下の1(UIはRTWで変更される可能性が)のようなダイアログがポップアップ表示されます:

    Clipboard Prompt
    ユーザーが[はい]をクリックすると、Silverlightはこれを許可し、後でGetTextは/ SetTextによっては、このセッション中に、このアプリケーションのために成功するために呼び出します。 ユーザーが[いいえ]をクリックした場合、デフォルトでは、Silverlightは投げませんSecurityExceptionを 別の言葉では、設定が両方を取得し、システムクリップボードへのアクセスを設定するために、セッションごと、アプリケーションごとであり、それは保持されません。

JavaScriptとWPFでクリップボードAPI

私たちは、SilverlightのクリップボードAPIを設計しながら、多くの要因を考慮する必要があります。 我々は、JavaScriptのセキュリティのレッスンを研究し、WPFと互換性を持つようにしようとする必要があるためその中でも、JavaScriptとWPFのクリップボードAPIは、特に興味深い。

交差ブラウザ、クリップボードへのアクセスのためのクロスプラットフォームのJavaScript APIはありません。 IEは提供は、clipboardDataのシステムクリップボード内の設定/取得/クリアの文字列を可能にするオブジェクトを:

bResult = window.clipboardData.setData(sDataFormat、です。sData);

です。sData = window.clipboardData.getData(sDataFormat);

bResult = window.clipboardData.clearData([sDataFormat]);

sDataFormatは「テキスト」または「URL」の文字列定数である、SDATAが文字列で、bResultはブールです。

clipboadDataオブジェクトが最初にアクセスされたときは、IEは、スクリプトがクリップボードへのアクセスを許可するようにユーザーに要求されます、との設定はセッションのみ有効です。

WPFのクリップボードAPIは、経由してより多くのおよび拡張可能なデータ形式をサポートしてのIDataObject 、テキスト、画像、オーディオ、などが一般的なフォーマットのためのヘルパー関数を持っていfiledrop

  パブリック静的クラスクリップボード 
{
[SecurityCritical]
パブリック静的な無効クリア();

パブリック静的ブール ContainsAudio();
format); パブリック静的ブール ContainsData( 文字列形式 );
パブリック静的ブール ContainsFileDropList();
パブリック静的ブール ContainsImage();
パブリック静的ブール ContainsText();
パブリック静的ブール ContainsText(TextDataFormat形式)。
パブリック静的ストリームGetAudioStream();
format); パブリック静的オブジェクトのGetData( 文字列形式 );
[SecurityCritical]
パブリック静的のIDataObject GetDataObject();
パブリック静的 StringCollection GetFileDropList();
パブリック静的たBitmapSourceのGetImage();
パブリック静的文字列gettextの ();
パブリック静的文字列gettextの (TextDataFormat形式)。

パブリック静的ブール IsCurrent(のIDataObjectデータ);

[] audioBytes); パブリック静的ボイド SetAudio( バイト [] audioBytes);
パブリック静的ボイド SetAudio(ストリームaudioStream);
format, object data); パブリック静的ボイド SetDataメソッド( 文字列形式オブジェクトデータ );
[SecurityCritical]
data); パブリック静的ボイド SetDataObject( オブジェクトデータ );
[SecurityCritical]
data, bool copy); パブリック静的ボイド SetDataObject( オブジェクトデータブールコピー);
パブリック静的ボイド SetFileDropList(StringCollection fileDropList);
パブリック静的な無効にsetImage(たBitmapSourceイメージ);
text); パブリック静的な無効 SetTextによって( 文字列テキスト );
text, TextDataFormat format); パブリック静的な無効 SetTextによって( 文字列テキスト 、TextDataFormat形式)。
}

WindowsとMac OS XのクリップボードAPI

SilverlightのクリップボードAPIは、最終的に基礎となるオペレーティングシステムのクリップボードのAPIの上に実装されています。 WindowsのクリップボードAPIは 、MSDNで文書化され、抜粋、クリップボードのデータを取得/設定する方法の概要を説明します下:

カットとコピー操作

クリップボードに情報を配置するには、ウィンドウが最初に使用して、以前のクリップボードの内容クリアするEmptyClipboardの機能を。 この関数は、送信しWM_DESTROYCLIPBOARDの 、以前のクリップボードの所有者にメッセージをクリップボード上のデータに関連付けられたリソースを解放し、オープンクリップボードを持つウィンドウにクリップボードの所有権を割り当てます。 クリップボードを所有するウィンドウを調べるには、呼び出しGetClipboardOwnerの機能を。

クリップボードを空にした後、できるだけ多くのクリップボード形式でクリップボード上のウィンドウの場所データは、少なくとも説明的に最も記述的なクリップボード形式から注文した。 各フォーマットのために、ウィンドウを呼び出しSetClipboardDataのフォーマット識別子とグローバルメモリハンドルを指定して、関数を。 メモリハンドルは、ウィンドウがリクエストに応じてデータをレンダリングことを示す、NULLにすることができます。 詳細については、 遅延レンダリングを

ペースト操作

クリップボードからのペースト情報を取得するには、ウィンドウが最初に取得するためのクリップボード形式を決定します。 一般的に、ウィンドウは使用して、使用可能なクリップボード形式を列挙しEnumClipboardFormatsの機能を、それが認識して最初の形式を使用しています。 このメソッドは、データがクリップボードに配置されたときに設定した優先順位に従って利用可能な最良のフォーマットを選択する。

また、ウィンドウは使用することができますGetPriorityClipboardFormatの機能を。 この関数は、指定された優先度に応じて利用可能な最善のクリップボード形式を識別します。 唯一のクリップボード形式を認識するウィンドウは、単純にその形式が使用することにより利用可能であるかどうかを判断できIsClipboardFormatAvailable機能を。

使用するクリップボードフォーマットを決定した後、ウィンドウを呼び出しGetClipboardDataの機能。 この関数は、指定された形式でデータを含むグローバルメモリオブジェクトへのハンドルを返します。 ウィンドウには、簡単にデータを調べたり、コピーするために、メモリオブジェクトをロックすることができます。 しかし、ウィンドウは、オブジェクトを解放するか、長時間のロックされたままにしておくべきではありません。

今のところ、SilverlightのクリップボードAPIはサポートされていCF_UNICODETEXTのクリップボードへの/からのコピー/ペーストUnicodeテキストの書式を。

Mac OS Xは使用してペーストボードマネージャを それはで文書化されているMacのデベロッパーセンター (追加されたAPIを使用した)抜粋の下に概要を説明します:

コピーアプリケーションは、ペーストボードにコピーまたは切り取ったデータを配置するための責任があります:

  1. ユーザーは、いくつかのデータを選択し、コピー(またはカット)メニュー項目を起動します。

  2. アプリケーションが既にクリップボードペーストボードへの参照を持っていない場合、1つの(作成PasteboardCreate )。

  3. アプリケーションは、ペーストボードの所有権を取得し、現在のコンテンツ(クリアしPasteboardClearを )。

  4. アプリケーションは、選択したデータにアイテムIDを割り当てます。

  5. すべてのデータが約束される場合は、アプリケーションが約束したデータ(供給する約束キーパーコールバック関数を登録する必要がありPasteboardSetPromiseKeeperを )。

  6. アプリケーションは、実際の味データや各フレーバー(との約束のどちらかを含め、ペーストボードに各項目の1つ以上のフレーバーを追加しますPasteboardPutItemFlavor )。

受信側アプリケーションは、貼り付けアクションを処理するタスクのわずかに異なるセットがあります:

  1. アプリケーションがアクティブになると、それはペーストボードが(変更されているかどうかをチェックしPasteboardSynchronize )。 そうであれば、ペーストに味のリストを取得する。 任意の香料アプリケーションがサポートがある場合には、その貼り付けメニュー項目を有効にすることができる。

  2. ユーザーが貼り付け]メニュー項目を呼び出します。

  3. アプリケーションは、それがサポートするのフレーバーペーストボード上のアイテム(またはアイテム)を要求 ( PasteboardGetItemCount , PasteboardGetItemIdentifier , PasteboardCopyItemFlavors , PasteboardCopyItemFlavorData ).

  4. 貼り付けられたデータをファイルとして保存する場合、受信側アプリケーションは、任意のフレーバーデータを要求する前にペーストの場所を設定する必要がある。 それ以外の場合は、受信側アプリケーションは、ペーストデータが約束されたかどうかを心配する必要はない。

コピーアプリケーションの約束キーパーが呼び出されると、コールバックは、次の操作を行う必要があります。

  • データをファイルとして保存する場合、受信側アプリケーションによって指定されたペーストの位置を決定する。

  • 生成または他の方法で転送するために約束したデータを準備する。

  • 約束されたデータをファイルとして保存することがされていない場合、ペーストボードに風味やデータを追加する。 それ以外の場合は、指定されたファイルの場所に約束したデータを転送する。

アプリケーションの終了時に、それがもはやペーストボードを必要とするときにいくつかの時間後に、あるいは、アプリケーションがペーストボード参照を解放することはできません。

Windows上のように、SilverlightのクリップボードAPIのみを使用していkPasteboardClipboardkUTTypeUTF16PlainTextコピーをサポートするために、風味を/に/クリップボードからUnicodeテキストを貼り付けます。

フィードバック

私たちは、Silverlightのにクリップボードのサポートを追加し、この単純なAPIで有効になってすべての重要なシナリオを見て興奮している。 私は特に、あなたのフィードバックを聞いてに興味を持っています:

  • SilverlightのクリップボードAPIの設計と実装上のすべてのセキュリティ上の懸念
  • どのように重要なことは、他のデータ·タイプ/フォーマットのサポートを追加することであり、どのような優先順位で
  • それがサポートするように、APIを拡張可能にすることですどのように重要なのIDataObjectをカスタム形式/風味と遅延レンダリングを可能に/データを約束した
    ありがとう!
      -Ning
      Technoratiのタグ:
      共有、社交的に評価する!
      Tags: , , カテゴリー: Silverlightの タグ:
      1. まだコメントはありません。
      1. トラックバックはまだありません。


      9 - = 5