原文:http://bbs.9ria.com/blog-73243-19560.html

最近在做一个东西,需要用到虚拟键盘。刚开始准备用as3开发一套,结果突然想起来windows有个自带的虚拟键盘(osk.exe),而且air是支持调用本地程序的,所以就写了个程序来调用。刚开始直接调用C:/Windows/System32/osk.exe  发现是行不通的,调用的时候会报错。而后想了下,或许osk.exe这个东西更应该是属于bat类型文件,而NativeProcess是不能直接调用bat文件的,要用的话需要先调用cmd,然后给cmd参数来调用osk。试了下,果然行了。



先上代码

package
{
       importflash.desktop.NativeApplication;
       importflash.desktop.NativeProcess;
       importflash.desktop.NativeProcessStartupInfo;
       import flash.display.Sprite;
       importflash.display.StageDisplayState;
       import flash.events.Event;
       import flash.events.MouseEvent;
       import flash.filesystem.File;
       import flash.text.TextField;
       importflash.text.TextFieldType;

       public class VirtualKeyBoard extendsSprite
       {
              private varfile:File;
              private varnativeProcessStartupInfo:NativeProcessStartupInfo;
              private varprocess:NativeProcess;

              private vartextField:TextField;

              public functionVirtualKeyBoard()
              {
                    this.stage.displayState =StageDisplayState.FULL_SCREEN_INTERACTIVE;
                    this.stage.nativeWindow.alwaysInFront = true;

                     process =new NativeProcess();

                     file = newFile();
                    NativeApplication.nativeApplication.autoExit=true;
                    file=file.resolvePath("C:/Windows/System32/cmd.exe");

                     varprocessArg:Vector. = new Vector.();
                    processArg[0] = "/c";// 加上/c,表示是cmd的参数
                    processArg[1] ="C:/Windows/System32/osk.exe";//bat的路径,建议用绝对路径,如果是相对的,可以用File转一下

                    nativeProcessStartupInfo = newNativeProcessStartupInfo();
                    nativeProcessStartupInfo.executable = file;

                    nativeProcessStartupInfo.arguments = processArg;

                     textField= new TextField();
                    textField.width = 300;
                    textField.y = 30;
                    textField.x = 30;
                    addChild(textField);
                    textField.border = true;
                    textField.type = TextFieldType.INPUT;

                    textField.addEventListener(MouseEvent.CLICK,onTextFieldActivateHandler);
              }

              private functiononTextFieldActivateHandler(evt:Event):void
              {
                    if(process.running)return;
                    process.start(nativeProcessStartupInfo);
              }
       }
}

注意下中间 

processArg[0] = "/c";// 加上/c,表示是cmd的参数

processArg[1] ="C:/Windows/System32/osk.exe";//bat的路径,建议用绝对路径,如果是相对的,可以用File转一下

这两行代码就行,是给调用的程序添加参数。

另外,可以把osk.exe拷贝到任何地方使用。

【转】air调用windows自带的虚拟键盘的更多相关文章

  1. C#调用Windows(8/10)自带的虚拟键盘

    以下是调用代码: private const Int32 WM_SYSCOMMAND = 274; private const UInt32 SC_CLOSE = 61536; [DllImport( ...

  2. delphi调用windows自带语音功能

    windows自带语音接口 SAPI.SpVoice, 接口说明如下 https://docs.microsoft.com/en-us/previous-versions/windows/deskto ...

  3. 工作总结:MFC调用Windows自带新建、保存对话框代码

    保存: void CExample17Dlg::OnBnClickedSaveButton() { // TODO: Add your control notification handler cod ...

  4. C# 调用windows api 操作鼠标、键盘、窗体合集...更新中

    鼠标操作window窗体合集...更新中 1.根据句柄查找窗体 引自http://www.2cto.com/kf/201410/343342.html 使用SPY++工具获取窗体   首先打开spy+ ...

  5. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...

  6. [转]Perfmon - Windows 自带系统监测工具

    以下内容转自:http://blog.csdn.net/oscar999/article/details/7918385 ---------------------------分割线--------- ...

  7. 善于 调用Windows API

    前一段时间看见别人做的一个自动填写信息并且点击登录的程序,觉得很有意思. 其实就是在程序中调用Windows的API,那么如何调用,下面就做个简单的介绍. 写的简单粗暴, 不喜轻喷. 0.首先引入名称 ...

  8. Unity调用Windows弹框、提示框(确认与否,中文)

    Unity调用Windows弹提示框 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  9. Perfmon - Windows 自带系统监测工具(转)

    本文转自:http://blog.csdn.net/oscar999/article/details/7918385 一. 简述 可以用于监视CPU使用率.内存使用率.硬盘读写速度.网络速度等. Pe ...

随机推荐

  1. SVM matlab 代码详解说明

    x=[0 1 0 1 2 -1];y=[0 0 1 1 2 -1];z=[-1 1 1 -1 1 1]; %其中,(x,y)代表二维的数据点,z 表示相应点的类型属性. data=[1,0;0,1;2 ...

  2. jQuery_第一章_JavaScript基础

    JavaScript基础 JavaScript不难,但是对于初学者来讲比较的怪异. 是一种客户端语言,在浏览器执行的.是一种脚本语言,直接就能解释执行的叫脚本代码.像dos命令还有SQL也是. 为什么 ...

  3. Myeclipse 搭建Java Web 项目 《一》

    今天将图文并茂的介绍如何使用myclipse 创建Java Web 项目;我使用的是myclipse 8.6 来进行创建: 1.打开Myeclipse,点击File --->然后New ---- ...

  4. sqlalchemy ORM模块使用介绍

    前几天用到了flask框架,所以顺带介绍了flask-sqlalchemy扩展模块,去瞄一眼,由于有好多非web的python程序也用到了数据库,所以今天分享一下sqlalchemy的模块的使用方法. ...

  5. 谈JS中的作用域链与原型链(1)

    学习前端也有一段时间了,觉得自己可以与大家分享一些我当初遇到疑惑的东西,希望能给对此问题有疑惑的朋友带来一点帮助. 先来普及一下JS的概念(不要嫌我啰嗦,可能一些朋友开始学习JS是跟着视频和写好的代码 ...

  6. 对spring,struts,hibernate及MVC的理解

    对于spring,hibernate,struts等框架,刚开始的时候总是会很迷茫,不知道他们是用来做什么的. 1.对框架的作用理解 个人认为框架的作用是把代码进行了分类,减少了代码的耦合性. 如果不 ...

  7. 免费ERP之云实施

    近日,普实渠道在AIO5软件免费一周年之际,推出了重磅的动作:启动AIO5云实施,推广小微企业免费ERP落地应用. 这无疑是推动客户免费应用ERP的重大里程碑. 当前,在中国小微企业信息化方面,应用情 ...

  8. C#集合的应用以及和数组比较,它的好处有哪些

    我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类.我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和 ...

  9. Django之Model世界

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数 ...

  10. 《深入理解Java虚拟机》学习笔记之字节码执行引擎

    Java虚拟机的执行引擎不管是解释执行还是编译执行,根据概念模型都具有统一的外观:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果. 运行时栈帧结构 栈帧(Stack Frame) ...