无法启动屏幕键盘

今天在编写一个应用程序时,需要调用系统的屏幕虚拟键盘,没想到这么简单的调用竟然出现问题,报“无法启动屏幕键盘“错误。试了各种调用方法:ShellExcute、CreateProcess、WinExec、system等方法都不能成功调用。但是奇怪的是在命令行或者程序->运行 中调用却又是正常的。逼的没办法,想到先将C:\Windows\System32\osk.exe程序拷贝到当前目录下再运行程序,没想到调用成功。

下面先交待一下本人的工作环境:
win7 64位系统,编译win32程序,在win32程序中调用系统的屏幕键盘。

本以为这样就算没事了,没想到把程序放到32位系统中调用又出现问题了。最后向google大神求救。终于在msdn论坛上找到答案:
64位系统上是不允许调用直接调用32位的应用程序的,如果调用系统会帮你把32位程序模拟成64位程序。

针对此问题有两种解决方法:
1)提供32位版本的执行文件,如将XP 32位下的osk.exe拷贝到工程文件中。
2)通过Wow64DisableWow64FsRedirection函数调用判断和关闭Wow模拟。使用方法如下:


PVOID OldValue;
BOOL bRet = Wow64DisableWow64FsRedirection (&OldValue);

ShellExecute(this->GetSafeHwnd(),_T("open"),_T("osk.exe"),_T(""),_T(""),SW_SHOW);

if (bRet) { 
     Wow64RevertWow64FsRedirection(OldValue); 
}

Wow64DisableWow64FsRedirection功能是关闭wow模拟功能和得到当前的状态。 Wow64RevertWow64FsRedirection 用于恢复状态。

参考文献:

【1】Error when opening On-Screen keyboard in windows 7 - "Could not start On-Screen keyboard"[OL]. http://social.msdn.microsoft.com/Forums/en-GB/vbgeneral/thread/e9252bb7-1df0-4826-880f-ad0a636a18cd

【2】应对32位程序在64位系统上访问注册表和文件自动转向问题[OL]. http://www.cnblogs.com/FlyingBread/archive/2007/01/21/624291.html


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值