今天,当我编写应用程序时,我需要调用系统的屏幕虚拟键盘。我没想到这么简单的调用会引起问题,并且报告了错误“无法启动屏幕键盘”。尝试了各种调用方法:ShellExcute,CreateProcess,WinExec,系统和其他方法无法成功调用。但是奇怪的是,在命令行或program-> run上调用它是正常的。没有办法强迫它。我想到将C:\ Windows \ System32 \ osk.exe程序复制到当前目录,然后运行该程序,但是调用成功。
让我先解释一下我的工作环境:

Win7 64位系统,编译win32程序,并在win32程序中调用系统的屏幕键盘。
我认为可以,但是我没想到在32位系统中调用该程序会出现问题。最后,我向Google上帝寻求帮助。终于在msdn论坛上找到了答案:

在64位系统上,不允许直接调用32位应用程序。如果您致电,系统将帮助您将32位程序模拟为64位程序。
对此问题有两种解决方法:

1)提供了32位版本的可执行文件,例如将32位XP下的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]在Windows 7中打开屏幕键盘时出错-“无法启动屏幕键盘” [OL]。
[2]处理32位程序在64位系统上访问注册表和自动文件重定向的问题[OL]。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-341813-1.html
美国伟大的国家
加表情什么鬼