Source Insight可以说是一款程序员必备的开发/阅读源码工具,美中不足的是SI没有标签栏,多个源码之间切换很不方便,于是我就乘闲暇之余写了该作品sihook:标签插件;不过严格意义上来说sihook并不算是插件,而是一个内挂:)

  如何给Source Insight添加标签栏呢?可以查看orbit的博客<<给Source Insight做个外挂>>系列;感谢orbit的分析,而且orbit再很早的时候就已经做了一个标签插件,我也下载和试用了他的插件,不过orbit的像个外挂,而我的更像内挂:),由于很久没写win程序,对windows消息也不熟悉,手头连spy++都没有,开始以为要hook住SI的某个内部函数来挂钩子窗口的创建和销毁,看了orbit的博客后发现原来SI是个标准的MDI程序,子窗口的创建和销毁都是WM_MDI*的消息,那事情就简单了,只要替换原SI的wndproc就可以实现我们想要的事情.orbit的插件居然是用mfc做的dll,代码中还有线程和定时器,用起来还要个loader来加载,使用起来不太方便,在线程中操作UI怎么看都觉得有点别扭,既然已经注入SI程序了,那我们就因该做的更彻底更底层一点:).

  经过几年的编程积累,也有点感悟,越来越觉得c++太繁杂了,而c的清晰精简让我越来越欣赏,一段c代码能很好表达清楚的逻辑,c++开发者喜欢绕上一大圈来实现,更不提那些变形的VC和我从来没搞懂过的MFC,几年以前接触MFC依葫芦画瓢的时候总是搞不懂MFC在干些什么,现在回过头来看,MFC完全就是一个失败的设计.好了,不吐槽c++和该死的VC+MFC了,这次sihook用c开发,gcc编译,偷懒没装MSYS用CodeBlocks做IDE,Makefile都省了:)

  下面我简单介绍一下sihook的实现原理:

  1,插件的自动加载msimg32

  几年前dll都是用CreateRemoteThread方法来加载,就是必须要有个exe的loader,而现在有了msimg32延迟加载漏洞,腰不酸了腿不疼了,加载外挂更方便了:),具体原理我就不多介绍了,网上一搜一大把.

  2,肢解SI之siframe

  SI主窗体是siframe,由于msimg32是延迟加载,由hook CreateWindowEx调试发现,当我们的dll载入的时候,siframe和mdiclient已经创建了,而si_sw未创建,那么我们直接得到当前进程的HWND就是siframe的HWND了,然后SetWindowLong替换窗口过程,只关心WM_SETTEXT消息,WM_SETTEXT设置标题的时候我们在后面加上"加强版"的字样,然后以siframe为父窗体创建我们的systabcontrol32控件.

  3,肢解SI之mdiclient

  mdiclient是SI中最重要的一个窗口,它管理着源码窗口的创建销毁,首先用FindWindowEx得到mdiclinet的句柄,然后SetWindowLong替换窗口过程,这里面要处理的消息有WM_WINDOWPOSCHANGING;WM_MDICREATE;WM_MDIDESTROY;WM_MDIACTIVATE;

  WM_WINDOWPOSCHANGING是窗口大小改变的消息,这时候要处理tab的大小和mdiclient自身的大小,要在oldwndproc执行之前处理;

  WM_MDICREATE;WM_MDIDESTROY;WM_MDIACTIVATE;要在oldwndproc执行之后处理,这样就可以直接拿到子窗口的句柄处理了.

  WM_MDICREATE消息用FindWindowEx得到新创建的si_sw源码窗口的句柄,替换窗口过程

  WM_MDIDESTROY消息直接能拿到HWND,同步删除tab标签

  WM_MDIACTIVATE也能直接拿到HWND,同步激活tab标签

  4,肢解SI之si_sw

  si_sw子窗口就是源码显示窗口了,这个窗口我们只关心WM_SETTEXT消息,得到当前源码的标题(包括标题的变更),直接显示在tab上,这样就不用一个定时器去不停的比较了;

  5,tabctl控件

  为了精简,直接用sdk编程,只能用系统自带的systabcontrol32控件来做标签了,我封装了一层接口方便上层调用,包括增加,删除,双击关闭,改变选项卡颜色,调整位置高度等.说起来这是我第一次用systabcontrol32这个控件,做的很难看,如果有sdk美化高手知道怎么做的漂亮一点,可以给我留言,再此先表示感谢.另外双击关闭标签的同时要关闭源码窗口,看orbit的介绍要发WM_CLOSE消息,而且他的代码确实是这么实现的,并且有效,但是我怎么试都不灵,最后用OD一调试,发现SI自己发的是WM_SYSCOMMAND消息,WPARAM参数是SC_CLOSE,于是我也用SC_CLOSE消息来关闭文档:)

  OK,基本原理就是上面几点,理清楚了制作标签内挂就很容易了,整个工程不算tabctl控件源码不超过10个函数,以下是效果图和插件下载包

  sihookv1.0下载:[点我]

  安装:解压sihook.zip两个dll放到SI目录即可

  删除:删除SI目录msimg32.dll和sihook.dll即可

  源代码地址:https://github.com/redxu/sihook

  注:测试发现某些XP sp2装了某些卫士的机器会无法使用此插件,msimg未加载,原因调查中

Source Insight 3.X 标签插件v1.0发布相关推荐

  1. 【易语言模块】MP3信息标签解析V1.0[源码]分享

    最近下载了许多MP3歌曲,好多歌曲的信息不是乱码就是空白,在车载播放器中显示不正常,一个个修改起来很麻烦,就想做一个简便的信息修改器.   在网上找了好久,没有特别合适的mp3标签信息的模块,有一个m ...

  2. java 开源sns_JEESNS V1.0发布,JAVA 开源 SNS 社交系统

    JEESNS V1.0 发布了,本次更新内容: 增加后台管理员授权与取消功能 增加私信模块 解决在微博页面,左侧微博点赞过后,左侧展示列表小手会变黑,但是右侧热门出小手依然是白色 修复后台添加栏目.文 ...

  3. 社交系统ThinkSNS-plus(TS+)V1.0发布!

    2019独角兽企业重金招聘Python工程师标准>>> 需要购买源码的同志们,依然随时可以联系我们手机:18108035545(同微信):电话:028-82884828 :QQ:32 ...

  4. drcom linux最新版,Drcom-client.org 上线暨新版 PUM v1.0 发布

    {撰文/Henry Huang} 感谢各位长期以来对 drcom-client 的支持!今天,在 drcom-client team 的努力下,drcom-client.org 正式上线,同时 drc ...

  5. Unity数据可视化图表插件XCharts3.0发布

    Unity数据可视化图表插件XCharts3.0发布 历时8个多月,业余时间,断断续续,XCharts3.0 总算发布了.如果要打个满意度,我给 3.0 版本来个80分. 对于代码框架结构设计的调整改 ...

  6. 笑脸墙创作工具(Smilewall Creator V1.0)发布

     笑脸墙创作工具(Smilewall Creator V1.0)发布 by EmilMatthew 08.03.06 笑脸墙创作工具(Smilewall Creator V1.0)发布,欢迎朋友们都来 ...

  7. CRM 365资源管理器 V1.0 发布

    CRM 365资源管理器 V1.0 发布 CRM 365资源管理器 1.0版下载 新增功能 1.资产Online 开发: 2.解决方案添加查看视图关系图功能. 注意:online连接方式配置中的组织名 ...

  8. source insight 安装Quicker.em插件

    Quicker.em插件的安装和使用 一. 将quicke.em文件添加到sourceinsight 安装目录的base目录下 二.打开source insight base工程,将quicker.e ...

  9. AOS V1.0 发布,JavaEE 应用基础平台

    2019独角兽企业重金招聘Python工程师标准>>> 经过一段时间的修正和完善,我觉得是时候发布AOS V1.0版本了.这个版本共有7个新增/优化/修复的变更. AOS平台简介(1 ...

最新文章

  1. 专家:教育等领域将成为人工智能“用武之地”
  2. JAVA技术周刊第一期:关于JVM你了解多少?看这篇文章就够了!
  3. java 写传奇游戏吗,文字版传奇游戏
  4. xml 属性value换行显示_跟光磊学Java开发-Java解析XML
  5. 解决办法:C++编译中[-Wreorder]
  6. 【三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1831期】
  7. 通用大数据架构-_通用做法-第4部分
  8. 数字通信原理的几个理解
  9. QT应用编程: windows下QT调用COM组件
  10. eMMC mmcblk0boot0
  11. 键盘锁定了,无法输入是什么原因?
  12. spring事务之REQUIRED
  13. 肯德尔秩相关系数matlab,常用的特征选择方法之 Kendall 秩相关系数
  14. 高级篇Docker复杂安装详说
  15. PDF怎么转长图?这些方法不妨了解一下
  16. 阿里云服务器备案流程(ICP备案)
  17. 开发中你不得不知的一些英文缩写(专业术语)
  18. 标致雪铁龙诊断软件diagbox 安装说明视频下载链接
  19. easy-rules规则引擎最佳落地实践
  20. java读取网络图片数据_如何利用java读取网络照片

热门文章

  1. ios与html数据交互,iOS iOS与html进行交互
  2. sybase数据库导出mysql_sybase导出数据库的表结构命令
  3. 服务器更改文件夹权限,云服务器如何修改文件权限
  4. 山东计算机编程哪个学校好,山东男孩,8岁懂电脑编程,10岁考上南科大,最后为何惨遭退学?...
  5. java 非法字符u3000_IDEA编码格式问题:Error:(3, 13) java: 非法字符: '\u0000'
  6. aop springboot 传入参数_java相关:springboot配置aop切面日志打印过程解析
  7. 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections
  8. Linux系统搭建FTP服务器
  9. digitalocean如何还原出厂设置
  10. 信而泰推出100G多速率测试模块:填补中国通信产业链短板