有没有办法使用 SendKeys VB 函数或 keybd_event User32 库函数自行发送单个 Shift 击键?

问题描述

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

我尝试过的一些事情:

+

有什么想法吗?

更新:

基于article发布的user14797724,它使用了keybd_event User32库函数documentation for the System.Windows.Forms.Keys enumeration,我修改代码以使用左移。代码如下:

SendKeys "+"

SendKeys "{Shift}"

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

更新 2:

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

KnowBrainer Command Editor

解决方法

所以事实证明我可以用 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,KEYEVENTF_KEYDOWN,0) 'press the left shift key down
  keybd_event(LSHIFT,KEYEVENTF_KEYUP,0) 'release the left shift key
  keybd_event(LSHIFT,0) 'release the left shift key
End Sub
,

是的,他说的。我可以看到您在答案中考虑了什么。我建议你在 160 旁边添加评论来解释它的来源。