[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 ...
随机推荐
- how-to-install-hyper-v-on-a-virtual-machine-in-hyper-v.aspx
BEFORE STARTING IT IS IMPORTANT TO KNOW THAT THIS ENVIRONMENT IS NOT SUPPORTED BY MICROSOFT. USE IT ...
- node-webkit 应用打包发布
方便进行打包,使用了nodejs ,gulp nw-builder 备注 windows 操作系统部分版本需要包含 msvcr100.dll 建议制作安装程序的时候直接包含 为了进行视频以及 ...
- Python报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
解决办法: 在报错的页面添加代码: import sys reload(sys) sys.setdefaultencoding('utf8')
- Mysqldump参数大全(转)
参数 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y ...
- Android 中Fragment使用
Android 中Fragment使用 public class MainActivity extends Activity { public static String[] array = { &q ...
- javascript util.js
//根据Id获得页面元素 function $(para) { return document.getElementById(para);} //创建一个新的元素function createE ...
- [activiti] Activiti 5.18 的Mybatis版本依赖问题
测试activiti 是查询Task时抛出一个异常: org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat ...
- VBA excel中表示列的字母换成数字
出自这里 数字转列标: Split(Cells(1,).Address(1,0),"$")(0) '将1-256替换红色的1就可以 Cells(1, a) 选中对应的第一行第 ...
- Struts2 - Action no cache
整了两天,终于找到一个比较满意的答案了:如何让action不被浏览器缓存 写一个interceptor: package com.my.interceptor; import javax.servle ...
- SPOJ #5 The Next Palindrome
"not more than 1000000 digits" means an efficient in-place solution is needed. My first so ...