[AIR] 利用SnapShot.exe实现QQ截屏功能
主类(可作文档类):
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截屏功能的更多相关文章
- Android自己定义截屏功能,相似QQ截屏
由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...
- c# wpf 利用截屏键实现截屏功能
原文:c# wpf 利用截屏键实现截屏功能 最近做一个wpf程序需要截图功能,查找资料费了一些曲折,跟大家分享一下. 先是找到了这样一份代码: static class Scr ...
- 达到工业使用质量级别的类似于QQ截屏的软件
到网上查找截屏发现基本都是一些小孩子的初级玩意,功能强大一点的又没有源代码所以自己花了三四天时间写了一个能达到工业使用质量级别的截图控件. 优点:1.代码量小只有1500行代码 2.结构清晰简单极易于 ...
- Atitit截屏功能的设计解决方案
Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,, 复制 ...
- android4.3 截屏功能的尝试与失败分析
1.背景 上一篇讲了在源码中捕获到了android手机的截屏函数(同时按下电源键与音量减,详情http://blog.csdn.net/buptgshengod/article/details/199 ...
- 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
3.0的截屏和2.x的截屏基本上同样.都是利用RenderTexture来处理,在渲染之前调用call函数,然后调用Cocos的场景visit函数对其进行渲染,渲染结束后调用end函数就可以.仅仅是3 ...
- PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- iOS截屏功能
代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...
- 使用laravel框架与phantomjs实现截屏功能
在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...
随机推荐
- PHP 堆排序实现
在<算法: C语言实现>上看到的写法,很简洁,用PHP实现一把. <?php /* fixDown实现对某一个节点的向下调整,这里默认的是起始节点为1,方便计算父子节点关系 注: 起 ...
- 用一条UPDATE语句交换两列的值
在SQL UPDATE语句中,"="右侧的值在整个UPDATE语句中都是一致的,所有更新同时发生!因此以下语句将在没有临时变量的情况下交换两列的值: UPDATE table SE ...
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
- linux概念之IPC
一切皆文件,文件类型为普通,目录,管道,socket,链接,块设备,字符设备cd /proc/2305/fd/ 该进程打开了6个文件描述符,三个为字符设备即012,三个为socket即345,sock ...
- OpenJudge计算概论-求平均年龄
/*============================================== 求平均年龄 总时间限制: 1000ms 内存限制: 65536kB 描述 班上有学生若干名,给出每名学 ...
- 【转】php curl 伪造IP来源的实例代码
curl发出请求的文件fake_ip.php: 代码 复制代码 代码如下: <?php $ch = curl_init(); $url = "http://localhost/targ ...
- html之p标签
p标签定义段落 p元素会自动在其前后创建一些空白,浏览器会自动添加这些空间. 效果图:
- java中的包装类与装箱拆箱定义
JAVA 中int类型转String类型的通常方法,有三种: 1.String.valueOf(int i) 2.Integer.toString(int i) 3.i+"" ...
- sql查询重复记录并取对应最小值
原表(aa): id a b 1 22 456 2 22 256 ...
- MySQL5.7.13源码编译安装指南(转)
系统 CenterOs 6.5 1.安装依赖包(cmake make gcc等,其实好多都有了,不需要更新,为了防止世界被破坏,就装下) yum install gcc gcc-c++ -yyum i ...