【1】说明:此文原本发布于我的 CSDN 博客,但在 CSDN 处在“待审核”状态,用户无法浏览,因此转发到我的博客园博客。
-- 2018-12-04
【2】文章中提到的 PERcView 是我在几年前写的相关文章中写的一个研究性的 MFC 程序(比较简单粗糙,所以现在也没什么完善它的动力),在这里就补充上我重新编译后的可执行文件的下载链接:
https://files.cnblogs.com/files/hoodlum1980/PERcView_Bin.zip
(里面包含了 x86 和 x64 两个版本,请根据要打开的 exe/dll 目标文件是 x86 或 x64 的来选择对应的版本,这两个程序本来是可以合并成一个,但需要调整代码,我这里就懒得改代码了。)
这个工具的实现,可以参考我几年前写的博客:https://www.cnblogs.com/hoodlum1980/archive/2010/09/10/1822906.html
-- 2020-10-27;
我使用的输入法,是搜狗输入法 9.0 正式版(9.0.0.2502)。但比较讨厌的是,搜狗输入法的 SGTool.exe 会弹窗。同时这个程序还是用来设置属性用的,所以干掉这个程序以后,我们就没法再设置属性了。
(1)拒绝所有用户组对 SGTool.exe 的所有安全控制权限
先把输入法属性设置好。然后找到 SGTool.exe ,用管理员账户,右键-属性-权限,把全部用户组下面的全部权限都勾上拒绝,确定即可。这样这个弹窗的程序就被禁用了,当然,设置输入法的模糊音等属性也不行了(除非你再把它的权限复原)。
(2)修改 SogouPY.ime 的对话框模板 ID
禁止 SGTool.exe 以后,其他进程偶尔会弹出下面的对话框,再把它干掉就更清爽了:
用 ProcessExplorer 发现,搜狗输入法注入到其他进程里面有两个 ime 模块(实质等同于 DLL 文件),弹出这个对话框的是叫做 SogouPY.ime 这个文件。
用 VS2005 打开这个文件,可以看到这个对话框模板 ID 为 129 (0x81)。
用我自己写的 PE 文件资源查看小程序(这个小程序在我的 cnblogs 博客上有源码,我又加以改进,增加了资源 ID 在文件中的文件地址),可以看到对应的对话框 ID 在文件中的位置(简称为 FA):
在 SogouPY.ime 中,是通过 DialogBoxParamW 这个 API 来弹出上面的对话框,因此,简易方法就是,我们把文件中的对话框模板 ID 修改掉,这个 API 就无法找到这个对话框模板,就不会有弹窗效果了。因此,把
- C:\Windows\SysWOW64\SogouPY.ime
(注:在 x64 位系统上的这个位置,表明它是一个目标平台为 x86 的程序。)
复制到其他位置产生一个副本,使用 UltraEdit (或者任何能切换到 16 进制模式的编辑器),在 16 进制编辑模式下,按 Ctrl-G,在地址中输入上图中显示的对话框模板 ID 的文件地址 0x00552318,在这个位置看到对话框模板 ID (是一个 WORD 类型),为两个字节(81 00),(这个地方本质上是一个 size = 8 bytes 的 IMAGE_RESOURCE_DIRECTORY_ENTRY 节点)这两个字节就是该对话框模板的数字 ID,我们可以随意把它改为其他的数字,这里我把它修改为 21 00,然后保存。这样一个新的 SogouPY.ime 就生成好了。
(3)用修改后的 SogouPY.ime 替换当前在使用的
然后进行替换,由于这个文件可能已经被多个进程映射(加载)到进程空间了,所以直接替换可能不一定能成功。因此如果有安装双系统,可以进入另一个系统,或者使用一个被制成 winpe 启动盘的 U 盘(例如老毛桃,大白菜等),进入到 winpe 系统,进行替换。然后再次回到 windows 系统,就不会再看到输入法任何弹窗了。
(4)小结以及副作用
输入法的设置属性功能也同时被 ban 了。如果需要设置属性,把原版 SGTool.exe 权限放开,设置完属性再次禁用其所有权限即可。
(5)对于 x64 位系统,还需要修改 64 位版本的 SogouPY.ime
对于 x64 系统,这个文件同时有 32 位和 64 位版本的存在。其中 64 位版位于:
c:\windows\system32\SogouPY.ime
对它的修改和替换,和前面的步骤相同。需要注意的是,用来确定对话框模板 ID 的文件地址的小程序(PeRcView)需要编译为 x64 位应用程序,以打开 x64 的 PE 文件。其他步骤都一样,这里就不赘述了。