欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]修补增强WindowsXP SP3的Ctrl+Z撤销键

[原创]修补增强WindowsXP SP3的Ctrl+Z撤销键

    说些题外话, 不想看的直接从下面的"分割线"以下开始看. 
    可能很多人一进本贴, 就会喊道: 你怎么还用XP啊?
    不可否认, win7是很优秀的系统, 有着靓丽的外观与舒适的多媒体体验, 但现在XP仍然占有着用户市场第二的份儿, 在12%~16%间浮动, 略高于win8.
   毕竟XP发展时间长久, 稳定性获得世界认可. 例如银行ATM机上的系统就有用XP的.
    XP并没有十全十美, 在市场份额下降以后, 微软狠心将其抛弃, 话说不再发布针对XP的补丁. 留守XP的用户想获得微软更多的梦想支持化为泡影. 无奈之下只能靠一些民间的修补, 例如4G内存支持补丁等.
    鄙人在此也班门弄斧, 将XP系统资源管理器的CTRL+Z键改造, 为造福XP用户贡献一点微薄的力量.
-------------------------------------------分割线-------------------------------------------
    大家可能碰到过这样的问题, 就是习惯使用快捷键CTRL+Z对编辑文档做撤销操作, 很是方便.
    使用Windows的资源管理器对文件进行管理时, 同样支持CTRL+Z操作, 当复制文件到某个位置时, 按下组合快捷键CTRL+Z(或者在右键里选择"撤销复制"), 会弹出是否删除掉刚刚复制过去的文件的询问窗口. 
    然而, 如果是移动文件的话, 按下组合快捷键CTRL+Z(或者在右键里选择"撤销移动"), 会直接将移动的文件移回原来的位置, 要命的是大多数情况下, 不提示任何信息!  文件数量多或者文件较大并且是在不同分区间移动的时候, 撤销时会有移动回去的进度, 这能算提示么? 这根本是移动文件的提示而不是撤销提示.
    如果是刚刚进行移动的, 还好, 还知道被撤销移动的是什么文件. 但如果是10分钟前, 或者去吃饭回来, 不小心按下"撤销移动"(或CTRL+Z)呢? 也许一闪而过, 也许连这一闪而过都没有. 你还记得吃饭前移了什么东西么? 毫无疑问, 不出所料, 文件已经溜回原来的地方睡大觉去了! 
    这只是列举了一种情况, 当然还可能有其他原因造成的误撤销操作, 例如你在编辑某文件之类的, 软件界面突然直接消失了, 而此时你恰好错误的在桌面或在其他资源管理器所属的文件夹中按下CTRL+Z, 本来是要撤销正在编辑文件的某些修改, 无意中成为了撤销资源管理器的文件操作, 如果刚才移动了某些文件, 悲催了, 大部分不记得刚才移动了什么了.
    我提供的这个修改就是防止那些已被整理的文件不打报告就偷偷溜回原来地方.
以下是大致修补的关键代码及注释:   
(20160330的新补丁已在下面代码基础上进行了更进一步修正, 想研究的请加载补丁自己跳转到地址 7D78E920 )
;-------------代码开始-------------
        CMP DWORD [EAX+4],1
        JNZ SHFileOperationW
        PUSHAD
        PUSH 0                                                ;供存放判断标志
        PUSH 738                                                ;申请内存大小
        PUSH 40
        CALL LocalAlloc                                        ;申请内存
        MOV EDI,EAX                                        ;存储内存指针到EDI
        TEST EDI,EDI
        JE SHORT @NOMOVE                        ;如果申请内存失败跳走
        PUSH EDI                                                ;存储起来供释放
        MOV EAX,DWORD [ESP+2C]
        PUSH [EAX+C]                                        ;%s  源
        PUSH [EAX+8]                                        ;%s  目标
        PUSH @Format                                        ;要格式化的字符串
        PUSH 600                                                ;最大允许用到的内存大小
        PUSH EDI                                                ;申请得到内存
        CALL wnsprintfW
        ADD ESP,14
        MOV EAX,DWORD [ESP]
        PUSH 24
        PUSH @BeToMove                                ;窗口标题
        PUSH EAX                                                ;要显示的格式化内容
        CALL GetActiveWindow
        PUSH EAX
        CALL MessageBoxW
        MOV DWORD [ESP+4],EAX                ;将判断标志存储
        CALL LocalFree                                        ;释放内存
        CMP BYTE [ESP],6
        JNE SHORT @NOMOVE
@YESMOVE:
        ADD ESP,4
        POPAD
        JMP SHFileOperationW
@NOMOVE:
        ADD ESP,4
        POPAD
        RETN 4
DD 00000000
DD 00000000
DD 00000000
@Format:
        DB 60 4F 6E 78 9E 5B 81 89 A4 64 00 95 FB 79 A8 52
        DB 3A 00 09 00 0D 00 0A 00 1C 20 25 00 73 00 1D 20
        DB 09 00 0D 00 0A 00 30 52 0D 00 0A 00 1C 20 25 00
        DB 73 00 1D 20 17 54 3F 00 09 00 00 00 00 00 00 00
@BeToMove:
        DB 73 53 06 5C A4 64 00 95 FB 79 A8 52
        DB 00 00
;-------------代码结束-------------
    修补后的具体效果请点击图片查看下面的动态gif演示图, 比我文字描述的更直观!

————————————————2016-03-30已更新修补————————————————
强烈建议原先下载过的雪友重新下载并使用最新的修补
1. 解决本人三楼提到的回收站文件偷溜回去问题, 即增加了对回收站撤销删除的判断, 如下所示.

2.改为更人性化的 "回到目标目录" 的提示.
    改进后

20160330新版
32位补丁文件:
因为有大家的支持, 我会尽可能完善.

上传的附件 修复后演示.gif
SHELL32之Ctrl+Z撤销键最新修补20160330.rar
刚删进回收站的撤销.JPG
20160330改进修补.JPG

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功