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://www.cnblogs.com/loveFlex/archive/2013/05/15/3080322.html