AIR调用本地进程在WIN8单语言版下出错

自从对Flash起了莫大兴趣之后,接触的范围也渐渐广了。话说Flash进军应用程序,开拓出了AIR平台,可以方便地用Flash来开发本地应用程序,跨平台的应用程序。听起来很不错。但是实际使用时却发现,这个所谓的跨平台,其实是飘着的,若要落地,在对应的平台上要开发ANE,就是本地扩展。也就是说,这个跨平台不能与平台深度结合。

如果需要一些特殊的功能,就要动动脑筋了。

就比如WIN8平板,理论上系统配置需求是和台式机一样的,WIN8本身有一个不好的地方,就是软键盘不能像Android和IOS一样只要遇到输入文本的地方就自动弹出,WIN8下面只有部分程序会弹出(可能是程序调用了软键盘程序tabtip.exe),每次要输入文本时先点击下软键盘(在任务栏开启软键盘的情况下),如果在全屏的情况下,这根本做不到了。理论上,调用软键盘只需几行代码:

var softKeyboardInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
softKeyboardInfo.executable = new File("C:\\Program Files\\Common Files\\microsoft shared\\ink\\tabtip.exe");
var softKeyboard:NativeProcess = new NativeProcess();
softKeyboard.start(softKeyboardInfo )
WIN7下面是没有问题,但是在WIN8平板下,死活不出来,后来检查到错误信息,提示竟然是:请求的操作需要提升

提升??提升!!!已经是管理员了,要提升什么呢?权限?系统版本?

这个问题纠结了好几天,最后测试到AIR可以调用程序目录下的可执行文件,于是想到一个绕过去的办法,用C#写了个小程序调用

public void openSoftKeyboard()
        {
            Process.Start("tabtip.exe");
        }
然后在AIR中调用

var softKeyboardInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();

//这个Utils.exe就是用C#写的一个小程序,根据参数调用相应的程序然后自动退出
softKeyboardInfo.executable = new File(File.applicationDirectory.resolvePath("Utils.exe").nativePath);
var softKeyboard:NativeProcess = new NativeProcess();
softKeyboardInfo.arguments.push("closeSoftKeyboard");
softKeyboard.start(softKeyboardInfo);
运行测试,果然成功了。

虽然功能上算是通了,根本原因还没有找到,或许是AIR的BUG?没有和WIN8系统兼容?