[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快速排序及其时间复杂度
<?php function quickSort(&$arr, $l, $r) { if (count($arr)<2 || $l>$r) return; $tmp_l = ...
- Externalizable接口 序列化
Java默认的序列化机制非常简单,而且序列化后的对象不需要再次调用构造器重新生成,但是在实际中,我们可以会希望对象的某一部分不需要被序列化,或者说一个对象被还原之后, 其内部的某些子对象需要重新创建, ...
- Amazon后台登陆以及跟卖
亚马逊模拟登陆,这里使用的是selenium来登陆,并判断是否登陆成功,以及是否有验证码,并破解验证码登陆. 跟卖主要解决的难题是selenium的新窗口弹出问题,在 # 点击“出售您的” brows ...
- json字符串转map
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</ar ...
- openstack(liberty): devstack中的iniset/iniget函数分析
这个ini开头的函数在devstack的启动配置中用的非常多,他主要负责.ini文件的配置,这个过程包括对相关ini文件的添加,注释,删除,获取信息,多行信息获取等. 这里主要说的iniset和ini ...
- [转]谈谈select, iocp, epoll,kqueue及各种网络I/O复用机制
参考原文:再谈select, iocp, epoll,kqueue及各种I/O复用机制 一.I/O模型概述 介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking ...
- 【虚拟化】支持IDE/SATA/SCSI
驱动说明 IDE :IDE和SATA是最常用的两种磁盘格式,基本每个系统上都会有: SATA:同IDE: SCSI :系统上一般缺少此驱动,需要手动安装: Linux下的名称 IDE硬盘:hd[ ...
- 【phantomjs】使用phantomjs生成highChart的图片(待完善)
阅读目录 //center }, subtitle: { text: 'Source: WorldClimate.com', x: -20 }, xAxis: { categories: ['Jan' ...
- 使用Cyclone IV控制DDR2
根据你的DDR2手册配置好megacore,megacore会生成一个example top: 在quartus中运行megacore生成的xxx_pin_assignments.tcl,指定DDR2 ...
- 激活Maven profile的几种方式
首先简单介绍下 Maven 的 profile 是什么.对于人来说,profile 是指人的肖像,轮廓,比如论坛里每个人注册了帐号后,可以设置自己的 profile,放上照片,介绍等等.对于 Mave ...