【问题标题】:Change Keyboard Layout for Other Process更改其他进程的键盘布局
【发布时间】:2010-09-20 18:25:15
【问题描述】:

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

我正在使用 RegisterHotKey 来捕捉热键,它工作正常。

问题是我找不到任何 API 来更改焦点窗口的键盘布局。

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

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

【问题讨论】:

  • 当您使用 Windows 内置热键切换语言时,它不会影响不同的线程,是吗?
  • 每线程键盘布局切换?与系统范围的布局切换相反?用和弦做点什么?
  • @drachenstern:没有系统范围的键盘布局切换;活动键盘布局是每个 UI 线程的状态。我正在尝试替换 Alt+Shift,这样我就不会意外按下它,因此不能选择和弦(如果我明白你的意思的话)。
  • 我想你知道我在和弦上的意思。我只是认为键盘布局是从系统继承的东西,并且很好奇你为什么要在每个线程中覆盖它。为什么不在线程上使用与系统上相同的布局?这就是我很好奇的地方。我想只是想了解更多看待世界的方式。

标签: c# .net winapi keyboard-layout registerhotkey


【解决方案1】:
PostMessage(handle, 
    WM_INPUTLANGCHANGEREQUEST, 
    0, 
    LoadKeyboardLayout( StrCopy(Layout,'00000419'), KLF_ACTIVATE)
);

【讨论】:

  • 使用GetForegroundWindowhandle 完美工作。一个例外是 WPF 程序,它似乎在响应此消息时锁定。
  • @RomanStarkov 如何查找受影响的 WPF 版本以及原因是什么?
  • @Dims 这两个我都不知道。我想知道原因是否与this有关(但它不会帮助您解决问题)
【解决方案2】:
  function ChangeRemoteWndKeyboardLayoutToRussian(
    const RemoteHandle: THandle): Boolean;
  var
    Dumme: DWORD;
    Layout: HKL;
  begin
    Layout := LoadKeyboardLayout('00000419', KLF_ACTIVATE);
    Result := SendMessageTimeOut(RemoteHandle, WM_INPUTLANGCHANGEREQUEST,
      0, Layout, SMTO_ABORTIFHUNG, 200, Dumme) <> 0;
    if Result then    
      Result := SendMessageTimeOut(RemoteHandle, WM_INPUTLANGCHANGEREQUEST,
        RUSSIAN_CHARSET, Layout, SMTO_ABORTIFHUNG, 200, Dumme) <> 0;
  end;

【讨论】:

    【解决方案3】:

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

    这当然是有限的。

    【讨论】:

      【解决方案4】:

      我认为诀窍是让您的代码在您希望更改其键盘布局的线程的上下文中执行。您需要在此处进行一些 win32 互操作并了解 DLL 注入以使您的代码在远程线程中执行。

      keyboard hook handler 在这里看起来是个不错的选择。

      看看 http://www.codeproject.com/KB/threads/winspy.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-03
        • 2012-12-20
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        相关资源
        最近更新 更多