主类(可作文档类):

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. java-源码下载

    jdk7 下载: http://download.java.net/openjdk/jdk7/ jdk8 下载: http://download.java.net/openjdk/jdk8/

  2. Collection+JSON 文档

    Collection+JSON 文档 对于这个设计,我们不再以可能的状态和转移为起点,相反,我们将从一个集合状态响应中可能元素的顶层布局开始.从这一点入手,其他细节可以随着设计向超媒体类型最底层属性的 ...

  3. 转载:使用sklearn进行数据挖掘

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...

  4. 删除文件夹工具类 DeleteFolder.java

    package com.util; import java.io.File; /** * 删除文件夹 * @createTime DSC 20, 2010 15:38 * @version 2.0 * ...

  5. MySQL索引背后的数据结构及算法原理 --转

    写在前面的话 在编程领域有一句人尽皆知的法则“程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重 ...

  6. 如何计算oracle数据库内存

    数据库内存设置: 项目 数据关系 单位 系统CPU n 个 物理内存Memory 假设4G物理内存 4*1024 MB memory_target 0.5*4*1024 0.5*Memory sga_ ...

  7. android 工程出现感叹号错误

    android 工程出现感叹号错误: 错误问题分析,曾经导入的jar已经不存在工程目录中,project从其他地方导入时.没有及时更新,比如说svn下载到.project的文件,或者是path的文件. ...

  8. 响应式布局设置--@media only screen and

    @media only screen and  only(限定某种设备) screen 是媒体类型里的一种 and 被称为关键字,其他关键字还包括 not(排除某种设备) /* 常用类型 */类型 解 ...

  9. The word is not correctly spelled问题解决

    今天在做Ant/Xdoclet辅助生成hibernate实体映射文件时,eclipse出现了极其让我郁闷的错误,"The word is not correctly spelled" ...

  10. 虚拟研讨会:如何设计好的RESTful API?

    http://www.infoq.com/cn/articles/how-to-design-a-good-restful-api/ REST架构风格最初由Roy T. Fielding(HTTP/1 ...