vb6.0全局钩子,全局组合键问题?

本课我们封装了一个api hook的类模块,并且做了注入调用示范,当我们调用信息框(messagebox)易语言封装的信息框也可以,这个API的时候,我们hook下个钩子,让它打开系统的计算器,不执行hook的话那就是一个信息框,所以,我们可以劫持为我们自己任意想运行的进程。你如果在WIN10测试的计算器,首先要确定你的WIN10是否安装了计算器。我们在测试文件先声明一个变量A,类是:apihook,

提取码:加QQ群: 群文件下载

内容 介绍GetHashCode在VB6 如何在。net中做一个类似c的导出 让我们做一些更复杂的事情:钩子 .NET来了,让我们回到VB6项目 结论引用历史 介绍 本文的目的是在不涉及COM的情况下解释。net和VB6之间的互操作。为了实现这样的结果,我们将从VB中导出一些类似c语言的函数。NET DLL(等一下,您将看到如何操作)。本教程的第一部分将介绍一种技术使用一个非常简单的示例,然后它将解释了如何设置一个全局钩子使用VB(6和. net),正常情况下不可能没有涉及C或c++,但出口从。net C-way我们会这样做。 GetHashCode方法在VB6 每个优秀的。net程序员都知道String类的GetHashCode方法:它“返回这个字符串的哈希代码”。现在假设,出于某种原因,你需要使用算法[String]。GetHashCode方法在VB6。让我们考虑一种聪明的方法来做这件事。VB6代码(VB6Hasher项目)非常简单。您只有一个带有两个文本框和一个按钮的表单:当您单击按钮时,第一个文本框的内容将被散列,结果将显示在第二个文本框中。

dll编辑.DLL中HookWndProc是可见的,检查依赖Walker 重要提示:要避免系统崩溃,还有一件基本的事情要做。一个全局钩子每秒会调用回调函数很多次,因此,这个函数必须非常快,否则你会拖慢整个系统,直到崩溃。如你所知,. net程序在第一次执行时由JIT编译器编译,所以我们的DLL在第一次调用HookWndProc时得到。这是非常危险的,因为在编译库时,同一个函数被多次调用,这总是导致系统阻塞。解决方案从SDK命令提示符手动编译DLL: 隐藏,复制Code

注意:Chk是一个函数,它检查API调用是否返回0,如果是,则抛出错误,否则返回接收到的值。我们说传递给SetWindowsHookEx的函数指针必须在外部DLL中,所以我们使用了LoadLibrary和GetProcAddress,它们分别在内存中加载指定的DLL,并获取指定函数(HookWndProc)的函数指针(地址)。你可能会问为什么我们没有像在VB6Hasher例子中那样使用声明语句;这有两个原因:首先,不能在通过Declare语句声明的函数上使用地址,其次,不能从SetWindowsHookEx获得所需的模块句柄。最后,钩子被设置好了。解释关于钩子的其余代码超出了本文的范围。 结论 在这篇文章中,我们看到了如何利用VB6中的。net功能来实现一些通常不可能实现的功能,而无需使用笨重的COM包装器,而只需从VB中暴露出来。NET一些类似c的方法。当您需要使用。net的底层特性时,这项技术非常有用(就像设置一个全局钩子一样)。你再也不需要找爸爸帮忙了! 参考文献 MSDN,对于各种Win32 API函数[^]非托管代码可以封装托管方法[^]- Emilio

很多人都知道,如果想在系统范围内屏蔽键盘上的任意按键需要使用全局键盘钩子,然而像win键这样“倔强”的按键又不是普通的键盘钩子就能搞定的。这里我提供一种利用底层键盘钩子屏蔽任意按键(包括win键)的方法,并且作成了.dll动态链接库,方便以后使用。钩子,是一种相对复杂一点的技术,通常用来监视系统中某一类型的事件,这些事件可以与某一线程相关(线程钩子),也可以是系统中的所有线程(全局钩子)。关于钩子的理论,我不想说太多,也无法说太多,因为那不是三言两语就能说清楚的。

本文的重点在于底层键盘钩子的应用,前些天CSDNVB版有人问如何实现屏蔽win键,说实话,这东西用VB也是可以做到的,只不过全局钩子的钩子函数必须写在标准dll中,而VB只能通过变通的方法做出标准dll,稍微有点麻烦,所以我索性用VC写了一个dll,这样VCVBDelphi等等都可以调用,而且我也留出了足够的接口,稍后就会看到。

有一点必须得声明一下,底层键盘钩子有一个半致命的缺点,就是只能在NT及其以上系统中使用,不过好在现在用2000XP2003的人绝对不在少数,将来用LongHorn的人估计也少不了,所以这点倒是不用太担心。

确保可以使用底层键盘钩子

// 底层键盘钩子函数

code与键盘上对应的按键屏蔽掉,按这些键将完全没有反应(包括win键)。事实上,对于virtual-key code只要一个字节就可以表示了,但KBDLLHOOKSTRUCT结构中的vkCodeDWORD型,所以为求统一我也采用4个字节(DWORD)。纵然如此,微软还是在MSDN中强调了,virtual-key code的值必须是1254之间的值,这点一定要注意。

StopMaskKey没有参数,表示停止屏蔽键盘按键。如果在程序中没有调用StopMaskKey停止屏蔽键盘按键,在进程或线程退出时将自动停止屏蔽,恢复原来的状态。当然进程和线程一定要正常退出,如果是被别的程序以TerminateProcessTerminateThread等微软不太建议使用的野蛮手段结束进程或线程的话,就不太好办了。 

对于VB,如果是在VBIDE环境中按F5启动程序,则必须调用StopMaskKey才能使键盘恢复状态,如果没有调用,则在退出VBIDE环境时由DLL恢复键盘状态。对于编译后独立执行的VB程序,则和VC编译后的程序一样,无论是否调用StopMaskKey,都将在程序退出时由DLL自动卸载钩子,恢复键盘状态。

我要回帖

更多关于 vue路由的钩子函数几种 的文章

 

随机推荐