首页 > 的Silverlight Silverlight的剪贴板API

Silverlight的剪贴板API

Go to comments 2009年11月18日 ,日 发表评论我要评论

在Silverlight中的剪贴板API

Silverlight 4中添加了剪贴板支持。 由Scott Guthrie和布莱恩戈德法布的惊人演示今天的PDC展示情景Silveilght4剪贴板支持。

Silverlight的剪贴板API是WPF的子集剪贴板 API :

  公共静态类剪贴板 
{
公共静态布尔 ContainsText();
公共静态字符串的getText();
text); 公共静态无效的setText( 字符串文本);
}

它可以复制/粘贴Unicode字符串到/从系统剪贴板。 gettext和的setText需要以下成功:

  1. 调用Silverlight应用程序是一个提升的信任的应用程序,或
  2. 它是用户发起和用户授权剪贴板访问

对于第二种情况,首先在用户启动的事件处理调用GetText的或的setText,Silverlight的弹出一个对话框,如下面的一个(UI可能会改变在RTW):

    Clipboard Prompt
    如果用户单击是,Silverlight将允许这以后GetText的/的setText调用此应用程序在本次会议取得成功,如果没有用户点击,默认情况下,Silverlight会抛出一个 SecurityException 。 换句话说,每个应用程序设置,每节为设置访问系统剪贴板,它是不会被持久化。

JavaScript和WPF中的剪贴板API

我们需要考虑的因素很多,而为Silverlight设计剪贴板API。 其中,JavaScript和WPF的剪贴板API是特别有趣,因为我们需要研究在JavaScript中的安全教训,并尝试与WPF兼容。

有没有跨浏览器,跨平台的JavaScript API剪贴板访问。 IE提供clipboardData对象,允许获取/设置/系统剪贴板中明确字符串:

bResult = window.clipboardData.setData(sDataFormat,SDATA);

SDATA = window.clipboardData.getData(sDataFormat);

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

其中sDataFormat“文本”或“网址”字符串常数,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(byte []的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格式);
}

剪贴板API在Windows和Mac OS X

下面摘录,Silverlight的剪贴板API最终落实Windows的剪贴板API的底层操作系统的剪贴板API的顶部是在MSDN中记载,给出了一个关于如何设置/获取剪贴板数据的概述:

剪切和复制操作

要放置在剪贴板上的信息,一个窗口,首先清除使用以往任何剪贴板的内容 EmptyClipboard功能。 此函数发送WM_DESTROYCLIPBOARD消息到上一个剪贴板所有者,释放与剪贴板上的数据相关资源,并指定剪贴板的所有权的窗口已打开剪贴板。 要找出哪个窗口拥有剪贴板,调用GetClipboardOwner功能。

清空剪贴板后,窗口放在剪贴板上的数据尽可能多的剪贴板格式,从最描述剪贴板格式责令至少描述。 对于每种格式,各窗口调用SetClipboardData函数,指定格式标识符和一个全局内存句柄。 内存句柄为NULL,表明窗口呈现请求的数据。 欲了解更多信息,请参见延迟渲染

粘贴操作

要检索从剪贴板粘贴信息,一个窗口,首先确定要检索的剪贴板格式。 通常情况下,使用一个窗口枚举可用的剪贴板格式的EnumClipboardFormats功能,并使用第一种格式,它承认。 这种方法选择最佳的可用的格式,根据优先级设置时的数据放在剪贴板上。

此外,一个窗口可以使用GetPriorityClipboardFormat的功能。 此功能可识别最好的剪贴板格式,根据指定的优先级。 可以简单地判断一个窗口,只承认一个剪贴板格式,格式是否可使用IsClipboardFormatAvailable功能。

确定使用的剪贴板格式后,一个窗口调用GetClipboardData功能。 该函数返回一个全局内存对象,其中包含指定格式的数据处理。 一个窗口可以简单锁定内存中的对象,以检查或复制的数据。 然而,一个窗口,不应该释放对象或离开它锁定了很长一段时间。

现在,剪贴板API的Silverlight只支持CF_UNICODETEXT复制/粘贴到/从剪贴板Unicode文本格式。

Mac OS X使用纸板经理 据记载Mac开发中心 下面的摘录(API的补充)给出了一个概述:

复制应用程序是负责复制或剪切的数据放置到剪贴板:

  1. 用户可以选择一些数据和调用复制(或剪切)菜单项。

  2. 如果应用程序不已经有一个引用到剪贴板纸板,它创建一个( PasteboardCreate )。

  3. 然后,应用程序需要的纸板的所有权和清除(目前的内容 PasteboardClear) 。

  4. 应用程序分配到选定的数据项ID。

  5. 如果答应任何数据,应用程序必须注册一个承诺门将回调函数来供应的承诺数据( PasteboardSetPromiseKeeper )。

  6. 每个项目的一个或多个口味应用程序添加到剪贴板,包括风味的实际数据或承诺与每个风味( PasteboardPutItemFlavor )。

接收应用程序的任务略有不同,处理的粘贴动作:

  1. 当应用程序变得活跃,它会检查,看看是否已被修改剪贴板( PasteboardSynchronize )。 如果是这样,它获得了纸板口味上市。 如果有任何口味的应用程序支持,它可以使其粘贴“菜单项。

  2. 用户调用粘贴“菜单项。

  3. 应用程序请求的纸板项目(或项目),它支持在口味

  4. 如果粘贴的数据将被存储为一个文件,接收应用程序需要设置在要求任何味道数据之前,粘贴的位置。 在任何其他情况下,接收应用程序并不需要担心粘贴数据是否承诺或不。

如果复制应用程序的承诺门将被称为回调,必须做到以下几点:

  • 如果数据将被存储为文件,确定接收应用程序指定的位置粘贴。

  • 生成或以其他方式准备转让的承诺数据。

  • 如果承诺的数据不被存储为一个文件,添加风味和数据到剪贴板。 否则,承诺数据传输到指定的文件位置。

一段时间后,应用程序退出时,或当它不再需要的纸板,应用程序可以释放纸板参考。

至于在Windows,Silverlight的剪贴板API只使用kPasteboardClipboardkUTTypeUTF16PlainText风味,以支持复制/粘贴到/从剪贴板Unicode文本。

反馈

我们很高兴能够加入到Silverlight,剪贴板支持和看到所有的重要情况,通过这个简单的API启用。 我听到您的反馈感兴趣,尤其是:

  • Silverlight的剪贴板API的设计和实施过任何安全问题
  • 添加支持其他数据类型/格式,以及在什么优先顺序是多么重要
  • 使API扩展,如支持IDataObject的 ,允许自定义格式/风味和延迟渲染/承诺数据是多么的重要
    谢谢!
      标签:
      Tags: , , 分类: Silverlight的 标签:
      1. dileep
        2011年10月2日22:08 | #1

        在OOB模式,我们可以访问剪贴板中的图像,这是一个按Print Screen按键的Keyboard.Please让我知道结果。

        - dileep

      2. 2011年3月10日18:00 | #2

        爱能够粘贴Excel数据。 目前它的工作方式将剥离出在Excel中不显示任何数字。 例如:$ 19.95,显示在Excel中,但基础单元格的值是真的19.949999999 Excel中提供了不错的显示,而不损害基础数据的准确性,但失去了所有与Silverlight中的复制和粘贴... ...我的用户是不是太高兴。 会是好的能够抢在Excel格式的数据或至少Excel中的XML数据格式,所以我可以处理这种情况下,当我们需要。

      3. 尼克灰色
        2010年9月27日18时50分| #3

        我们的业务应用程序需要粘贴图片的支持,请提供

      4. 2009年12月19日,在11:08 | #4

        @米格尔
        指出,感谢反馈!

      5. 2009年12月19日,在11:08 | #5

        _AT_安杰Rusztowicz
        指出,感谢反馈!

      6. 2009年11月29日16时53分| #6

        1对图像的支持

      7. 2009年11月26日0时56分| #7

        支持剪贴板中的文本是一个“必须有”为Silverlight,但剪贴板_image_支持Silverlight的“杀手级功能”,并帮助开发人员对空气,Flash或JavaScript的选择。

        简单的复制/粘贴的截图,表情,照片将彻底改变许多网站,如Flickr,MySpace和论坛。 开发人员将促进Silverlight的普及,如果只使用这个单一的功能,使用无形的闪光单“多个文件上传”功能类似。

        在SL 4补充说,由于摄像头支持,这是明显的下一个步骤(用户可以在屏幕上“复制/粘贴”的截图摄像头指向,但此用户友好的吗?)

      1. 2009年11月26日1时23分| #1
      2. 2009年12月30日8时38 | #2