代码如下:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyF5) Then
Text1 = Text1 & "1"
End If
End Sub
我想要只要按下F5(不松开),就显示一次1。请问高手,怎么修改代码?
关于vb6全局键盘事件
答案:3 悬赏:30 手机版
解决时间 2021-03-04 20:00
- 提问者网友:浩歌待明月
- 2021-03-04 00:23
最佳答案
- 五星知识达人网友:低血压的长颈鹿
- 2021-03-04 01:48
代码最上面加个变量
dim runonce as boolean
以下代码稍微改一下即可
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyF5)=ture and runonce=false Then
Text1 = Text1 & "1"
runonce=true
End If
End Sub
然后在按键抬起事件时再把变量设置为runonce=false即可
dim runonce as boolean
以下代码稍微改一下即可
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyF5)=ture and runonce=false Then
Text1 = Text1 & "1"
runonce=true
End If
End Sub
然后在按键抬起事件时再把变量设置为runonce=false即可
全部回答
- 1楼网友:白昼之月
- 2021-03-04 02:38
不好意思没看清你是要在启动窗体5秒后运行时候 运行 这样 private declare sub sleep lib "kernel32" (byval dwmilliseconds as long) private sub form_load() sleep (5000) '等带5秒 shell "notepad", 1 sleep (1000) '等带1秒 call keybd_event(65, 0, 0, 0) '模拟按下"a"键 sleep (2000) '等带2秒 call keybd_event(66, 0, 0, 0) '模拟按下"b"键 me.show end sub 然后再添加一个模块 在里面写上 public declare sub keybd_event lib "user32" (byval bvk as byte, byval scan as byte, byval dwflags as long, byval dwextrainfo as long) 如果你要一启动就要看见窗体可以添加一个timer控件 interval 设置为5000 把上面的代码换成private sub timer1_timer() shell "notepad", 1 sleep (1000) '等带1秒 call keybd_event(65, 0, 0, 0) '模拟按下"a"键 sleep (2000) '等带2秒 call keybd_event(66, 0, 0, 0) '模拟按下"b"键 me.show timer1.enabled = false end sub 其余不变 你可以自己灵活修改下 主要代码已经给你了 哪个shell 后面的1是正常显示窗体 vbhide 0 窗口被隐藏,且焦点会移到隐式窗口。 vbnormalfocus 1 窗口具有焦点,且会还原到它原来的大小和位置。 vbminimizedfocus 2 窗口会以一个具有焦点的图标来显示。 vbmaximizedfocus 3 窗口是一个具有焦点的最大化窗口。 vbnormalnofocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。 vbminimizednofocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。
- 2楼网友:琴狂剑也妄
- 2021-03-04 02:05
窗体中
Private Sub Form_Load()
HooK
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHooK
End Sub
下面是模块,加入至工程:
Private Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)
Private Type PKBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP = &H105
Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13
Private lngHook As Long
Public Function HotKey(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN, WM_SYSKEYDOWN
Call CopyMemory(p, ByVal lParam, Len(p))
If p.vkCode = vbKeyF5 Then '开始
Form1.Text1.Text=Form1.Text1.Text & "1"
End If
Case Else
End Select
End If
Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
End Function
Public Sub HooK()
lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HotKey, App.hInstance, 0)
End Sub
Public Sub UnHooK()
Call UnhookWindowsHookEx(lngHook)
End Sub
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯