【语言-C++】Win7 64位系统下出现无法启动屏幕键盘的bug
来源:互联网 发布:美国仓库淘宝网 编辑:程序博客网 时间:2024/06/09 21:28
用下面代码在Win64位系统下调用键盘出现“无法启动屏幕键盘。”的问题。
WinExec("osk.exe",SW_NORMAL);
解决方案:
添加头文件和相关函数
#include <Windows.h>#include <WinBase.h>typedef BOOL (CALLBACK * pWow64DisableWow64FsRedirection)(PVOID *OldValue);typedef BOOL (CALLBACK * pWow64RevertWow64FsRedirection) (PVOID OldValue);pWow64DisableWow64FsRedirection Wow64DisableWow64FsRedirection;pWow64RevertWow64FsRedirection Wow64RevertWow64FsRedirection;VOID SafeGetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo) { if (NULL==lpSystemInfo) return; typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo); LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");; if (NULL != fnGetNativeSystemInfo) { fnGetNativeSystemInfo(lpSystemInfo); } else { GetSystemInfo(lpSystemInfo); } }int GetSystemBits() { SYSTEM_INFO si; SafeGetNativeSystemInfo(&si); if (si.wProcessorArchitecture == 9 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ) { return 64; } return 32; }
添加调用函数
void CDlgSet::OnOsk() {// TODO: Add your control notification handler code hereWinExec("osk.exe",SW_NORMAL);if (GetSystemBits() == 64){HMODULE HMODULE1 =LoadLibrary("Kernel32.dll");if (HMODULE1 !=NULL){Wow64DisableWow64FsRedirection= (pWow64DisableWow64FsRedirection)GetProcAddress(HMODULE1,"Wow64DisableWow64FsRedirection");Wow64RevertWow64FsRedirection= (pWow64RevertWow64FsRedirection)GetProcAddress(HMODULE1,"Wow64RevertWow64FsRedirection");if (Wow64DisableWow64FsRedirection!=NULL && Wow64RevertWow64FsRedirection!=NULL){PVOID OldValue; BOOL bRet = Wow64DisableWow64FsRedirection (&OldValue); WinExec("osk.exe",SW_NORMAL);if (bRet) { Wow64RevertWow64FsRedirection(OldValue); } }FreeLibrary(HMODULE1);}}else if(32 == GetSystemBits()){WinExec("osk.exe",SW_NORMAL);}}
阅读全文
0 0
- 【语言-C++】Win7 64位系统下出现无法启动屏幕键盘的bug
- 64位win7平台下,使用C语言通过odbc无法连接MySQL数据库的问题。
- 无法启动屏幕键盘
- 无法启动屏幕键盘
- winpcap/wireshark在win7 64位系统下IP头部结构长度为0的bug
- win7 64位系统下 vs2013无法创建c++项目
- mpich2在win7的64位运行出现的问题C/C++语言
- Matlab在win7系统拨号上网下无法启动的解决办法
- WIN7/8.1 64位rails服务无法启动的解决方案
- win7旗舰版64位系统下桌面图标出现异常的解决方法
- Linux64位系统下WTK无法启动的问题解决办法
- WIN7 64位系统下解决eclipse中java语言中中文字体很小的问题
- 64位Win7系统iTunes无法识别iPhone的解决方法
- wireshare 在win7 64位系统安装出现的问题
- 关于win7 64位系统安装apache的 教程 httpd2.4服务无法启动 443端口被占用问题
- win7,64位系统下,找不到指定的文件 C:\WINDOWS\system32\<LANG_NAME>\mstsc.exe.MUI
- Win7系统下的一个小bug
- win7系统64位装symbian v5环境,模拟器无法启动
- 566. Reshape the Matrix
- 路由控制
- Android破解与防破解
- LeetCode Kth Largest Element in an Array
- sass的编译
- 【语言-C++】Win7 64位系统下出现无法启动屏幕键盘的bug
- ORA-01017: invalid username/password; logon denied 解决方案
- echartz常用的图形Demo
- mysql在window机器下的双机备份
- DAY3 网络协议
- 开发时碰到的问题: java.lang.IllegalStateException: Unable to create directory: /storage/sdcard0/Trinea/aa
- navicate注册码
- dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchan关于苹果禁用JSPatch(热修复一类),上架审核被拒问题
- Linux查看物理CPU、内存、硬盘等基本信息命令