如何使用Adobe flex和动作脚本定期拍摄整个屏幕的屏幕截图

时间:2014-04-09 11:12:32

标签: flex actionscript

如何使用Adobe flex和动作脚本在没有点击事件的情况下定期播放整个屏幕(2到5分钟之间)的屏幕截图。目前我正在使用Mouse_Up事件,然后调用计时器,然后使用不同的名称保存每个图像

 package
{
    import flash.desktop.NativeProcess;
    import flash.desktop.NativeProcessStartupInfo;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageDisplayState;
    import flash.display.StageScaleMode;
    import flash.events.MouseEvent;
    import flash.events.NativeProcessExitEvent;
    import flash.events.TimerEvent;
    import flash.filesystem.File;
    import flash.system.Capabilities;
    import flash.utils.Timer;



    public class Grabber extends Sprite
    {
        private var stageCover:Sprite;
        private var captureRect:Sprite;
        private var sx:Number;
        private var sy:Number;
        private var np:NativeProcess;
        private var npi:NativeProcessStartupInfo;

        public function Grabber()
        {
            super();
            stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            stageCover = new Sprite();
            stageCover.graphics.beginFill(0xFFFFFF, 0.01);
            stageCover.graphics.drawRect(0, 0, Capabilities.screenResolutionX, Capabilities.screenResolutionY);
            addChild(stageCover);

            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);

            captureRect = new Sprite();
            captureRect.graphics.lineStyle(2, 0xFFFFFF);
            addChild(captureRect);

            np = new NativeProcess();
            npi = new NativeProcessStartupInfo();
        }


        private function onTimerComplete( event:TimerEvent):void
        {


            captureRect.graphics.clear();
            var args:Vector.<String> = new Vector.<String>();
            args.push("-l");
            sx =0;
            args.push(sx.toString());
            args.push("-t");
            sy = 0  ;       
            args.push(sy.toString());
            args.push("-r");
            var a:Number = Capabilities.screenResolutionX;
            args.push(a.toString());
            args.push("-b");
            var b:Number= Capabilities.screenResolutionY;
            args.push(b.toString());


            args.push("-out");
            args.push(File.desktopDirectory.nativePath + "/grab.jpeg");
            npi.arguments = args;
            npi.executable = File.applicationDirectory.resolvePath("GrabberCommand.exe");
            np.start(npi);

        }

        private function onMouseUp(event:MouseEvent):void
        {


        var timer:Timer=new Timer( 10*1000*Math.random(),1 );
            timer.addEventListener( TimerEvent.TIMER, onTimerComplete );
            timer.start();



        }

    }
}

XML属性

SystemChrome  none 
Transparent  true
SupportedProfiles  extendedDesktop

1 个答案:

答案 0 :(得分:1)

我之前确实做过类似的事情。

您需要Timer每隔一段时间调用以下函数(无论您喜欢什么时间间隔):

private function captureScreenshots(event:MouseEvent):void
    {
        var imgEnc:IImageEncoder;
        var screenshotArray:Array = new Array();


        if(myView.encodingCombo.selectedItem == "PNG")
    {
        imgEnc = pngEnc; //private const pngEnc:PNGEncoder = new PNGEncoder();
    }
    else
    {
        imgEnc = jpgEnc; //private const jpgEnc:JPEGEncoder = new JPEGEncoder();
    }

    var windowsArray:Array = NativeApplication.nativeApplication.openedWindows;

    for each(var window:NativeWindow in windowsArray)
    {
        if(window && window.stage is IBitmapDrawable)
        {
            var imageSnapshot:ImageSnapshot =  ImageSnapshot.captureImage(window.stage as IBitmapDrawable, 0, imgEnc); 
            screenshotArray.push(imageSnapshot);
        }
    }



    windowsArray = null;
}

然后,您可以使用FileStream将它们写入目录,但这将是一个不同的问题。