更改其他进程的键盘布局

SLa*_*aks 16 .net c# winapi keyboard-layout registerhotkey

我正在用C#编写一个在后台运行的程序,并允许用户使用热键在活动窗口中切换键盘布局.(Windows仅支持CTRL+ SHIFTALT+ SHIFT)

我正在使用RegisterHotKey来捕获热键,它运行正常.

问题是我找不到任何API来改变聚焦窗口的键盘布局.

ActivateKeyboardLayout和LoadKeyboardLayout只能更改调用线程的键盘布局.

有谁知道如何更改不同线程的键盘布局(语言栏的方式)?

Ram*_*dov 8

PostMessage(handle, 
    WM_INPUTLANGCHANGEREQUEST, 
    0, 
    LoadKeyboardLayout( StrCopy(Layout,'00000419'), KLF_ACTIVATE)
);
Run Code Online (Sandbox Code Playgroud)

  • 使用“GetForegroundWindow”作为“handle”可以完美地工作。WPF 程序是一个例外,它似乎响应此消息而锁定。 (2认同)

Rom*_*kov 0

如果您只是为自己编写一些东西,另一种可能可以接受的方法是:为每个布局定义一个单独的组合键(例如 Alt+Shift+1 等),并使用SendInput在它们之间进行切换。

当然,可以使用的情况是有限的。