0

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

我在 Internet 上尝试了许多解决方案,但它们都不起作用,而且有关剪贴板的文档通常已经过时。

我是否遗漏了什么,或者 Adob​​e 的标志颜色源于社会主义?

4

2 回答 2

1

flash.desktop.Clipboard上课呢。这应该是您访问剪贴板的方式。该类从 Flash Player 10 开始可用。使用Clipboard该类,您可以以多种预定义格式从系统剪贴板读取数据并将数据写入系统剪贴板。查看Clipboard 类的 API 文档以获取有关它的详细信息。

于 2012-09-01T15:14:16.083 回答
0

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

在 Flash 中粘贴是用户启动的操作之一。它必须通过右键单击并Paste从内置上下文菜单中选择或按下CTRL+V组合键(在 Windows 上)来启动,当InteractiveObject(除外TextField)处于焦点时。

如果满足这些要求,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这将使上下文菜单中的选项变灰。

于 2014-12-09T23:42:51.027 回答