shellexecutehooks(URL 执行挂钩 程序路径:shell32.dll 说明:外壳钩子,shellexecutehooks这个是什么东西?看不懂)
URL 执行挂钩 程序路径:shell32.dll 说明:外壳钩子,shellexecutehooks这个是什么东西?看不懂?
网友:半生酒醒 提问
URL 执行挂钩 程序路径:shell32.dll 说明:外壳钩子,shellexecutehooks这个是什么东西?看不懂
五星知识达人网友:爱难随人意 解答于 2022-04-01 23:05
基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
钩子也可以理解为WINDOWS留给我们的后门,比如你想控制键盘,在DOS时代很简单通过INT即可,而WINDOWS时代不允许我们直接操作硬件;由于WINDOWS是消息驱动,所以我们可以拦截键盘消息以达到控制键盘的目的。但是控制自己进程的消息固然很简单,要控制所有进程消息要利用钩子了。将钩子函数放在DLL中,所有的有关键盘的消息都必须经过钩子函数过滤,这样你就可以为所欲为了。
WINDOWS下的钩子程序就像DOS下的TSR(内存驻留程序)一样,用来截获WINDOWS下的 特定的消息,进行相应的处理。比如可以截获键盘输入的消息,来获得键盘输入的信息等。钩子程序可以通过API调用来驻留和脱钩。
运行机制每一个Hook(钩子)都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。 一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始, 而最早安装的钩子放在最后,也就是后加入的先获得控制权。Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。
钩子的分类一. 按事件分类,有如下的几种常用类型(1) 键盘钩子和低级键盘钩子可以监视各种键盘消息。(2) 鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。(3) 外壳钩子可以监视各种Shell事件消息。比如启动和关闭应用程序。(4) 日志钩子可以记录从系统消息队列中取出的各种事件消息。(5) 窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。此外,还有一些特定事件的钩子提供给我们使用,不一一列举。
二. 按使用范围分类,主要有线程钩子和系统钩子(1) 线程钩子监视指定线程的事件消息。(2) 系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。这是系统钩子和线程钩子很大的不同之处。几点需要说明的地方:(1) 如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。(2) 对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。(3) 钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。
1楼网友:愁杀梦里人 解答于 2022-01-02 00:22
是vb运行速度是很快的,shellexecute 0&, “open”, “d:\calc.exe”, “”, “”, 1 这一句固然是打开了一个计算器,但是打开的过程中,vb早已运行到下一个语句了,当然找不到这个程序,也就不能返回句柄,也就不能改变标题。解决办法:设定延迟,使vb等待程序打开以后,再向下运行。代码如下。==============private declare function findwindow lib “user32” alias “findwindowa” ( _byval lpclassname as string, byval lpwindowname as string) as longprivate declare sub sleep lib “kernel32” (byval dwmilliseconds as long) '延迟函数private declare function shellexecute lib “shell32.dll” alias “shellexecutea” (byval hwnd as long, byval lpoperation as string, byval lpfile as string, byval lpparameters as string, byval lpdirectory as string, byval nshowcmd as long) as longprivate declare function setwindowtext lib “user32” alias “setwindowtexta” (byval hwnd as long, byval lpstring as string) as longprivate const gwl_style = (-16)private const swp_showwindow = &h40private const hwnd_bottom = 1private const ws_caption = &hc00000private sub form_load()dim chwnd as longshellexecute 0&, “open”, “calc”, “”, “”, 1sleep 50 '我这里延迟50就可以,请根据自己情况修改。chwnd = findwindow(vbnullstring, “计算器”)setwindowtext chwnd, “jisuanqi”end sub
本文地址:https://www.cubemovie.cn/hetong/42.html