You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP C#:如何为InputInjector键盘设置语言?

解决UWP中InputInjector键盘语言设置的问题

嘿,针对你这个UWP屏幕键盘设置InputInjector语言的问题,我来给你捋清楚解决方案!

首先得明确一个关键点:InputInjector本身并没有直接设置输入语言的API,它是基于系统当前的活动输入语言来处理按键注入的。所以要实现不同语言的按键输入,核心思路是先切换到目标输入语言,再执行按键注入操作。

具体步骤和代码实现

1. 切换到目标输入语言

我们可以用InputLanguageManager类来管理输入语言,先获取系统已安装的目标语言,再切换过去:

using System.Linq;
using System.Threading.Tasks;
using Windows.Globalization;
using Windows.UI.Input.Preview.Injection;

private async Task SwitchToTargetLanguage(string languageTag)
{
    // 根据语言标签(比如"zh-CN"、"en-US")获取目标语言
    var targetLang = InputLanguageManager.Current.AvailableInputLanguages
        .FirstOrDefault(lang => lang.LanguageTag.Equals(languageTag, StringComparison.OrdinalIgnoreCase));

    if (targetLang != null)
    {
        // 切换到目标输入语言
        InputLanguageManager.Current.InputLanguage = targetLang;
        
        // 给系统一点时间完成语言切换(可根据实际情况调整延迟时长)
        await Task.Delay(100);
    }
    else
    {
        // 处理目标语言未安装的情况
        throw new InvalidOperationException($"系统未安装语言 {languageTag},请先在系统设置中添加该语言");
    }
}

2. 结合你的SendKey方法使用

在调用SendKey之前,先切换到目标语言即可:

// 示例:切换到英文(美国)后注入按键
await SwitchToTargetLanguage("en-US");
SendKey(0x41); // 注入键盘A键,此时会输入英文的"A"

// 切换到中文(简体)后注入按键
await SwitchToTargetLanguage("zh-CN");
SendKey(0x41); // 此时会根据中文输入法的状态,输入"a"或者触发候选词

3. 直接注入Unicode字符(可选)

如果需要精准输入特定语言的字符(不需要依赖输入法状态),可以直接注入Unicode字符,而不是虚拟按键码:

public void SendUnicodeCharacter(char targetChar)
{
    var injector = InputInjector.TryCreate();
    if (injector == null) return;

    var unicodeInput = new InjectedInputUnicodeInfo
    {
        Unicode = (ushort)targetChar
    };

    // 注入Unicode字符
    injector.InjectKeyboardInput(new List<InjectedInputKeyboardInfo>(), new List<InjectedInputUnicodeInfo> { unicodeInput });
}

// 使用示例:输入中文"你"
SendUnicodeCharacter('你');

必要的权限配置

别忘了在你的Package.appxmanifest中添加inputInjectionBrokered能力,否则InputInjector无法正常工作:

<Capabilities>
    <Capability Name="internetClient" />
    <!-- 添加输入注入权限 -->
    <uap3:Capability Name="inputInjectionBrokered" />
</Capabilities>

额外注意事项

  • 语言切换操作需要用户授权,且只能切换到系统已安装的语言;
  • 中文输入法的状态(比如是否处于中文输入模式)会影响虚拟按键的输入结果,如果需要稳定输入特定字符,优先使用Unicode注入的方式;
  • 若需要监听语言切换完成的事件,可以订阅InputLanguageManager.Current.InputLanguageChanged事件,避免依赖固定延迟。

内容的提问来源于stack exchange,提问作者Green Train

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:39:37