首页
社区
课程
招聘
[原创]PEDIY---让注册表编辑器更人性(一)——增加 "转到(Goto)" 功能!
发表于: 2009-10-15 13:35 8774

[原创]PEDIY---让注册表编辑器更人性(一)——增加 "转到(Goto)" 功能!

2009-10-15 13:35
8774

【文章标题】: PEDIY---让RegEdit更人性(一)——增加 "转到(Goto)" 功能!
【文章作者】: slore
【作者邮箱】: slorelee@yahoo.com.cn
【软件名称】: regedit.exe
【下载地址】: 附件
【使用工具】: OD,Restorator,ZeroAdder
【操作平台】: Windows XP SP3

本次修改的regedit已经修改一次,改了regedit的标题,和本身的类名,
以及删除了对通过注册表设置DisableRegEditTools来禁用注册表编辑器的部分。
这样做的目的是打造一个不被禁用的注册表编辑器(特殊场合需要这样),但是改动并
不影响下面操作,所以如果你要在默认的注册表编辑器增加该功能,拷贝我的补丁到
原注册表编辑器即可。


PEDIY当然先开Windows的刀了……(我不是第一人哦,记事本,计算器都被改的不行了。)
但是诸多修改只是练手,个人更注重实用性。

继先前对windows 任务管理器的增强之后,今天我们来让注册表编辑器更人性吧。
对任务管理器DIY的链接:
http://bbs.pediy.com/showthread.php?t=95905

前言
一直以来微软各个操作系统上的注册表编辑器都没有转到功能,经常要查看注册表的时候
难免要麻烦一番,一级一级的展开,看来是MS不喜欢我们去动注册表吧。虽然打首字母可以
快速定位,但是还是很麻烦,你觉得呢?
很多第三方注册表编辑器,提供了这个功能,但是基本需要注册,而且功能对于我来说有些
太繁琐了,主要三方动不动就更新……
如果你觉得当前对注册表编辑器的使用你很满意了,那么下面的内容你当作PEDIY的练手吧。

让注册表快速定位是我还不会一点编程的时候就希望用的,每次打开注册表编辑器都感慨,
如此简单的功能为什么不给呢……还好我的电脑(资源管理器)这个更经常用的东西是有的。
毕竟用人家的东西,不满也只好自己忍受了。
曾经用VB写过一个"地址栏",其实是一个程序,用SetParent把自己做到注册表编辑器上,但是
不会Hook他的WM_RESIZE消息,拖动下窗口就不见了……一直就搁浅了(而且用总是Shell的嫌
疑,效率也不高)。

过了5,6年,今天决定○一下自己这个梦。给注册表编辑器进行DIY,加上这个功能!

让RegEdit更人性(一)——增加 "转到(Goto)" 功能!
让RegEdit更人性(二)——添加 "地址栏" 功能! 
(计划中...,能力还不够,还需了解些知识)

大家都知道注册表编辑器有LastKey和收藏夹为大家方便访问。所以里面一定有代码去实现,所
以我们去找下吧。OD打开Regedit,查找参考字符串找到LastKey有2个,进去看下一个后面用了
SetRegValue应该是关闭的时候保存当前位置的,下断Run也证实了。
进另一个地方F8单步看读取了LastKey后到了下面:
01005D4F  |.  50                 PUSH EAX
01005D50  |.  E8 D2E7FFFF        CALL RegEdit.01004527

跟进去发现这个就是我们要找到的函数啦,而且调用很方便,
就一个参数要去的路径字符串的指针地址(字符串是Unicode方式存储)。

这个CALL RegEdit.01004527我们就记下来。

下面我们需要一个对话框,还有对应菜单选项。
用资源编辑器打开Regedit,

对话框我们先打开104资源
104 DIALOGEX 32, 24, 252, 53, 0
STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "加载配置单元"
FONT 9, "宋体", 400, FALSE
{
 LTEXT "项名称(&K):", -1, 6, 6, 134, 8
 EDITTEXT 1001, 6, 17, 240, 12, ES_AUTOHSCROLL
 DEFPUSHBUTTON "确定", 1, 142, 35, 50, 14
 PUSHBUTTON "取消", 2, 196, 35, 50, 14
}

做简单修改,去掉DS_CONTEXTHELP样式(右上角的帮助按钮),
改改名称,把EDITTEXT的ID改为1000,并设置确定按钮默认禁用(代码有解释),
并添加为118号对话框资源。
结果如下图所示:


下面增加菜单项,转到菜单103处:
在查看菜单项我们修改如下:
 POPUP "查看(&V)", 514
 {
  MENUITEM "状态栏(&B)", 668
  MENUITEM "", -1, MFT_SEPARATOR
  MENUITEM "拆分(&L)", 670
  MENUITEM "", -1, MFT_SEPARATOR
  MENUITEM "显示二进位数据(&D)", 679
  MENUITEM "", -1, MFT_SEPARATOR
  MENUITEM "转到(&G)...\tCtrl+G", 888
  MENUITEM "", -1, MFT_SEPARATOR

  MENUITEM "刷新(&R)\tF5", 648
 }

888是菜单的ID不重复就好了,我们给它加个加速键。
资源编辑器打开快捷键(ACCELERATOR 资源)列表,在后面追加如下:
888: "Ctrl+G"
//菜单ID和对应快捷键

看了下默认的空间似乎都不大,所以自己用ZeroAdder添加了一个1KB的区段。
---------------------------
Cave Info
---------------------------
 Section      RVA     Offset      Size
   .text    00018908  00017D08  000000F8
   .data    00019229  00018029  000001D7
   .rsrc    0006236D  0002056D  00000093
   Slore    00063008  00020608  000003F8
---------------------------
确定   
---------------------------

菜单消息处理
01006327  |. /0F8F 97000000    JG RegEdit.010063C4  '这里打开我们的对话框

比768(0x300)大的ID号从这里跳转处理。。。我们的菜单888(0x378)就加在这里吧
(其实这条判断链上能写地方很多,自己凭喜好选择吧)。

我们写补丁的地址在 01063010

所以将010063C4处:


010063C4  |> \8BC6          MOV EAX,ESI
010063C6  |.  2D 00050000   SUB EAX,500                              ;  Switch (cases 500..501)
010063CB  |.  74 1C         JE SHORT regedit.010063E9

010063C4   >-\E9 47CC0500   JMP RegEdit.01063010
010063C9      90            NOP
010063CA      90            NOP
010063CB   .  74 1C         JE SHORT RegEdit.010063E9

01063010    B8 78030000     MOV EAX,378                   ;EAX设置为888
01063015    3BF0            CMP ESI,EAX                   ;比较点击的菜单ID和888
01063017    75 06           JNZ SHORT RegEdit.0106301F    ;不相等转程序原来010063C4的代码
01063019    57              PUSH EDI                      ;如果是我们的"转到"菜单,调用01063030处函数
0106301A    E8 11000000     CALL RegEdit.01063030
0106301F    8BC6            MOV EAX,ESI                   ;程序原来
01063021    2D 00050000     SUB EAX,500                   ;010063C4的代码
01063026  - E9 A033FAFF     JMP RegEdit.010063CB          ;跳回程序原流程

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 291
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文章

你的动画是用什么软件做的?想学习一下
2009-10-15 13:44
0
雪    币: 500
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
Gif gif Gif 1.24

比较老的软件了。不过还可以用。
2009-10-15 13:59
0
雪    币: 136
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
做得好.  楼主自己做个regedit吧
2009-10-24 10:26
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
做得不错,很实用的一个功能~
2009-10-24 13:58
0
雪    币: 248
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
很好,很强大,很详细
2009-10-24 17:20
0
雪    币: 1763
活跃值: (959)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哇~很不错,原先打从认识注册表开始,就觉得系统自带的超不好用
特别是在查找一长串的注册表地址时,得一层一层“剥”
有了这工具,就方便很多了
2009-10-24 18:13
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很好,很强大,
2009-10-25 21:52
0
雪    币: 247
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
非常好,学习一下
2009-10-25 22:14
0
雪    币: 210
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
厉害啊,进来学习
2009-10-26 00:42
0
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
有意思.....
2009-10-26 01:04
0
雪    币: 1414
活跃值: (396)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
虽然还不是很懂,但是我会慢慢学习。
2009-10-31 22:56
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
LZ好强大   支持一下
2009-11-2 20:04
0
游客
登录 | 注册 方可回帖
返回
//