b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

【干货】线程钩子和系统钩子能实现的只是钩子钩子

电脑杂谈  发布时间:2021-04-19 05:00:27  来源:网络整理

要立即了解VB钩子,

最初,这是因为我们想要制作一个小型软件,其中一部分是使用鼠标来定位坐标。也就是说,表单本身的焦点可能会离开,并且无法使用表单的mousedown事件。然后,可以使用钩子。基本思想是使用钩子获取鼠标单击消息,然后记录光标的坐标。挂钩分为线程挂钩和系统挂钩。线程挂钩只能挂钩来自该线程的消息,而系统挂钩可以挂钩系统中的所有消息。 VB只能实现线程钩子。即使线程钩子似乎可以在鼠标上操作,它们也不会成功! !

学习总是由问题引起的。也许问题很简单,但是如果我设法找到答案,我一定会得到回报,对吗?哈哈。

第一步:创建一个钩子。以我的理解,实际上是使用API​​函数将回调函数的地址添加到挂钩队列中。当然,这个队列可能只有一个钩子。然后,当发生硬件中断或软中断时,操作系统将在处理消息时处理此挂钩,并选择一个应用程序函数来处理它。 vb的hook函数放置在一个模块中,在进行确认时使用public,也就是说,在moulde中,哈哈,我不知道是否有任何错误。好吧,如果您想创建一个钩子,请使用它

公共声明函数SetWindowsHookEx Lib“ user32”别名“ SetWindowsHookExA”(ByVal idHook长,ByVal lpfn长,ByVal hmod长,ByVal dwThreadId长)

此API函数。在此括号中,几个参数的含义非常简单:

公共声明函数SetWindowsHookEx库“ user32”别名“ SetWindowsHookExA”

(ByVal idHook As Long,我想是钩子的ID。(要安装的钩子类型,较简单的是您要拦截的消息类型,是键盘还是鼠标...如果它是键盘挂钩,则为:WH_KEYBOARD或直接写由常量表示的值)

ByVal lpfn As Long,代表一个地址:注意:如果dwThreadId参数为0或另一个进程创建的线程的ID,则lpfn必须指向DLL中的钩子过程,这意味着这是一个系统钩 。它属于VB中的线程挂钩,因此请使用

以这种方式调用钩子程序名称的地址

ByVal hmod为Long,表示.DLL的hInstance。如果是Local Hook,则值可以为Null(可以在VB中传递0),如果是Remote Hook,则可以使用GetModuleHandle(“。dll name”)进行传递,这意味着我们应该设置在VB中为0

ByVal dwThreadId As Long dwThreadId值是与已安装的挂钩过程关联的线程的标识符。如果为0,则挂钩过程与所有线程相关联。在VB中,我们将其设置为App.ThreadId

第2步:编写钩子函数,即钩子钩住消息时要运行的函数

公共函数MyKBHook(ByVal nCode长,ByVal wParam长,ByVal lParam长)

如果nCode> = 0那么

MsgBox“您按下了按键”

如果结束

结束功能

每个人都可以理解此功能。函数的名称从其自身开始。我想将其用作键盘挂钩。只要钩子位于前面,就将其包括在内

挂钩ID被分配给常数WH_KEYBOARD,并且此处的函数名称被赋予lpfn,以使该挂钩函数成为键盘挂钩函数。

参数介绍如下:

nCode:此参数根据不同的钩子产生不同的值。

wParam,lParam包含截获的消息内容,它也与hook的类型和nCode的值不同。例如,在键盘挂钩(KeyBoard)中,wParam是键的返回码。

第三步是了解其他两个API函数:

([1) CallNextHookEX调用下一个钩子,并将消息传递到下一个钩子程序

声明:公开声明函数CallNextHookEx Lib“ user3 2. dll”(ByVal hHook为长,ByVal nCode为长,ByVal wParam为

长,lparam任意)

参数说明:

vb钩子键盘记录_鼠标钩子vb_vb鼠标钩子

hHook,SetWindowsHookEX的返回值

nCode,wParam和lparam只是其三个参数,并且具体功能并不明显。使用时,您可以直接填写这三个形式参数。

为什么要有此CallNextHookEx函数?其实原因很简单。假设系统中有两个程序:程序A和程序B,首先A安装了一个键盘钩子,然后他编写了钩子函数,一切都完成了,等待有人按下键盘,然后他可以响应。然后B赶紧过去。他还安装了一个键盘挂钩,系统自然将它们排队。不幸的是,后面的B排在A的前面,也就是说,当按下键盘时,B的挂钩被激活了。在处理了钩子功能之后,他拍了拍屁股,然后离开,A只能看透秋天的水。 。为了解决这个问题,每个人都需要共同努力。你如何工作的?也就是说,所有钩子函数后面都有一个CallNextHookEx,以调用等待该消息的相同类型的下一个钩子。当然,除非您希望阻止将此消息传递给其他人,否则您不需要CallNextHookEx。 。 。

([2) UNHookWindowsHookEX:释放钩子

声明:私有声明函数UnhookWindowsHookEx Lib“ user3 2. dll”(ByVal hHook一样长)

参数说明:

hHook,要释放的钩子的名称

释放挂钩之后,系统资源可能无法成功释放。目前正在使用中

set hook =没有任何东西可以完全释放系统资源。

该钩子像一台全方位摄像机。当然,它占用了大量资源,因此在不需要时必须将其删除。

第四步是编写最简单的钩子

(1)打开VB,创建一个新窗口,添加要编写的公共模块

公共声明函数SetWindowsHookEx Lib“ user32”别名“ SetWindowsHookExA”(ByVal idHook长,ByVal lpfn长,ByVal hmod长,ByVal dwThreadId长)

公共声明函数UnhookWindowsHookEx Lib“ user32”(ByVal hHook As Long)只要

公共建筑WH_KEYBOARD = 2

公共挂机

公共函数MyKBHook(ByVal nCode长,ByVal wParam长,ByVal lParam长)

如果nCode> = 0那么

MsgBox“您按下了按键”

如果结束

结束功能

([2)查找窗口代码窗口并编写:

私人子Form_Load()

hHook = SetWindowsHookEx(WH_KEYBOARD,AddressOf MyKBHook,0,App.ThreadID)

结束子

私人子表格_卸载(取消为整数)

UnhookWindowsHookEx hHook

vb鼠标钩子_vb钩子键盘记录_鼠标钩子vb

结束子

退出时,必须使用表单右上角的叉号关闭此简单的钩子,并且您不能使用VB调试来停止闭合,否则钩子仍然处于打开状态。函数MyKBHook可以看作是一个带有返回值的函数,我们可以将其更改为:

公共函数MyKBHook(ByVal nCode长,ByVal wParam长,ByVal lParam长)

如果nCode> = 0那么

MsgBox“您按下了按键”

如果wParam = 115 And(lParam And&H2000000 0) 0然后

if(lParam And&HC00000 0) = 0那么是否要执行ALT + F4操作

MsgBox“您按了ALT + F4”

MyKBHook = 1

退出函数'退出,表示以下CallNextHookEx函数不再运行且消息已被占用,也称为阻止

其他

MyKBHook = 0

如果结束

如果结束

呼叫CallNextHookEx(hHook,nCode,wParam,lParam)

结束功能

这有点严格,带有附加的返回值,我们可以根据此返回值判断是否处理它以及如何处理它。还有CallNextHookEx,它将消息传递到下一个钩子。

到目前为止,只能执行键盘挂钩。现在列出了接受的鼠标挂钩示例。

(在1)模块中输入:

公共常量WM_MOUSEMOVE =&H200

公共建筑WM_LBUTTONDOWN =&H201

公共建筑WM_LBUTTONUP =&H202

公共常量WM_LBUTTONDBLCLK =&H203

公共常量WM_RBUTTONDOWN =&H204

公共常量WM_RBUTTONUP =&H205

公共常量WM_RBUTTONDBLCLK =&H206

公共常量WM_MBUTTONDOWN =&H207

vb钩子键盘记录_vb鼠标钩子_鼠标钩子vb

公共常量WM_MBUTTONUP =&H208

公共常量WM_MBUTTONDBLCLK =&H209

公共常量WM_MOUSEACTIVATE =&H21

公共常量WM_MOUSEFIRST =&H200

公共常量WM_MOUSELAST =&H209

公共常量WM_MOUSEWHEEL =&H20A'上面是鼠标的值

私有声明函数CallNextHookEx Lib“ user32”(ByVal hHook长,ByVal nCode长,ByVal wParam长,lparam任何长)

公共函数HookProc(ByVal nCode长,ByVal wParam长,ByVal lparam长)

如果是nCode

HookProc = CallNextHookEx(hHook,nCode,wParam,lparam)

退出功能

如果结束

如果wParam = WM_RBUTTONDOWN那么

MsgBox“ aa”

如果结束

结束功能

(以2)的形式输入:

私有声明函数SetWindowsHookEx Lib“ user32”别名“ SetWindowsHookExA”(ByVal idHook长,ByVal lpfn长,ByVal hmod长,ByVal dwThreadId长)

私有声明函数UnhookWindowsHookEx Lib“ user32”(ByVal hHook As Long)只要

私有const WH_MOUSE_LL只要= 14

私人子Form_Load()

hHook = SetWindowsHookEx(WH_MOUSE_LL,HookProc的地址,App.hInstance,0)

结束子

私人子表格_卸载(取消为整数)

呼叫UnhookWindowsHookEx(hHook)

结束子

在此示例中,右键单击鼠标会弹出msg a

注意:本文引用了Internet上的一些流行观点。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-369290-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...