后台VB怎样得到键盘信息,如Ctrl键被按下。急!急!急!很容易,是不是?

scorpio 2000-04-01 08:22:00
请问:
我想实现VB在后台运行, form隐藏,在其他应用程序正常运行时,VB 在后台能截获键盘击键, 如“F10"? 怎么办??
...全文
410 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DeityFox 2001-11-07
  • 打赏
  • 举报
回复
如果只是截获特定的几个热键,那这两个api函数就行

Public Declare Function RegisterHotKey Lib "user32" Alias "RegisterHotKey" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long

Public Declare Function UnregisterHotKey Lib "user32" Alias "UnregisterHotKey" (ByVal hwnd As Long, ByVal id As Long) As Long

如果要截获全部键盘输入,那就要甬道系统钩子了,我有这方面Delphi的原码,可以于我联系:
daniel_0571@163.com

ynduanlian 2001-11-07
  • 打赏
  • 举报
回复
我也很想知道这个问题怎么解决:
SetWindowLong只能截获特定窗体的键盘击键,要截获用户的任一键盘击键,好象不太可行,不知应如何实现?
据说必须编写成DLL,有这方面的VB或Delphi或VC代码吗?
freehero 2000-04-06
  • 打赏
  • 举报
回复
有现成的控件,msghook可以试一试。下载在 vbapi.yeah
fs_windy 2000-04-03
  • 打赏
  • 举报
回复
'建立Hook函数如下:
Public Function Hook(HookHwnd As Long) As Long
Hook = SetWindowLong(HookHwnd, GWL_WNDPROC, AddressOf WindowProc)
End Function

’处理Hook的过程如下:
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ErrOnWindowProc
'// 此处进行消息处理
Select Case uMsg
Case WM_KEYDOWN
'//消息处理,注意wParam和lParam的值,它是你想要的
End Select

'回调其它的缺省的消息处理过程
WindowProc = CallWindowProc(gPrevWndProc, hw, uMsg, wParam, lParam)

ErrOnWindowProc:

End Function

'退出时记得UnHook呵!!!!!!!!
Public Function UnHook(HookHwnd As Long, lpPrevWndProc As Long) As Long
UnHook = SetWindowLong(HookHwnd, GWL_WNDPROC, lpPrevWndProc)
End Function

在Hook的过程中不要使用VB中的Pause中止,这可是个灾难!!!!!!!

Good Luck!
greentape 2000-04-02
  • 打赏
  • 举报
回复
我所想到的方法稍微有点复杂
要用API SetWindowsHookEx
来设置WH_KEYBOARD Hook截获
WM_KEYUP和WM_KEYDOWN消息

最好用c写一个dll来实现
我也没做过,不知道你是否有
用Hook的经验
如果没有, 查一下MSDN吧。

需要的话,我们可以一起探讨
细节和实现

scorpio 2000-04-02
  • 打赏
  • 举报
回复
我试过,但要设置dwThreadId=0 ,并且lpfn 指向DLL 中的一个hook procedure,我不知如何设置参数 lpfn 和 hMod.

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧