如何为 Windows 语音输入功能创建更方便的热键?

如何为 Windows 语音输入功能创建更方便的热键?

我正在尝试大量使用 Windows 的语音输入功能,并发现Win+H热键不太理想,因为当我用右手握住鼠标时,仅用左手按下并不快速/容易(这种情况经常发生,因为当我想开始口述时,我通常刚刚单击了一个文本区域/文本框)。

我尝试创建一个 AutoHotkey 组合键,这样我就可以只用左手开始语音输入:

; Set "Ctrl + Shift + z" to "Windows + h" to start the Windows voice-to-type system.  It just makes it easier to reach.
^+z::Send #h

但是,我经常遇到一个问题,语音输入窗口的行为就像是立即收到两次热键按下一样:它启动并立即停止“我正在聆听”模式。我能分辨出来,因为它在启动和停止该模式时会播放声音,还会播放动画。

这个问题绝不当我按下Win+时发生这种情况H

有什么方法可以阻止此问题的发生?我想知道是否可以通过 regedit 或其他方式修改Win+热键。H

我尝试过的事情

我尝试使用中提到的功能此主题以防止重复按键,但问题仍然存在。

PreventRepeating() {
    KeyWait, Alt
    KeyWait, Ctrl
    KeyWait, Shift
    KeyWait, LWin
    KeyWait, RWin
    KeyWait, %A_ThisHotkey%
}

; Set Ctrl + Alt to Windows + h to start the Windows voice-to-type system.  It just makes it easier to reach.
^+z::
    Send #h
    PreventRepeating()
Return

答案1

不是一个自动热键解决方案,而不是解决您在使用 AutoHotkey 脚本时遇到的问题。但是,有没有更“原生”的快捷键重新映射解决方案?

我尝试过重新映射快捷方式这是键盘管理器实用程序在里面微软的 PowerToys应用程序,并且它似乎运行良好。

在此处输入图片描述

答案2

作为替代方法,您可以使用下面的方法,因为它保留了您的关键功能并且更加通用,尽管这是直接来自 AHK 文档并经过我自己的一些非常基本的修改。

来源:AHK 文档 #3

#Persistent
#SingleInstance, Force

h::
if (Hotkey_Presses > 0)      ; ←←← SetTimer already started, so we log the keypress instead.
{
    Hotkey_Presses += 1
    Return
}
; ◦ ◦ ◦ ◦ ◦ ◦ ◦ Otherwise, this is the first press of a new series. Set count to 1 and start the timer.
Hotkey_Presses := 1
SetTimer, HotKey, -400   ; ←←← Wait for more presses within a 400 millisecond window.
    Return

HotKey:
if (Hotkey_Presses = 1)          ; ←←← The key was pressed once.
{
    Send, {TEXT}h
    Soundbeep, 1700, 150
}
else if (Hotkey_Presses = 2)         ; ←←← The key was pressed twice.
{
    SplashTextOn, 150, , The key was pressed twice.
    Soundbeep, 1700, 150
    Soundbeep, 1700, 150
        Sleep, 1500
    SplashTextOff
}
else if (Hotkey_Presses > 2)         ; ←←← Multiple key presses.
{
    SplashTextOn, 225, , The key was pressed three or more times.
    Soundbeep, 1700, 150
    Soundbeep, 1500, 150
    Soundbeep, 1900, 150
        Sleep, 1500
    SplashTextOff
}
; ◦ ◦ ◦ ◦ ◦ ◦ ◦ Regardless of which action above was triggered, reset the count to prepare for the next series of presses.
    Hotkey_Presses := 0
    Return

^Esc:: ExitApp

答案3

不确定这是否有用,但您是否考虑过只使用双击作为热键?您不必担心按键之间的距离,并且可以根据需要设置热键。提供的示例让您只需双击“H”键,但单击对您没有任何作用,因此请谨慎选择您的按键。当然,您也可以将其设置为 ^H:: (Ctrl+H) 之类的键并保留“H”键的功能。

H:: 
If (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 250)    ; ←←← Double-Tap in less than 250 milliseconds.
SoundBeep, 2100, 100     ; ←←← To veryify double-tap success.
Return

相关内容