Actionscript 3获取剪贴板数据(fp 11)

时间:2012-08-11 14:42:10

标签: actionscript-3 security clipboard flash

我想在AS3中获取剪贴板文本(flex,flashdevelop)。我知道我不能只监视剪贴板,因为虽然大多数其他环境都可以,但Flash应用程序是邪恶的,当他们看到密码及其实际所属的帐户时可以猜测。这就是为什么我听一个MouseEvent.CLICK事件,但看起来它最近改变了,Flash仍然说“不,不!”。这就是我将addEventListener(Event.Paste)添加到TextField的原因,但看起来像TextField没有调度这样的事件。

我在互联网上尝试了很多解决方案,但它们根本不起作用,关于剪贴板的文档经常过时。

我是否会遗漏某些东西,或者Adobe的徽标颜色是否具有社会主义的根源?

2 个答案:

答案 0 :(得分:1)

flash.desktop.Clipboard班怎么样?这应该是您访问剪贴板的方式。该类在Flash Player 10之后可用。使用Clipboard类,您可以以多种预定义格式读取数据并将数据写入系统的剪贴板。查看API documentation of Clipboard class以获取有关它的详细信息。

答案 1 :(得分:0)

多年以后,我偶然发现了自己的问题来回答它。

在Flash中粘贴User Initiated Actions之一。必须通过右键单击并从内置上下文菜单中选择Paste或按CTRL+V组合(在Windows上),InteractiveObjectTextField除外)来启动它是焦点。

如果满足这些要求,则会调度Event.PASTE,并且在侦听器中您可以访问Clipboard.getData()方法。

只留下一件事,并带我到这里寻找解决方案:当剪贴板中没有任何内容时,如何在自定义上下文菜单中禁用Paste按钮?似乎只有一个解决方案 - 定期检查Clipboard.generalClipboard.formats.length

package simpletests 
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.utils.Timer;

public class PasteTest extends Sprite
{
    private var cont:ContextMenu;

    public function PasteTest() 
    {
        cont = new ContextMenu ();
        cont.hideBuiltInItems ();
        cont.clipboardMenu = true;

        var timer:Timer = new Timer ( 100 );

        this.contextMenu = cont;        
        stage.focus = stage;

        timer.start ();

        timer.addEventListener ( TimerEvent.TIMER, onTimer );
        stage.addEventListener ( FocusEvent.FOCUS_OUT, onFocusOut );
        stage.addEventListener (Event.PASTE, onPaste );
    }

    private function onTimer ( e:TimerEvent ):void
    {
        cont.clipboardItems.paste = Clipboard.generalClipboard.formats.length;
    }

    private function onPaste ( e:Event ):void
    {
        trace ( Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) );
    }

    private function onFocusOut ( e:FocusEvent ):void
    {
        stage.focus = stage;
    }

}
}

如果要清除剪贴板以进行测试,可能会发现错误的解决方案,例如执行如下命令:%windir%\System32\cmd /c "echo off | clip"。它将空字符串放入剪贴板,并且不禁用上下文菜单中的“粘贴”选项。而是(在Windows中)剪切和粘贴文件。这将使上下文菜单中的Paste选项变灰。