开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 11439|回复: 44
收起左侧

[易源码分享] SHELLHOOK源码(全局拦截SHELL窗口消息)

[复制链接]
发表于 2020-1-2 09:57:54 | 显示全部楼层 |阅读模式   重庆市重庆市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
MsgNum整数型  
SetRet整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
' ShellHook是什么?当一个窗口创建、激活、关闭时,explorer总是能够捕获相应的消息,并更新任务栏上,就是通过ShellHook实现的。本课实现了对系统所有顶级窗口的拦截,和指定窗口的拦截。
' RegisterWindowMessage
' RegisterWindowMessage函数定义一个新的窗口消息,保证该消息在系统范围内是唯一的。通常调用SendMessage或者PostMessage函数时,可以使用该函数返回的消息值。
' 注释:
' RegisterWindowMessage函数通常用于为两个合作应用程序之间的通信登记消息。    若两个不同的应用程序登记了相同的消息字符串,则这两个应用程序返回相同的消息值。该消息一直维持被登记状态,直到Windows会话结束。当多个应用程序必须处理同一消息时才使用RegisterWindowMessage函数。在一个窗口类范围内发送私有消息时,获取分配给一个字串标识符的消息编号 &C000(49152) 到 &FFFF(65535)之间的一个消息编号。零意味着出错。
' https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registerwindowmessagea
' 字符串常见有:
' TaskBarCreated 一般用于Explorer崩溃后的托盘图标重建
' SHELLHOOK 配合RegisterShellHookWindow可用于拦截系统窗口创建等
' TaskbarButtonCreated 在win7里的任务按钮创建
' RegisterShellHookWindow
' https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registershellhookwindow
子程序名返回值类型公开备 注
UnShellHook整数型 卸载钩子,失败返回0,成功返回1或非零
参数名类 型参考可空数组备 注
hwnd整数型
返回 (DeregisterShellHookWindow (hwnd))
子程序名返回值类型公开备 注
SetShellHook整数型 安装钩子,失败返回0,成功返回1或非零
参数名类 型参考可空数组备 注
hwnd 
变量名类 型静态数组备 注
ret整数型 
MsgNum = RegisterWindowMessageA (“SHELLHOOK”)
如果真 (MsgNum = 0)
返回 (0)
ret = RegisterShellHookWindow (hwnd)
SetRet = SetWindowLongA (hwnd, -4, 到整数 (&NewProc))
返回 (ret)
子程序名返回值类型公开备 注
NewProc整数型 
参数名类 型参考可空数组备 注
Hwnd这个句柄是程序本身的句柄
uMsg用户的消息识别类型
wParam事件类别
lParam拦截的系统的窗口 的句柄
变量名类 型静态数组备 注
指定句柄整数型 
如果 (uMsg = MsgNum)
调试输出 (“拦截到的窗口的句柄:”, lParam)
' 通过这个句柄可以来对特定的窗口干你需要的事。
判断 (wParam = #HSHELL_WINDOWCREATED )  ' 顶级窗口的创建’
调试输出 (“顶级窗口的创建”)
判断 (wParam = #HSHELL_WINDOWDESTROYED )  ' 顶级窗口的销毁’
调试输出 (“顶级窗口的销毁”)
判断 (wParam = #HSHELL_ACTIVATESHELLWINDOW )  ' SHELL的主窗体将被激活
调试输出 (“SHELL的主窗体将被激活”)
判断 (wParam = #HSHELL_WINDOWACTIVATED )  ' 顶级窗体被激活
调试输出 (“顶级窗体被激活”)
判断 (wParam = #HSHELL_GETMINRECT )  ' 顶级窗体被最大化或最小化
调试输出 (“顶级窗体被最大化或最小化”)
判断 (wParam = #HSHELL_REDRAW )  ' Windows任务栏被刷新
调试输出 (“Windows任务栏被刷新”)
判断 (wParam = #HSHELL_TASKMAN )  ' 任务列表的内容被选中
调试输出 (“任务列表的内容被选中”)
判断 (wParam = #HSHELL_LANGUAGE )  ' 中英文切换或输入法切换
调试输出 (“中英文切换或输入法切换”)
判断 (wParam = #HSHELL_SYSMENU )  ' 显示系统菜单
调试输出 (“显示系统菜单”)
判断 (wParam = #HSHELL_ENDTASK )  ' 顶级窗体被强制关闭
调试输出 (“顶级窗体被强制关闭”)
判断 (wParam = #HSHELL_ACCESSIBILITYSTATE )  ' Windows NT5.0或以上版本有效,指示"可访问性"已被改变.
调试输出 (“可访问性已被改变”)
判断 (wParam = #HSHELL_APPCOMMAND )  ' 没有被程序处理的APPCOMMAND。见WM_APPCOMMAND
调试输出 (“没有被程序处理的APPCOMMAND”)
判断 (wParam = #HSHELL_WINDOWREPLACED )  ' wParam=被替换的顶级窗口的hWnd
调试输出 (“被替换的顶级窗口的hWnd”)
判断 (wParam = #HSHELL_WINDOWREPLACING )  ' wParam=替换顶级窗口的窗口hWnd
调试输出 (“替换顶级窗口的窗口hWnd”)
判断 (wParam = #HSHELL_FLASH )  ' 标题闪烁(HSHELL_REDRAW + HSHELL_HIGHBIT)
调试输出 (“标题闪烁”)
判断 (wParam = #HSHELL_RUDEAPPACTIVATED )  ' 顶级窗口切换:(HSHELL_WINDOWACTIVATED + HSHELL_HIGHBIT)
调试输出 (“顶级窗口切换”)





返回 (CallWindowProcA (SetRet, Hwnd, uMsg, wParam, lParam))
子程序名返回值类型公开备 注
_按钮_安装SHELL钩子_被单击  
SetShellHook (取窗口句柄 ())
子程序名返回值类型公开备 注
_按钮_卸载SHELL钩子_被单击  
UnShellHook (取窗口句柄 ())
常量名称常量值公 开备 注
HSHELL_WINDOWCREATED1 顶级窗体被创建
HSHELL_WINDOWDESTROYED2 顶级窗体即将被关闭
HSHELL_ACTIVATESHELLWINDOW3 SHELL的主窗体将被激活
HSHELL_WINDOWACTIVATED4 顶级窗体被激活
HSHELL_GETMINRECT5 顶级窗体被最大化或最小化(本例未用)
HSHELL_REDRAW6 Windows任务栏被刷新
HSHELL_TASKMAN7 任务列表的内容被选中
HSHELL_LANGUAGE8 中英文切换或输入法切换
HSHELL_SYSMENU9 显示系统菜单
HSHELL_ENDTASK10 顶级窗体被强制关闭
HSHELL_ACCESSIBILITYSTATE11 Windows NT5.0或以上版本有效,指示"可访问性"已被改变.
HSHELL_APPCOMMAND12 没有被程序处理的APPCOMMAND。见WM_APPCOMMAND
HSHELL_WINDOWREPLACED13 wParam=被替换的顶级窗口的hWnd
HSHELL_WINDOWREPLACING14 wParam=替换顶级窗口的窗口hWnd
HSHELL_HIGHBIT32768 掩码:&H8000&
HSHELL_FLASH32774 标题闪烁(HSHELL_REDRAW + HSHELL_HIGHBIT)
HSHELL_RUDEAPPACTIVATED32772 顶级窗口切换:(HSHELL_WINDOWACTIVATED + HSHELL_HIGHBIT)

DLL命令名返回值类型公开备 注
RegisterShellHookWindow整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
RegisterShellHookWindow
参数名类 型传址数组备 注
窗口句柄整数型
DLL命令名返回值类型公开备 注
DeregisterShellHookWindow整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
DeregisterShellHookWindow
参数名类 型传址数组备 注
窗口句柄整数型



i支持库列表   支持库注释   
spec特殊功能支持库
const(未知支持库)

SHELLHOOK.e

735.55 KB, 下载次数: 488, 下载积分: 精币 -2 枚

评分

参与人数 5好评 +3 精币 +9 收起 理由
andyfeifei + 1 + 2 YYDS~!
快乐小牛 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 5 支持开源~!感谢分享
hymm2003 + 1 感谢分享,很给力!~
大饼博士 + 1 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 10 天

发表于 2024-7-26 15:51:04 | 显示全部楼层   广东省深圳市
不错支持一下的哈哈
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2024-1-6 12:53:12 | 显示全部楼层   陕西省西安市
太厉害了
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 2023-5-20 07:39:56 | 显示全部楼层   四川省德阳市
6666666666666 有时候会造成系统任务栏消息无提示的情况
回复 支持 反对

使用道具 举报

结帖率:0% (0/4)

签到天数: 15 天

发表于 2023-3-12 12:49:40 | 显示全部楼层   江苏省无锡市
666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2023-1-14 10:00:16 | 显示全部楼层   福建省厦门市
666666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2022-9-18 23:12:30 | 显示全部楼层   四川省南充市
学习一下
回复 支持 反对

使用道具 举报

结帖率:83% (5/6)

签到天数: 14 天

发表于 2022-8-12 12:41:48 | 显示全部楼层   贵州省毕节市
在任务栏没有图标的窗口取不到真实句柄
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 2022-6-20 12:10:21 | 显示全部楼层   河北省保定市
谢谢大佬分享~
回复 支持 反对

使用道具 举报

发表于 2022-6-7 19:18:49 | 显示全部楼层   浙江省杭州市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2022-5-3 10:08:09 | 显示全部楼层   河南省周口市
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表