十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Windows的钩子函数分两种,一种是全局的,一种是线程的。全局的钩子函数可以捕获任何应用程序的消息,但必须是标准的DLL才能实现,VB做不了。VB可以实现线程的,就是当前应用程序的消息,这对鼠标消息的捕捉有影响。
成都创新互联公司是一家集网站建设,敖汉企业网站建设,敖汉品牌网站建设,网站定制,敖汉网站建设报价,网络营销,网络优化,敖汉网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
SetWindowsHookEx定义如下:
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
idHook是钩子类型,如WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。hmod用于全局钩子,VB要实现钩子,必须设为0。dwThreadId用于线程钩子VB中可以设置为App.ThreadID。lpfn为钩子函数,在VB中可以使用AddressOf获得钩子函数的地址。这个函数因为钩子类型不同而有所不同。如键盘钩子为:
Public Function KeyboardProc(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
如果Code不为0,钩子函数必须调用CallNextHookEx,将消息传递给下面的钩子。wParam和lParam不是按键。
可以到这里看看:
.net的代码真木有写过。
VB 可以屏蔽 包括ctrl+alt+del在内的所有键盘按键消息
其实你只要后台截获按键的消息后,直接屏蔽掉就可以了。
VB代码我有 net木有。
VB对于win32 API的支持还是不错的。而且比起用C++来说还简化了不少。建议你看些windows系统机制的资料,比如windows消息处理机制,windows窗口过程的实现等。最好是去看看MFC的教程,会让你对win32 API有更深入的了解。推荐孙鑫的《VC++深入详解》,给其他窗体发送消息,钩子什么的都有详细的解释。
关于做钩子,使用SetWindowsHookEx,UnhookWindowsHookEx,CallNextHookEx,CopyMemory四个win32 API函数,再加上一个自己写的回调函数就可以实现。
控制别的窗体最小化,给其他窗体发送消息,首先用FindWindow函数找到目标窗体的句柄(对于VB自己的窗体来说Me.hwnd属性),然后用SendMessage,PostMessage函数发送消息。还可以用SetWindowText但是windows消息有几百种,各种消息的参数可能是不同的。要查MSDN搞懂你要使用的消息的参数结构。
代码:关闭其他窗口:
模块中的声明:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE = H10 '定义消息常量
窗体中:
Dim hnd As Long '定义一个长整型变量储存句柄
Private Sub Form_Load()
hnd = FindWindow(vbNullString, "test") '获取目标窗体句柄,这里目标窗体的标题为"test"
SendMessage hnd, WM_CLOSE, 0, 0 '发送WM_CLOSE消息关闭窗体
End Sub
这是微软MSDN官方文档,里面详细介绍了Hook机制,别告诉我你看不懂英文哦
(VS.85).aspx
我当初自己研究Hook技术时就是看的这个
几个重要的函数:
// 安装钩子
HHOOK SetWindowsHookEx(int idHook, // 钩子类型
HOOKPROC lpfn, // 回调函数
HINSTANCE hMod, // 实例句柄
DWORD dwThreadId // 线程ID
); // 返回值:钩子句柄
// 将消息传递给下一个钩子
LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam); // 太累了不想翻译了
// 卸载钩子
BOOL UnhookWindowsHookEx(HHOOK hhk);
// 鉴于你给的悬赏分太低,我就不多写了,自己研究MSDN文档吧,祝你好运
// 顺便再说一句,全局钩子要在DLL中实现
/* 刚才看了你的资料,觉得你这人挺有意思,貌似VB.NET玩得不错,哈哈 */