2016-07-12 11 views
2

VB.NetのVirtual-Keyステートメントで変数を使用しようとしていますが、エラーが発生しています。正しい構文は何ですか?変数がなければ、コードは次のようになります。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 "から" Integer "への変換は無効です。"

私が試してみた:

keybd_event(VK_digit, 0, 0, 0) 

しかし、エラーが発生しました「VK_digitが宣言されていないことは、その保護レベルにアクセスできないことがあります。。」

また、刺し身をバイトに変換し、文字列にInteger.Parseを使用してみましたが、それもエラーの原因となりました。

答えて

2

変数名は連結できません。現在、digit変数でやっていることは不可能ですが、私は恐れています。試してみると、通常の文字列を数字に変換しようとしているため(たとえば、"VK_1"には文字とその他の数字以外の文字が含まれているため動作しません)、エラーが発生します。

しかし、数字キーを動的に指定する場合は、いくつかの方法があります。手始めに

すべてVK_キーコードはSystem.Windows.Forms.Keys enumerationで見つけることができますので、あなたは、あなたが使用したいすべてのキーをルックアップする必要はありません。

第2に:数字のキーコードが互いに続きます。数0は、キーコード48を持って1は、キーコード49を持って、250を持っており、私たちはただのキーコードを取ることによって、自分のために、それは簡単に作ることができます言及した二つ目のように...

感謝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:私は助けてうれしいです! 2番目のメソッドは、文字列をキー列挙型に解析します。つまり、キーのいずれかの正しい名前を記述する限り、文字列を使用できます。例えば、 '' ControlKey "'は 'Keys.ControlKey'に解析され、大文字または小文字の_を使用するかどうかは関係ありません(現在' True'に設定されているパラメータで指定されています)_ケーシングの種類。例えば ​​'' conTRolKEy ''も動作します。 –

関連する問題