Windows自带的记事本打开一些简单的短小文本不错,但自带的这个记事本相应的也很残.比如查找替换功能,比如编码格式兼容问题…

为了使记事本使用更方便,我们有不少替代方案,比如 notepad2,notepad++,ultraedit…

个人比较喜欢notepad2-mod,替换分两种,一种直接改名为notepad.exe替换文件,另一种则是使用映像劫持,将名称为notepad.exe的进程劫持到我们指定的程序,以此实现启动记事本时打开我们要的notepad2.exe.

替换文件

Windows自带的notepad.exe在系统中有2~3份,64位系统则翻倍,其中必然有一份是源头,当系统发现Windows和system32目录下的notepad.exe不匹配时,则自带将其恢复.

对于xp或2003版本系统,用以下批处理即可完成:

1
2
3
4
5
6
7
8
9
10
rem just for xp or 2003
rem 把notepad2.exe和批处理放同一目录
copy notepad2.exe C:\Windows\system32\dllcache\notepad.exe /y
copy notepad2.exe c:\Windows\notepad.exe /y
copy notepad2.exe c:\Windows\system32\notepad.exe /y
rem notepad.ini是notepad2.exe的个性配置文件,如不需要则忽略
copy notepad.ini c:\Windows\notepad.ini /y
copy notepad.ini c:\Windows\system32\notepad.ini /y
echo 替换完成
pause

如果系统文件保护功能没有关闭,替换后会有系统文件更改提示,点保留更改即可.

Windows Vista之后的系统版本系统权限控制大大加强,所以不能像Windows xp下那样直接替换文件,我们需要额外设置些系统权限才可以.

我这里装的是win8.1,权限设置和win7等是一样的,必须先得取得所有权,才可以更改用户权限.

文件夹权限设定完成后,将我们需要的notepad2.exe改名为notepad.exe,复制替换系统文件,如果想以后恢复,则建议将系统该文件改名备份处理.

当提示目标文件夹访问被拒绝时,点击”继续”按钮才可以.

此时,我们已经将文件替换完成,其他地方剩下的文件以此类推.

替换完成后,当我们打开txt或原notepad.exe关联的文件时,将调用新的notepad.exe打开,编辑网页,查看ini啥的还带格式,语法高亮,简直不是舒服一点…

notepad2有个对应名称的配置,可以实现字体设置,语法主题设置等个性化配置,每次notepad2退出或F7时会保存在同目录的ini文件中.同样的,因为系统目录权限的问题,notepad2无法保存该配置,如果需要则可以在其他地方设置保存后将其复制到system32和Windows目录,因为之前notepad2已改名为notepad.exe,所以ini名称应该为notepad.ini.

至此,手工替换系统文件实现notepad2替代自带记事本就完成了.

当然,如果需要大量部署,要么自己封装系统的时候就替换好,要么可以尝试下批处理,从网上找了一段,未验证是否可行:

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
rem 取得所有权
takeown /f %systemroot%\notepad.exe
takeown /f %systemroot%\system32\notepad.exe
taskkill /f /im notepad.exe 2>nul
rem 备份原文件
ren %windir%\notepad.exe notepad.exe.bak
icacls %windir%\notepad.exe /grant %username%:f /t
icacls %windir%\system32\notepad.exe /grant %username%:f /t
copy /y notepad.exe %windir%
copy /y notepad.exe %windir%\system32
echo 替换完成
notepad

此批处理只考虑了两个目标notepad.exe,且只用于32位版本系统,自己稍加发挥修改下吧.

映像劫持

其实notepad2官方提供的安装包采用的就是映像劫持方式,这种方式的优点是不用处理复杂的系统权限,也不对系统文件造成破坏,简单方便,推荐使用.

手工修改注册表实现映像劫持注册表如下:

1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

这个注册表项可以实现进程名劫持,官方注册表如下:

1
2
3
4
 Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="\"C:\\Program Files\\Notepad2\\Notepad2.exe\" /z"

这个注册表看着就很明白了,打开notepad.exe时实际上被转到了notepad2.exe.本机notepad2安装在Program Files目录下,自己改改路径到自己notepad2.exe所在目录就好了.如果不想折腾,直接下载官方提供的安装包吧:http://www.flos-freeware.ch/notepad2.html

为了让使用更方便,我们可以在系统右键添加一个使用记事本打开,当要打开的文档未做关联时,可以直接右键用记事本打开,提供一个注册表,将注册表导入即可.

1
2
3
4
5
6
7
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\OpenInNotepad]
;右键显示啥名自己写啦...装B先写把英文...
@="Open with notepad"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\OpenInNotepad\command]
@="notepad.exe \"%1\""

替代记事本下载

现成的Windows自带记事本替代方案可见:notepad2-mod