永发信息网

关于vb6全局键盘事件

答案:3  悬赏:30  手机版
解决时间 2021-03-04 20:00
  • 提问者网友:浩歌待明月
  • 2021-03-04 00:23
代码如下:
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。请问高手,怎么修改代码?
最佳答案
  • 五星知识达人网友:低血压的长颈鹿
  • 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即可
全部回答
  • 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯