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

如何通过编程触发Windows + H语音听写功能?

在Windows应用中激活Win+H语音听写功能的实现方案

要在Windows应用中激活Win+H对应的语音听写功能,不同开发框架的实现方式略有差异,以下是主流平台的具体方案:

1. WinForms/WPF 应用(.NET Framework/.NET 5+)

方法1:使用SendKeys模拟快捷键

这种方式最简单,适合快速实现,需确保应用当前处于前台(拥有焦点):

// WinForms/WPF 中直接调用
SendKeys.SendWait("{WIN}h");

注:部分环境下可能需要先将应用窗口置顶,确保焦点在当前应用内。

方法2:使用Windows API(SendInput)更可靠

如果SendKeys存在稳定性问题,可直接调用user32.dll的SendInput函数发送按键消息,兼容性更强:

using System;
using System.Runtime.InteropServices;

public static class KeyboardSimulator
{
    [StructLayout(LayoutKind.Sequential)]
    private struct INPUT
    {
        public uint type;
        public InputUnion u;
    }

    [StructLayout(LayoutKind.Explicit)]
    private struct InputUnion
    {
        [FieldOffset(0)] public KEYBDINPUT ki;
        [FieldOffset(0)] public MOUSEINPUT mi;
        [FieldOffset(0)] public HARDWAREINPUT hi;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct KEYBDINPUT
    {
        public ushort wVk;
        public ushort wScan;
        public uint dwFlags;
        public uint time;
        public IntPtr dwExtraInfo;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct MOUSEINPUT
    {
        public int dx;
        public int dy;
        public uint mouseData;
        public uint dwFlags;
        public uint time;
        public IntPtr dwExtraInfo;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct HARDWAREINPUT
    {
        public uint uMsg;
        public ushort wParamL;
        public ushort wParamH;
    }

    private const uint INPUT_KEYBOARD = 1;
    private const uint KEYEVENTF_KEYUP = 0x0002;
    private const ushort VK_LWIN = 0x5B;
    private const ushort VK_H = 0x48;

    [DllImport("user32.dll", SetLastError = true)]
    private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

    public static void SimulateWinH()
    {
        INPUT[] inputs = new INPUT[4];

        // 按下左Windows键
        inputs[0].type = INPUT_KEYBOARD;
        inputs[0].u.ki.wVk = VK_LWIN;

        // 按下H键
        inputs[1].type = INPUT_KEYBOARD;
        inputs[1].u.ki.wVk = VK_H;

        // 松开H键
        inputs[2].type = INPUT_KEYBOARD;
        inputs[2].u.ki.wVk = VK_H;
        inputs[2].u.ki.dwFlags = KEYEVENTF_KEYUP;

        // 松开Windows键
        inputs[3].type = INPUT_KEYBOARD;
        inputs[3].u.ki.wVk = VK_LWIN;
        inputs[3].u.ki.dwFlags = KEYEVENTF_KEYUP;

        SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
    }
}

// 调用方式
KeyboardSimulator.SimulateWinH();

2. UWP 应用

UWP推荐使用官方语音识别API直接启动听写,更符合平台规范:

using Windows.Media.SpeechRecognition;

public async Task StartDictation()
{
    var recognizer = new SpeechRecognizer();
    // 添加听写约束
    var dictationConstraint = new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.Dictation, "Dictation");
    recognizer.Constraints.Add(dictationConstraint);
    await recognizer.CompileConstraintsAsync();

    // 启动听写会话
    var result = await recognizer.RecognizeAsync();
    if (result.Status == SpeechRecognitionResultStatus.Success)
    {
        // 将识别结果插入目标控件
        YourTextBox.Text = result.Text;
    }
}

需在Package.appxmanifest中添加权限:

<Capabilities>
    <uap:Capability Name="microphone" />
    <uap:Capability Name="speechRecognition" />
</Capabilities>

3. .NET MAUI 应用(Windows端)

MAUI可通过平台特定代码调用Windows原生API实现:

#if WINDOWS
using System.Runtime.InteropServices;

public void ActivateWinHDictation()
{
    KeyboardSimulator.SimulateWinH();
}

// 复用之前的KeyboardSimulator类
public static class KeyboardSimulator
{
    // 此处省略与WinForms/WPF中相同的结构体和DllImport定义
    // ...
    public static void SimulateWinH()
    {
        // 与之前的实现一致
    }
}
#endif

也可直接调用UWP的语音识别API,需用条件编译包裹代码,并通过MainThread更新UI:

#if WINDOWS
using Windows.Media.SpeechRecognition;
using Microsoft.Maui.ApplicationModel;

public async Task StartDictation()
{
    var recognizer = new SpeechRecognizer();
    var dictationConstraint = new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.Dictation, "Dictation");
    recognizer.Constraints.Add(dictationConstraint);
    await recognizer.CompileConstraintsAsync();

    var result = await recognizer.RecognizeAsync();
    if (result.Status == SpeechRecognitionResultStatus.Success)
    {
        MainThread.BeginInvokeOnMainThread(() =>
        {
            YourEntry.Text = result.Text;
        });
    }
}
#endif

注意事项

  • 权限配置:所有涉及语音识别的应用都需要开启麦克风权限,需在对应平台的权限清单中声明。
  • 系统要求:Win+H听写功能仅支持Windows 10及以上版本,且系统需已启用语音识别服务。
  • 焦点问题:模拟快捷键时,若需全局激活听写,无需限制应用焦点(Win+H本身是全局快捷键)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:42:38