一、序言
打游戏的时候最烦的就是不小心把输入法切换了,切到中文甚至会把游戏整崩。下面的代码就能很好地解决这个问题。
这个代码会一直检查当前输入法是不是英文,如果不是就切换到英文;同时也会检查大小写键是不是有按下,没有的话自动按下,其实这个可以不做,但这相当于加了层保险。
再也不怕打游戏时手忙脚乱崩出中文输入法了!又能愉快地打游戏了!
二、软件下载
软件很小,只有 17KB
。点击跳转到蓝奏云下载
三、核心代码
main.cpp
#include <iostream>
#include <thread>
#include <windows.h>
void function()
{
// 根据前台窗口的句柄获取其所属线程的线程ID, 最后获取该线程的键盘布局句柄
HKL hkl = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL));
// 获取其键盘布局的语言ID, 判断是否为英文输入法(美式)
if (LOWORD(hkl) != MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US))
{
// 使用 PostMessage 和 WM_INPUTLANGCHANGEREQUEST 消息请求切换到英文输入法(语言代码 “00000409” 为美国英文)
PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, 0, (LPARAM)LoadKeyboardLayout(TEXT("00000409"), KLF_ACTIVATE));
}
// 检查大小写键是否按下, 如果没有则模拟按下并释放大小写键
if (!(GetKeyState(VK_CAPITAL) & 0x0001))
{
keybd_event(VK_CAPITAL, 0x3a, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(VK_CAPITAL, 0x3a, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
}
int main()
{
function();
return 0;
}
编译、链接动态库
g++ -std=c++11 -o main main.cpp -luser32 -lkernel32