如何在 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
有键码48
,1
有键码49
,2
有50
,以此类推……
感谢我提到的第二件事,我们只需获取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 的虚拟键语句中使用变量的主要内容,如果未能解决你的问题,请参考以下文章