zoukankan      html  css  js  c++  java
  • Flex【原创】Air调用本地exe文件完成截图功能

    Air调用本地exe文件完成截图功能

     

      这里调用本地exe完成截图功能,主要包括2个知识点:一是如何调用本地exe文件(其实这是桌面平台的本地功能调用的一种,例如除exe调用之外还可以调用python等文件,会在后面文章里面进行讲解)、二是从系统剪贴板取位图数据。

      1. demo结构

      

     

      2. ScreenShot类,封装本地调用接口

    package 
    {
        import flash.desktop.Clipboard;
        import flash.desktop.ClipboardFormats;
        import flash.desktop.NativeProcess;
        import flash.desktop.NativeProcessStartupInfo;
        import flash.display.BitmapData;
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.events.NativeProcessExitEvent;
        import flash.filesystem.File;
        
        public class ScreenShot extends EventDispatcher
        {
            public static const SHOT_COMPLETE:String = "shot_complete";
            private var _shotCompleteEvent:Event = null;
            private var _file:File = null;
            private var _nativeProcessStartupInfo:NativeProcessStartupInfo = null;
            private var _process:NativeProcess = null;
            private var _bitmapData:BitmapData = null;
            
            public function ScreenShot():void
            {
                _file = File.applicationDirectory.resolvePath("SnapShot.exe");
                _nativeProcessStartupInfo = new NativeProcessStartupInfo();
                _nativeProcessStartupInfo.executable = _file;
                _process = new NativeProcess();
                _shotCompleteEvent = new Event(SHOT_COMPLETE);
            }
            
            public function shot():void
            {
                _process.start(_nativeProcessStartupInfo);
                _process.addEventListener(NativeProcessExitEvent.EXIT,onExit); 
            }
            
            private function onExit(e:NativeProcessExitEvent):void
            {
                if (Clipboard.generalClipboard.hasFormat(ClipboardFormats.BITMAP_FORMAT))
                {
                    _bitmapData = Clipboard.generalClipboard.getData(ClipboardFormats.BITMAP_FORMAT) as BitmapData;
                    dispatchEvent(_shotCompleteEvent);
                }
            }
            
            public function get bitmapData():BitmapData
            {
                return _bitmapData ? _bitmapData as BitmapData : null;
            }
            
        }
    }

      3.demo测试类:

    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx"
                           applicationComplete="applicationCompleteHandler(event)">
        <fx:Script>
            <![CDATA[
                import mx.events.FlexEvent;
                private var ss:ScreenShot = new ScreenShot();
                
                protected function applicationCompleteHandler(event:FlexEvent):void
                {
                    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKDown);
                    ss.addEventListener(ScreenShot.SHOT_COMPLETE,onComplete);
                }
                
                protected function openExe_clickHandler(event:MouseEvent):void
                {
                    ss.shot();
                }
                
                private function onKDown(e:KeyboardEvent):void {
                    if (e.altKey && e.ctrlKey && e.keyCode == 65) {
                        ss.shot();
                    }
                }
                
                protected function onComplete(event:Event):void
                {
                    bimg.source = ss.bitmapData;
                }
                
            ]]>
        </fx:Script>
        <s:HGroup>
            <s:Button id="openExe" label="openExe" click="openExe_clickHandler(event)"/>
            <s:BitmapImage id="bimg"/>
        </s:HGroup>
    </s:WindowedApplication>

      

      4. 效果截图

       

       demo源码下载地址:

          https://files.cnblogs.com/loveFlex/FlexAir%E8%B0%83%E7%94%A8%E6%9C%AC%E5%9C%B0exe%E6%96%87%E4%BB%B6.rar

  • 相关阅读:
    【Educational Codeforces Round 101 (Rated for Div. 2) C】Building a Fence
    【Codeforces Round #698 (Div. 2) C】Nezzar and Symmetric Array
    【Codeforces Round #696 (Div. 2) D】Cleaning
    【Codeforces Round #696 (Div. 2) C】Array Destruction
    【Educational Codeforces Round 102 D】Program
    【Educational Codeforces Round 102 C】No More Inversions
    【Good Bye 2020 G】Song of the Sirens
    【Good Bye 2020 F】Euclid's nightmare
    使用mobx入门
    requestAnimationFrame 控制速度模拟setinterval
  • 原文地址:https://www.cnblogs.com/loveFlex/p/3080322.html
Copyright © 2011-2022 走看看