0

AS3 (flex、flashdevelop) でクリップボードのテキストを取得したいと考えています。クリップボードを監視するだけではいけないことはわかっています。他のほとんどの環境では監視できますが、Flash アプリケーションは邪悪であり、パスワードを見たときに、それが実際にどのアカウントに属しているかを推測できるからです。そのため、MouseEvent.CLICK イベントをリッスンしますが、最近変更されたようで、Flash はまだ「いいえ、いいえ!」と言います。そのため、EventListener ( Event.Paste ) を TextField に追加しましたが、TextField がそのようなイベントをディスパッチしていないように見えます。

インターネット経由で多くの解決策を試しましたが、うまくいかず、クリップボードに関するドキュメントは古くなっていることがよくあります。

それとも、アドビのロゴの色は社会主義に根ざしていますか?

4

2 に答える 2

1

flash.desktop.Clipboardクラスはどうですか。これは、クリップボードにアクセスする方法です。このクラスは Flash Player 10 以降で使用できます。このClipboardクラスを使用すると、システムのクリップボードからデータを読み込んだり、いくつかの事前定義された形式でデータをシステムのクリップボードに書き込んだりできます。詳細については、Clipboard クラスのAPI ドキュメントを参照してください。

于 2012-09-01T15:14:16.083 に答える
0

何年も経った後、私は自分自身の質問に出くわしました。

Flash での貼り付けは、ユーザー開始アクションの 1 つです。(を除く) がフォーカスされているときに、右クリックして組み込みのコンテキスト メニューから選択するか、コンビネーション (Windows の場合) をPaste押して開始する必要があります。CTRL+VInteractiveObjectTextField

これらの要件が満たされると、Event.PASTEディスパッチされ、リスナー内でメソッドにアクセスできますClipboard.getData()

1つだけ残っており、解決策を求めてここに私を連れてきました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 に答える