
定义两个变量
Private run As Boolean = False'过程是否在运行
Private Key_L As Boolean = False'L键是否按下
变通方法:加定时器,要执行的过程放在定时器中调用
keypress事件只检测某个键是否按下
在家里没有VS,引用我以前的例子盯段给你,定义的是全局键盘,也凯启誉就是在程序不激活的状态也能执行
下面是完整代码: ----按下L键过程xx只会执行一次,直到过程执行完成才再次响应
Public Class Form1
Private run As Boolean = False
Private Key_L As Boolean = False
Public Declare Auto Function RegisterHotKey Lib "旁戚user32.dll" Alias _
"RegisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean
Public Declare Auto Function UnRegisterHotKey Lib "user32.dll" Alias _
"UnregisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer) As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'注册全局热键
RegisterHotKey(Handle, 0, 7, Keys.C)
RegisterHotKey(Handle, 1, Nothing, Keys.L)
' 0=nothing 1 -alt 2-ctrl 3-ctrl+alt 4-shift 5-alt+shift 6-ctrl+shift 7-ctrl+shift+alt
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
UnRegisterHotKey(Handle, 0)
UnRegisterHotKey(Handle, 1)
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = 786 Then
If m.WParam.ToInt32 = 1 Then
Key_L = True
'MsgBox(m.Msg & "我1")
ElseIf m.WParam.ToInt32 = 0 Then
MsgBox(m.Msg & "我2")
End If
'TextBox1.Text &= " " & m.Msg
End If
MyBase.WndProc(m)
End Sub
Sub xx()
run = True
Button1.Enabled = False
For i = 0 To 100
TextBox1.Text = i.ToString
Threading.Thread.Sleep(1)
Application.DoEvents()
Next
Button1.Enabled = True
Key_L = False
run = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If run = True Then Exit Sub
If Key_L = True Then xx()
End Sub
End Class
你可以定义一个布尔型含好全局变量。 比如模老游 dim boo as boolean 然后在form load 事件里 boo=true 在key press事件里 if boo=true then boo=false 你要执行的代码 。。。。。。。 。。。。。。。 。。。。。旦销。。 你的代码执行完毕 boo=true end if
在你的keypress事件中帆核禅肯定态尘会有一个键盘氏散的判断语句,试试将你的判断语句中的比较对象设置成变量。每次只有将keypress事件执行完才能将变量恢复成可接受值!
举例如下:
下面的变量可以放在事件外面初始化
Dim myKey As Keys
myKey = Keys.Enter
keypress事件中如下:
If e.KeyChar = Microsoft.VisualBasic.Chr(myKey) Then
myKey = Keys.None
。。。
myKey = Keys.Enter
end if
你孙虚族的意思誉启应该是执行时不要响应任何操作,那开始执行时令按钮的enabled=false,执行完再则弊true就可以了。