主类(可作文档类):

package
{
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.text.TextField; /**
* @author: Frost.Yen
* @E-mail: 871979853@qq.com
* @create: 2016-5-6 上午9:57:53
*
*/
[SWF(width="800",height="600")]
public class ScreenShot extends Sprite
{
private var _snapShot:SnapShot;
private var _button:TextField;
private var _text:TextField;
private var _container:Sprite;
public function ScreenShot()
{
_container = new Sprite();
_button = textButton(" click me to shot! ");
_text = textButton(" CTRL+ALT+A 也可以截屏 ");
_snapShot = new SnapShot();
_button.x = stage.stageWidth-_button.width-10;
_button.y = stage.stageHeight-_button.height-10;
_text.x = _button.x - _text.width - 10;
_text.y = _button.y;
_snapShot.addEventListener(Event.COMPLETE,onShotComplete);
_button.addEventListener(MouseEvent.CLICK,onShot);
this.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
this.addChild(_container);
this.addChild(_button);
this.addChild(_text);
}
private function onShot(e:MouseEvent):void
{
_snapShot.start();
}
private function onShotComplete(e:Event):void
{
if(_container.numChildren){
(_container.getChildAt(0) as Bitmap).bitmapData.dispose();
_container.removeChildAt(0);
}
_container.addChild(_snapShot.bitmap);
}
private function onKeyDown(e:KeyboardEvent):void
{
if (e.altKey && e.ctrlKey && e.keyCode == 65) {
_snapShot.start();
}
}
private function textButton(text:String=""):TextField
{
var button:TextField = new TextField();
button.autoSize = "center";
button.text = text;
button.selectable = false;
button.border = true;
return button;
}
}
}

用于截屏的类

package
{
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NativeProcessExitEvent;
import flash.filesystem.File; /**
* @author: Frost.Yen
* @E-mail: 871979853@qq.com
* @create: 2016-5-6 上午10:00:29
* 截屏后生成图片
*/
public class SnapShot extends EventDispatcher
{
private var _file:File;
private var _nativeProcessStartupInfo:NativeProcessStartupInfo;
private var _nativeProgress:NativeProcess;
private var _bitmapData:BitmapData;
private var _bitmap:Bitmap;
private var _completeEvent:Event;
public function SnapShot(target:IEventDispatcher=null)
{
super(target);
_file = File.applicationDirectory.resolvePath("ExtendApplication/SnapShot.exe"); /**
* 此类提供了用于启动主机操作系统上的进程的基本信息。构建该类并将其传递给 NativeProcess 对象的 start() 方法。
*/
_nativeProcessStartupInfo = new NativeProcessStartupInfo(); /**
* 如果指定的值是 null、如果它引用一个目录或引用一个不存在的文件。
*/
_nativeProcessStartupInfo.executable = _file; /**
* NativeProcess 类提供命令行集成和常规启动功能。
* NativeProcess 类允许 AIR 应用程序在主机操作系统上执行本机进程。
* AIR 应用程序可以监视进程的标准输入 (stdin) 和标准输出 (stdout) 流以及进程的标准错误 (stderr) 流。
*/
_nativeProgress = new NativeProcess();
_completeEvent = new Event(Event.COMPLETE);
}
public function start():void
{
/**
*启动由指定的启动信息标识的本机进程。进程启动后,所有输入流和输出流将打开。
* 在请求操作系统启动指定的进程后,此方法将立即返回。如果进程当前正在运行,
* NativeProcess 对象会引发 IllegalOperationError 异常。如果 NativeProcess
* 对象的 running 属性返回 true,则表示此进程正在运行。如果操作系统无法启动进程,
* 会引发 Error。
*/
_nativeProgress.start(_nativeProcessStartupInfo);
/**
* 退出进程时,由 NativeProcess 对象调度此事件。可能会永不调度此事件。例如,
* 如果子进程的运行时间比创建它的 AIR 应用程序运行时间长,则不会调度此事件。
*/
_nativeProgress.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;
_bitmap = new Bitmap(_bitmapData);
dispatchEvent(_completeEvent);
}
}
public function get bitmap():Bitmap
{
return _bitmap;
}
}
}

注意:

在工程的配置 工程名称-app.xml上加上如下代码
<supportedProfiles>extendedDesktop</supportedProfiles>
添加的位置可以为如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/17.0">
<supportedProfiles>extendedDesktop</supportedProfiles>

[AIR] 利用SnapShot.exe实现QQ截屏功能的更多相关文章

  1. Android自己定义截屏功能,相似QQ截屏

    由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...

  2. c# wpf 利用截屏键实现截屏功能

    原文:c# wpf 利用截屏键实现截屏功能     最近做一个wpf程序需要截图功能,查找资料费了一些曲折,跟大家分享一下.     先是找到了这样一份代码:     static class Scr ...

  3. 达到工业使用质量级别的类似于QQ截屏的软件

    到网上查找截屏发现基本都是一些小孩子的初级玩意,功能强大一点的又没有源代码所以自己花了三四天时间写了一个能达到工业使用质量级别的截图控件. 优点:1.代码量小只有1500行代码 2.结构清晰简单极易于 ...

  4. Atitit截屏功能的设计解决方案

    Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,,  复制 ...

  5. android4.3 截屏功能的尝试与失败分析

    1.背景 上一篇讲了在源码中捕获到了android手机的截屏函数(同时按下电源键与音量减,详情http://blog.csdn.net/buptgshengod/article/details/199 ...

  6. 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成

    3.0的截屏和2.x的截屏基本上同样.都是利用RenderTexture来处理,在渲染之前调用call函数,然后调用Cocos的场景visit函数对其进行渲染,渲染结束后调用end函数就可以.仅仅是3 ...

  7. PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...

  8. iOS截屏功能

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...

  9. 使用laravel框架与phantomjs实现截屏功能

    在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...

随机推荐

  1. linux服务之openldap

    http://www.openldap.org/ http://blog.csdn.net/chinalinuxzend/article/details/1870656 OpenLDAP学习笔记 ht ...

  2. unity shader random number

    http://gamedev.stackexchange.com/questions/32681/random-number-hlsl

  3. asp.net中Cookie的用法【转】

    比如建立一个名为aspcn,值为灌水小鱼的cookie HttpCookie cookie = new HttpCookie["aspcn"];cookie.Value = &qu ...

  4. html之dl标签

    用来定义列表之用 通常与dt:定义列表中的项目 dd:描述列表中的项目 示例代码: <dl> <dt>数据库</dt> <dd>oracle</d ...

  5. redis操作

    测试环境redis操作 cd /export/servers/redis-2.8.9/src/./redis-cli -n 0 keys keys(pattern):返回满足给定pattern的所有k ...

  6. Oralce开窗函数OVER()的一些应用

    好久没用oracle了,发现很多东西已经忘记.正好今天改写个语句,顺便回忆了一下,乘热整理以备遗忘. over(order by salary) 按照salary排序进行累计,order by是个默认 ...

  7. php 同步因子的并发处理

    在php中,如果处理支付时,会涉及到并发. 具体体现在同步通知支付结果和异步通知结果. 拿支付宝来说,同步通知call_back和异步通知notify是没有固定先后顺序的. 有可能notify先通知到 ...

  8. openstack(liberty): devstack之screen

    在devstack的stack.sh文件中,可以看到所有配置的service启动方式有两种,根据是否USE_SCREEN进行是在screen window中启动,还是直接起. 默认情况,USE_SCR ...

  9. JS request函数 用来获取url参数

    function request(strParame) { var args = new Object( ); var query = location.search.substring(1); va ...

  10. quotas and disk replace on netapp

    ==================================================================================================== ...