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

原文地址:https://www.cnblogs.com/loveFlex/p/3080322.html