Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在windows上使用c++;和windows API 我想在C++中编写一些代码,结合Windows API,改变Windows(键盘输入语言)的输入方法。_C++_Winapi - Fatal编程技术网

在windows上使用c++;和windows API 我想在C++中编写一些代码,结合Windows API,改变Windows(键盘输入语言)的输入方法。

在windows上使用c++;和windows API 我想在C++中编写一些代码,结合Windows API,改变Windows(键盘输入语言)的输入方法。,c++,winapi,C++,Winapi,这是我的第一次尝试: #包括 #包括 int main(){ int arr_size=GetKeyboardLayoutList(0,NULL); HKL HKL_数组[arr_size];//保存系统中找到的输入区域设置标识的数组(HKL) //将数组初始化为全零 对于(int i=0;i,ActivateKeyboardLayout函数文档的第一句话说明:“为调用线程或当前进程设置输入区域设置标识符(以前称为键盘布局句柄)。”。由于您从未读取程序中的输入,因此无法观察其效果。它不会更改系统

这是我的第一次尝试:

#包括
#包括
int main(){
int arr_size=GetKeyboardLayoutList(0,NULL);
HKL HKL_数组[arr_size];//保存系统中找到的输入区域设置标识的数组(HKL)
//将数组初始化为全零

对于(int i=0;i,ActivateKeyboardLayout函数文档的第一句话说明:“为调用线程或当前进程设置输入区域设置标识符(以前称为键盘布局句柄)。”。由于您从未读取程序中的输入,因此无法观察其效果。它不会更改系统的键盘布局

在Windows上,每个线程都有自己的键盘布局。要更改特定窗口的键盘布局,需要向其发送
WM\u INPUTLANGCHANGEREQUEST
消息:

SendMessageW(<windowHandle>, WM_INPUTLANGCHANGEREQUEST, 0, LoadKeyboardLayoutW(language_select, KLF_ACTIVATE));
SendMessageW(,WM_INPUTLANGCHANGEREQUEST,0,LoadKeyboardLayoutW(语言选择,KLF激活));

ActivateKeyboardLayout函数文档的第一句话是:“为调用线程或当前进程设置输入区域设置标识符(以前称为键盘布局句柄)。”。由于您从未读取程序中的输入,因此无法观察其效果。它不会更改系统的键盘布局

在Windows上,每个线程都有自己的键盘布局。要更改特定窗口的键盘布局,需要向其发送
WM\u INPUTLANGCHANGEREQUEST
消息:

SendMessageW(<windowHandle>, WM_INPUTLANGCHANGEREQUEST, 0, LoadKeyboardLayoutW(language_select, KLF_ACTIVATE));
SendMessageW(,WM_INPUTLANGCHANGEREQUEST,0,LoadKeyboardLayoutW(语言选择,KLF激活));

您是要更改当前进程还是系统的键盘布局?@namesis我希望它的行为与我按Windows键+空格或Shift+Alt时的行为相同。为了清楚起见,更改键盘布局只会更改键盘类型正确的语言?您是要更改当前进程的键盘布局吗当前进程或系统?@namesis我希望它的行为与我按Windows键+空格或Shift+Alt时的行为相同。为了清楚起见,更改键盘布局只会更改键盘类型正确的语言?我通过执行此操作
SendMessageW,使其在系统中正常工作(HWND_广播,WM_输入langChangeRequest,0,重新解释_广播(加载键盘布局(语言,KLF_激活)));
我传递的不是特定的窗口句柄,因此系统的输入方法会发生变化。此外,我的编译器需要对LPARAM进行强制转换才能使其运行。如果您从
SendMessageW
更改为
SendMessageA
,则可以不使用强制转换。WinAPI被拆分为以a结束并接受普通字符串的函数(由1字节字符组成)或W,并接受宽字符串(由2字节字符组成)@namesis我真的试过了,但我也犯了同样的错误。Clion的IntelliSense实际上建议了演员阵容,所以我选择了它。虽然我不认为这是一个问题,因为它可以毫无问题地工作。我通过执行
SendMessageW(HWND_广播,WM_INPUTLANGCHANGEREQUEST,0,reinterpret_cast)让它在系统中工作(LoadKeyboardLayoutA(语言,KLF_激活)));
我传递的不是特定的窗口句柄,因此系统的输入方法会发生变化。此外,我的编译器需要对LPARAM进行强制转换才能使其运行。如果您从
SendMessageW
更改为
SendMessageA
,则可以不使用强制转换。WinAPI被拆分为以a结束并接受普通字符串的函数(由1字节字符组成)或W,并接受宽字符串(由2字节字符组成)。@namesis我实际上尝试过,但我得到了相同的错误。Clion的IntelliSense实际上建议使用强制转换,因此我使用了它。我不认为这是个问题,因为它可以正常工作。
0x4080408
SendMessageW(<windowHandle>, WM_INPUTLANGCHANGEREQUEST, 0, LoadKeyboardLayoutW(language_select, KLF_ACTIVATE));