0

我正在使用 Dragon NaturallySpeaking 的语音识别插件来使用我的声音创建击键自动化。该插件公开了 VB 功能SendKeys。我知道 shift 键修饰符 ( +) 可以与几乎任何其他字符组合,但我不想将 shift 键与任何东西组合;我只是想发送一个单一的 shift 按键而没有其他任何东西。这可能吗?

我尝试过的一些事情:

SendKeys "+"

SendKeys "{Shift}"

有任何想法吗?

更新:

根据user14797724发布的文章,它使用了 keybd_event User32 库函数,以及System.Windows.Forms.Keys 枚举的文档,我修改了代码以使用左移。这是代码:

Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Public Module SendWinKey
    Const KEYEVENTF_KEYDOWN As Integer = &H0
    Const KEYEVENTF_KEYUP As Integer = &H2

    Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As UInteger)

Public Sub Main()    
        keybd_event(CByte(Keys.LShiftKey), 0, KEYEVENTF_KEYDOWN, 0) 'press the left shift key down
        keybd_event(CByte(Keys.LShiftKey), 0, KEYEVENTF_KEYUP, 0) 'release the left shift key
End Sub

End Module

我希望这对我有用,但似乎我使用的脚本环境不支持 Imports 关键字,并且需要符合 CLS 的变量才能进行外部调用。我可以通过在适当的类型前面加上完整的命名空间来解决 Imports 关键字问题,但是有没有人有一个替代的外部调用我可能会做出符合 CLS 的?UIinteger类型似乎是它不喜欢的类型。

更新 2:

当我把 VBScript 作为我的标签之一时,我不知道我在想什么。我已经标记了 VBA,但有人将其编辑了。尽我所能告诉我正在使用的“语言”是 Visual Basic 的一个子集。这是编辑器的屏幕截图。

KnowBrainer 命令编辑器

4

2 回答 2

2

所以事实证明,我可以用 Integer 类型代替 UInteger 类型。然后我必须弄清楚如何消除 CByte 调用和 System.Windows.Forms.Keys 枚举。最后,我刚刚删除了不必要的 Module 声明,现在一切似乎都运行良好。是的,我确实重复了上键和下键事件,因为我实际上想按两次 shift 键。感谢所有试图提供帮助的人。

'Press and release the left shift key twice

Const LSHIFT As Byte = 160 'Defined here https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.keys?view=net-5.0
Const KEYEVENTF_KEYDOWN As Integer = &H0
Const KEYEVENTF_KEYUP As Integer = &H2

Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

Sub Main()    
  keybd_event(LSHIFT, 0, KEYEVENTF_KEYDOWN, 0) 'press the left shift key down
  keybd_event(LSHIFT, 0, KEYEVENTF_KEYUP, 0) 'release the left shift key
  keybd_event(LSHIFT, 0, KEYEVENTF_KEYDOWN, 0) 'press the left shift key down
  keybd_event(LSHIFT, 0, KEYEVENTF_KEYUP, 0) 'release the left shift key
End Sub
于 2021-04-27T14:51:05.883 回答
0

是的,他说的。我可以看到您在回答中的一些想法。我建议您在 160 旁边添加注释以解释其来源。

于 2021-05-04T13:36:33.627 回答