如何在 VB.Net 的虚拟键语句中使用变量

Posted

技术标签:

【中文标题】如何在 VB.Net 的虚拟键语句中使用变量【英文标题】:How to use a variable in a Virtual-Key statement in VB.Net 【发布时间】:2016-07-12 23:23:39 【问题描述】:

我正在尝试在 VB.Net 的 Virtual-Key 语句中使用变量,但我不断收到错误消息。什么是正确的语法?没有变量,代码如下所示:

<DllImport("user32.dll")> _
Public Shared Sub keybd_event(bVk As Byte, bScan As Byte, dwFlags As UInteger, dwExtraInfo As UInteger)
End Sub

Const VK_1 As Integer = &H31

keybd_event(VK_1, 0, 0, 0) 
keybd_event(VK_1, 0, KEYEVENTF_KEYUP, 0)

我正在努力:

keybd_event(digit, 0, 0, 0)
keybd_event(digit, 0, KEYEVENTF_KEYUP, 0)

其中“数字”是变量。我试过了:

Dim digit as Byte = "VK_" & 1

Dim digit as Integer = "VK_" & 1

Dim digit as String = "VK_" & 1

但我收到错误消息:“从字符串“VK_1”到类型“字节”的转换无效。”并且“从字符串“VK_1”到类型“整数”的转换无效。”

我试过了:

keybd_event(VK_digit, 0, 0, 0)

但收到错误“未声明 VK_digit。由于其保护级别,它可能无法访问。”

我还尝试将字符串转换为字节并在字符串上使用 Integer.Parse 但这也会导致错误。

【问题讨论】:

【参考方案1】:

变量名不能串联。恐怕你目前试图用digit 变量做的事情是不可能的。您会收到错误消息,因为在您的尝试中,您只是采用普通字符串并尝试将其转换为数字(这是行不通的,因为例如 "VK_1" 包含字母和其他非数字字符)。

但是,如果您想动态指定数字键,有几种方法。

对于初学者:所有的VK_ 密钥代码都可以在System.Windows.Forms.Keys enumeration 中找到,因此您不必查找要使用的每个密钥。

其次:数字的键码相互跟随。号码0 有键码481 有键码49250,以此类推……

感谢我提到的第二件事,我们只需获取0 的密钥代码,然后添加我们想要的数字,就可以轻松搞定。

简单的解决方案:

Dim digit As Integer = 3 'Cannot go below 0 nor above 9.

keybd_event(Keys.D0 + digit, 0, 0, 0)
keybd_event(Keys.D0 + digit, 0, KEYEVENTF_KEYUP, 0)

第二种更复杂的解决方案是将字符串解析为枚举值:

Dim digit As Integer = 3
Dim Key As Keys = [Enum].Parse(GetType(Keys), "D" & digit, True)

keybd_event(Key, 0, 0, 0)
keybd_event(Key, 0, KEYEVENTF_KEYUP, 0)

第二种解决方案的好处是它不仅仅适用于数字:

Dim Letter As String = "F"
Dim Key As Keys = [Enum].Parse(GetType(Keys), Letter, True)

keybd_event(Key, 0, 0, 0) 'Presses "F".
keybd_event(Key, 0, KEYEVENTF_KEYUP, 0)

【讨论】:

太好了,谢谢!您的两种解决方案都对我很有效。我永远也想不通。 @user3080392 :我很乐意提供帮助!第二种方法将字符串解析为键枚举,这意味着只要为其中一个键写一个正确的名称,就可以使用它。例如,"ControlKey" 将被解析为 Keys.ControlKey - 因为使用大写或小写字母 (由当前设置为 True 的参数指定) 都没有关系,您可以使用任何类型的外壳。例如"conTRolKEy" 也可以。

以上是关于如何在 VB.Net 的虚拟键语句中使用变量的主要内容,如果未能解决你的问题,请参考以下文章

.net中如何引用Dll文件?

如何在 VB.NET 中检测多个修改按钮和按下的字符

如何在 vb.net 中解析一串 xml

如何在选择案例语句中实现枚举

如何在 vb.net 中实现交易方式?

你如何找到 For Each (VB.NET) 中的最后一个循环?