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

SilverlightのクリップボードAPI

SilverlightのクリップボードAPI

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

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

  パブリック静的クラスクリップボード 
{
パブリックstatic BOOLまず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を]
公共の静的な無効クリア();

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

パブリックstatic BOOLのIsCurrent(IDataObjectのデータ);

[] audioBytes); 公共の静的な無効 SetAudio( バイト [] audioBytes);
公共の静的な無効 SetAudio(ストリームaudioStream);
format, object data); 公共の静的な無効にSetData( 文字列形式オブジェクトデータ );
[SecurityCriticalを]
data); 公共の静的な無効はSetDataObject( オブジェクトデータ );
[SecurityCriticalを]
data, bool copy); 公共の静的な無効はSetDataObject( オブジェクトデータ、BOOLコピー );
公共の静的な無効は、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の機能を、それを認識する第1の形式を使用します。 このメソッドは、データがクリップボードにコピーされたときに設定した優先順位に応じて利用可能な最良のフォーマットを選択する。

代わりに、ウィンドウが使えます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を 、カスタム形式/味を可能にし、レンダリングの遅れ/データを約束した
    ありがとう!
      - 寧
      Technoratiのタグ:
      社交的であること、共有して下さい!
      Tags: , , カテゴリー: Silverlightの タグ:
      1. まだコメントはありません。
      1. トラックバックはまだありません。


      1 + 5 =