发现XP的自动换行功能和状态栏功能就像鱼和熊掌一样不可兼得,于是用初学的知识试着改了一下,改了两晚上,也未成功。今天刚看了EnableMenuItem的结构定义。于是试着改了一下,居然成功了。嘿嘿。
关于XP记事本,状态栏的无法选中 的修改,论坛好像没有,论坛只有Win7的记事本。希望不算重复。
可以在EnableMenuItem下断修改。
EnableMenuItem函数的结构如下:
BOOL EnableMenuItem (
HMENU hMenu // handle to menu resource
UINT uIDEnableItem // menu item to enable, disable or gray
UINT uEnable // menu item flags
);
在ASM中调用的格式是:
PUSH uEnable
PUSH uIDEnableItem
PUSH hMenu
CALL [KERNEL32!EnableMenuItem]
对于我们来说,重要的是找到那个激活菜单项的标志
用ResHacker得知状态栏的ID为0x1b
去掉无关的EnableMenuItem调用后。只剩下两个EnableMenuItem
然后,运行全速OD。然后,就要确定是哪个EnableMenuItem了。当我们选中“自动换行”功能后,OD会停在
01002F1E |> /50 push eax ; |hMenu
01002F1F |. |FF15 5C120001 call dword ptr [<&USER32.EnableMenuIt>; \EnableMenuItem
01002F25 |. |E9 3D040000 jmp notepadx.01003367
跳转来自 010031DA
来到
010031CC |. FF15 48120001 call dword ptr [<&USER32.CheckMenuIte>; \CheckMenuItem
010031D2 |. 6A 01 push 1
010031D4 |. 90 push ebx
010031D5 |. 6A 03 push 3 ; /Pos = 3
010031D7 |. 57 push edi ; |hMenu
010031D8 |. FFD6 call esi ; \GetSubMenu
010031DA |.^ E9 3FFDFFFF jmp notepadx.01002F1E
根据enablemenuitem的结构可知。只要Nop掉push ebx即可以让EnableMenuItem 失效。
即010031d4 改为nop 再另存修改。
试验即成功。
小心打击我。我很脆弱。
- 标 题: XP记事本,状态栏无法选中的修改
- 作 者:fairynull
- 时 间:2010-09-08 23:31:40
- 链 接:http://bbs.pediy.com/showthread.php?t=120070