Vb.net使用asyncstate函数注册CTRL组合
我正在尝试制作一个完全由键盘控制的计算器 我在注册键盘上的击键时遇到了一些问题,但最终我使用了GetAsyncKeystate函数Vb.net使用asyncstate函数注册CTRL组合,vb.net,keyboard,Vb.net,Keyboard,我正在尝试制作一个完全由键盘控制的计算器 我在注册键盘上的击键时遇到了一些问题,但最终我使用了GetAsyncKeystate函数 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick For i = 1 To 255 result = 0 result = GetAsyncKeyState(i)
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
For i = 1 To 255
result = 0
result = GetAsyncKeyState(i)
If result = -32767 Then
Select Case i
Case Is = 96
Display.Text = Display.Text & "0"
ans = ans & "0"
Case Is = 97
Display.Text = Display.Text & "1"
ans = ans & "1"
Case Is = 98
Display.Text = Display.Text & "2"
ans = ans & "2"
Case Is = 99
Display.Text = Display.Text & "3"
ans = ans & "3"
Case Is = 100
Display.Text = Display.Text & "4"
ans = ans & "4"
Case Is = 101
Display.Text = Display.Text & "5"
ans = ans & "5"
Case Is = 102
Display.Text = Display.Text & "6"
ans = ans & "6"
Case Is = 103
Display.Text = Display.Text & "7"
ans = ans & "7"
Case Is = 104
Display.Text = Display.Text & "8"
ans = ans & "8"
Case Is = 105
Display.Text = Display.Text & "9"
ans = ans & "9"
Case Is = 106
Multiply()
Case Is = 107
Add()
Case Is = 110
Display.Text = Display.Text & ","
ans = ans & ","
Case Is = 109
Substract()
Case Is = 111
Devide()
Case Is = 13 And ActionValue <> ""
Action()
Display.Text = ans2
Display.Text = Display.Text & Environment.NewLine
ans = ans2
ans2 = ""
End Select
End If
Next i
End Sub
Private Sub Timer1\u Tick(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理Timer1.Tick
对于i=1到255
结果=0
结果=GetAsyncKeyState(i)
如果结果=-32767,则
选择案例一
病例为96例
Display.Text=Display.Text&“0”
ans=ans&“0”
情况是=97
Display.Text=Display.Text&“1”
ans=ans&“1”
情况是=98
Display.Text=Display.Text&“2”
ans=ans&“2”
情况是=99
Display.Text=Display.Text&“3”
ans=ans&“3”
情况是=100
Display.Text=Display.Text&“4”
ans=ans&“4”
情况是=101
Display.Text=Display.Text&“5”
ans=ans&“5”
情况是=102
Display.Text=Display.Text&“6”
ans=ans&“6”
案例Is=103
Display.Text=Display.Text&“7”
ans=ans&“7”
案例Is=104
Display.Text=Display.Text&“8”
ans=ans&“8”
案例Is=105
Display.Text=Display.Text&“9”
ans=ans&“9”
情况是=106
乘
案例Is=107
添加()
情况是=110
Display.Text=Display.Text&“
ans=ans&“
案例Is=109
减()
情况是=111
德维德()
大小写为=13且ActionValue“”
行动()
Display.Text=ans2
Display.Text=Display.Text&Environment.NewLine
ans=ans2
ans2=“”
结束选择
如果结束
接下来我
端接头
现在我不知道应该如何注册Ctrl组合(比如Ctrl+NUM-LOCK)
顺便说一句,我不习惯GetsAsyncKeyState函数您首先需要检查是否在开始时按下了CTRL键或任何其他修改键,如Alt或其他任何键。(有关钥匙代码,请参阅)。定义变量,如
Dim isCTRLPressed as Boolean = (GetAsyncKeyState(&HA2) < 0)
如果你的意思是别的,你可以在你的帖子上再详细说明一下。您的代码也相当低效,因为您强制检查每个勾号上的每个键状态,看它是否被实际使用。是的,我从另一篇stackoverflow文章中得到了这一点。。。不管怎样,你的代码是有效的。。。与此同时,我发现CTRL键覆盖了键的功能,使它除了我需要它做什么之外什么都不做。糟糕的编码ftw!
If isCTRLPressed Then
DoThis()
Else
DoThat()
End If