【问题标题】:How to use a variable in a Virtual-Key statement in VB.Net如何在 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 但这也会导致错误。

【问题讨论】:

    标签: vb.net virtual-keyboard


    【解决方案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" 也可以。
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多