2016-07-12 47 views
2

我想在VB.Net中的虛擬鍵語句中使用變量,但我不斷收到錯誤。什麼是正確的語法?如果沒有變量,代碼如下:如何在VB.Net中的虛擬鍵語句中使用變量

<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沒有宣佈它可能無法訪問由於其保護級別。」

我也嘗試將sting轉換爲字節並在字符串上使用Integer.Parse,但也導致了錯誤。

回答

2

變量名稱不能連接。恐怕你現在想用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) 
+0

太好了,謝謝!你的兩個解決方案對我來說都很好。我從來沒有想過這件事。 – user3080392

+0

@ user3080392:我很樂意幫忙!第二種方法將字符串解析爲鍵枚舉,這意味着只要您爲其中一個鍵編寫了正確的名稱,就可以使用它。例如'「ControlKey」將被解析爲'Keys.ControlKey' - 因爲如果您使用大小寫字母_(由當前設置爲「True」的參數指定)無關緊要,您可以使用任何一種套管。例如''controlKEy'''也可以。 –