无忧启动论坛

标题: 一种在PE中安装输入法的新方法 [打印本页]

作者: shoulea    时间: 2009-11-12 06:38
标题: 一种在PE中安装输入法的新方法
在PE中安装传统的基于IME文件的输入法,可以使用PECMD来实现,以极品五笔输入法为例:
1。将输入法支持文件jpwb.ime和jpwb.mb复制到PE系统目录System32中;
2。用PECMD调用API函数:
     PECMD CALL $imm32,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime,极品五笔
3。启动internat.exe。
经过试验,这种方法不仅在PE可以,在XP中都行。
作者: yichya    时间: 2009-11-12 06:58
好,省个EXE.
作者: edwinsunday    时间: 2009-11-12 07:28
学习了,试一下谢谢谢
作者: ghangz    时间: 2009-11-12 10:01
楼主的新方法很好用,谢谢
作者: pseudo    时间: 2009-11-12 10:59
用上了,谢谢楼主
---------------------------
又,是不是连pecmd都不需要,直接这样:
Rundll32 imm32.dll,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime,极品五笔

[ 本帖最后由 pseudo 于 2009-11-12 11:06 编辑 ]
作者: wjgyz740526    时间: 2009-11-12 15:39
智能abc好像没用啊?应该加那几个文件到system32?
作者: yh_tl    时间: 2009-11-12 16:19
很好,支持
简单实用!
作者: yh_tl    时间: 2009-11-12 16:25
原帖由 pseudo 于 2009-11-12 10:59 发表
用上了,谢谢楼主
---------------------------
又,是不是连pecmd都不需要,直接这样:
Rundll32 imm32.dll,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime,极品五笔

很想知道采用那个命令更快更好?
当然,实际使用应该是感觉不出来的,只能理论上估计了,麻烦清楚的朋友发表一下高见
作者: shoulea    时间: 2009-11-12 20:25
标题: 回复 #6 wjgyz740526 的帖子
智能ABC需要winabc.cwd、winabc.ime和winabc.ovl三个文件,我试过,用此方法同样可以安装。但似乎我的PE某些系统DLL有问题,当输入法处于极品五笔状态时,不能直接从输入法列表中选择智能ABC。在XP系统中没有这个问题。

2010-1-13
已查明原因,是由于极品五笔的IME本身有问题,用输入法生成器重新生成后错误消失。

[ 本帖最后由 shoulea 于 2010-1-13 11:20 编辑 ]
作者: shoulea    时间: 2009-11-12 20:45
标题: 回复 #8 yh_tl 的帖子
rundll32我也试过,但发现均不能成功。是在XP下试的,我先将系统的输入法全删了(winabc.*和jpwb.*还在System32中),然后依次在命令提示符输入以下命令:
rundll32 imm32,ImmInstallIME %SystemRoot%\System32\jpwb.ime
rundll32 imm32,ImmInstallIMEW %SystemRoot%\System32\jpwb.ime
rundll32 imm32,ImmInstallIMEA %SystemRoot%\System32\jpwb.ime
其中第一条我知道很可能会失败,因为DLL实则没有ImmInstallIME这个API,实际有的是ImmInstallIMEA(Ascii版本)和ImmInstallIME(Unicode版本),PECMD调用API时传递的字符串是Unicode,所以要用ImmInstallIMEW;第二条运行没有反应;第三条弹出一个消息框“尝试运行imm32,ImmInstallIMEA C:\windows\system32\jpwb.ime时发生意外”。
所以大家最好还是用PECMD吧。
作者: 潮退潮生    时间: 2009-11-12 21:36
多谢分享经验,去试试。
作者: yh_tl    时间: 2009-11-12 22:39
原帖由 shoulea 于 2009-11-12 20:45 发表
rundll32我也试过,但发现均不能成功。是在XP下试的,我先将系统的输入法全删了(winabc.*和jpwb.*还在System32中),然后依次在命令提示符输入以下命令:
rundll32 imm32,ImmInstallIME %SystemRoot%\System3 ...

非常感谢,正准备调整一下输入法的使用方式
作者: zlgs    时间: 2009-11-12 23:48
在水哥终结网启版PE中试图exec加载最小智能abc输入法
试了几次调整加载顺序
智能abc输入法最早加载完成任务
有空用楼主的方法试一下
作者: wjgyz740526    时间: 2009-11-13 08:30
原帖由 shoulea 于 2009-11-12 20:25 发表
智能ABC需要winabc.cwd、winabc.ime和winabc.ovl三个文件,我试过,用此方法同样可以安装。但似乎我的PE某些系统DLL有问题,当输入法处于极品五笔状态时,不能直接从输入法列表中选择智能ABC。在XP系统中没有这 ...


很奇怪,我也重新试了下,系统自带的智能abc这三个文件可以这样安装,但是新版5.22的智能abc的winabc.cwd、winabcx.ime和winabcx.ovl三个文件却无法安装成功——我在windows系统里测试的
作者: stlyq123    时间: 2009-11-15 20:19
请教楼主,极点五笔如何安装,我试过好象不行。
作者: xuxuezeng    时间: 2009-11-15 23:55
好,我来试一下将98五笔放到PE3.0中试一下,能否搞定!
作者: shoulea    时间: 2009-11-24 18:44
标题: 回复 #15 stlyq123 的帖子
凡Windows系统自带的基于IME的(或者说可用输入法生成器生成的)输入法,都可以用这种方式安装,因此86五笔、98五笔,以及原来的全拼输入法,甚至郑码等都是可以用这种方法安装的。
极点五笔、搜狗拼音等使用的接口与上面那些输入法不一样,不能这样安装。况且极点五笔本身就是绿色的,直接运行名为registry.exe的程序即可,你为什么要用这种方法安装呢?
作者: shoulea    时间: 2009-11-24 19:11
其实这种方法并没有什么神秘之处,它的关键是:PECMD可以调用动态链接库DLL中的API函数。

不信你可以在命令提示符下键入以下命令:
      pecmd call $user32,MessageBoxW,#0,Hello world!,hello,#64
你可以得到一个和pecmd mess效果完全相同的消息框。

所以只要合理使用PECM的call $命令,就可以直接调用系统API完全一些任务。需要注意的是API函数名称必须正确,你必须按系统文档MSDN中指出的那样写函数名,如MessageBox写成messagebox就不行;第二是必须在函数名后加一个大写的W,因为系统的API有两套,一套使用ANSI字符集,以A为后缀,另一套使用UNICODE字符集,以W为后缀,PECMD本身是用UNICODE字符集写成的,它调用API时传递的也是UNICODE字符串,所以必须用带W的函数。最后是函数的参数,在PECMD中显然只能传递字符串和整数给系统API,而且字符串只能是UNICODE字符串,整数必须在其前面加一个“#”前缀(这样PECMD才认为它是一个整数,而不是一个UNICODE字符串)。

我们知道Rundll32这个系统自带的EXE也可以调用一些API,如可用它打开一些控制面板中的选项,但是由于我们对它缺乏资料,所以用起来并不好使,甚至上面的简单消息框能不能打开都成问题(有时能成功,有时不成功,有时虽然能打开一个消息但文字是乱码),而PECMD则不成问题,因为我们能看到它的源代码,知道它是怎样实现的。

说到怎样发现这种安装输入法的方法,也是很偶然的。最初我是想自己写一个小程序,以便能将输入法安到外置程序包,因为InstallIME只能安装支持文件位于System32目录的输入法。于是我用记事本打开InstallIME.exe这个文件,希望能发现它调用了API函数,但遗憾的是它是加过密的,看不出来。后来通过在网上搜索,得知可以使用ImmInstallIME函数,于是用C语言写程序,发现确实能安装输入法。后转而一想反正都是调用API函数,PECMD也可以为什么不用PECMD呢,于是就有了这种方法。但我不得不告诉大家,这种方法还是不能将输入法安到外置程序包,所以如果你想这么干就不要白费力气。如果你真想这么干,我还是建你使用极点五笔等输入,这些输入法很优秀,也可以安到外置程序包中。

最后指出一点,传统输入法“词语联想”、“逐渐提示”等选项信息是存在注册表中,通过用Regshot跟踪,我发现它们位于“HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔”(最后一的“极品五笔”是你调用ImmInstallIME函数时传递的第二个参数)。事实上我的PE是这样配置输入法的:
FILE jpwb.*=>%SystemRoot%\System32
FILE winabc.*=>%SystemRoot%\System32


CALL $imm32,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime,极品五笔
CALL $imm32,ImmInstallIMEW,%SystemRoot%\System32\winabc.ime,智能ABC


REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\FC aid=#1
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\FC input=#1
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\GB/GBK=#0
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\词语联想=#0
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\词语输入=#1
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\光标跟随=#1
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\外码提示=#1
REGI HKCU\Software\Microsoft\Windows\CurrentVersion\极品五笔\逐渐提示=#1


LINK %Programs%\启动\输入法指示器,internat.exe
外置程序包中具有的文件为:internat.exe、jpwb.ime、jpwb.mb、winabc.cwd、winabc.ime、winabc.ovl,外加一个PECMD配置文件,其内容如上。

[ 本帖最后由 shoulea 于 2009-11-24 19:22 编辑 ]
作者: stlyq123    时间: 2009-11-24 19:16
感谢楼主的回复。
作者: haxc    时间: 2009-11-27 10:36
我想知道的是 紫光v5和v6怎么装到winpe???
作者: 森林游侠    时间: 2009-11-27 10:46
这方法不错。
我在PE里面安装输入法都是在绿色软件下载站下载绿色版本的,然后用那个软件站专门的绿化工具来加载输入法。
作者: zxyy    时间: 2009-11-27 10:50
试一试再说吧。谢谢分享了。
作者: adai6670    时间: 2009-11-27 10:58
收藏 备用 ,  用空 改改  pe
作者: qingwei888    时间: 2009-11-27 12:46
这个方案不错,我去试验下~~~~~~~~~~~
作者: shn    时间: 2009-11-27 13:05
收藏。需要,多谢分享。集成ABC就够用了
作者: hzhuzhu520    时间: 2009-11-27 14:44
又有新的了!!!!继续下  收藏起来
作者: lisong    时间: 2009-11-27 23:20
学习了好知识!!!!!!
作者: 尽善尽美    时间: 2010-6-8 06:36
谢谢分享!!试试看!!
作者: yjd    时间: 2010-6-10 15:15
下次试试,上次是用h3的pe里面有个exe文件来注册输入法。
作者: shoulea    时间: 2010-6-10 16:08
原帖由 yjd 于 2010-6-10 15:15 发表
下次试试,上次是用h3的pe里面有个exe文件来注册输入法。


那个EXE所起的作用和这里提供的方法是一样,你可以使用这种方法省掉一个EXE。
作者: greenmood    时间: 2010-6-10 19:27
这个方法很好,有空试一下
作者: ducklingfans    时间: 2010-6-10 21:24
我加载的是自己打包的小鸭五笔。
感觉挺好用,自己最喜欢小鸭五笔和五笔加加了。
作者: lxl1638    时间: 2010-6-10 23:36
正常系统中用 PECMD.EXE 或 WinCMD.EXE 的 CALL 命令安装 WimMount 驱动的方法:


////////////////////////////////////////////////////////////////////////////////////
_SUB CopyFile
     FEXT fExt=%AnyFile%
     ENVI FileType=0 //其它(EXE、DLL等)文件类型,复制到SYSTEM32
     FIND $%fExt%=inf,ENVI FileType=1 //INF文件,复制到INF目录
     FIND $%fExt%=sys,ENVI FileType=2 //SYS文件,复制到Drivers
     FIND $%fExt%=INI,ENVI FileType=3 //INI文件,不复制
     IFEX $%FileType%=0,FILE %AnyFile%=>%SystemRoot%\System32
     IFEX $%FileType%=1,TEAM FILE %AnyFile%=>%SystemRoot%\inf|ENVI InfFile=%AnyFile%
     IFEX $%FileType%=2,FILE %AnyFile%=>%SystemRoot%\System32\drivers
_END
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
_SUB InsInfFile
     ENVI DllFile=$%SystemRoot%\System32\setupapi.dll         //DLL名
     ENVI InsParams=DefaultInstall 132 %InfFile%              //安装参数
     CALL %DllFile%,InstallHinfSectionW,#0,#0,%InsParams%,#0  //CALL DLL函数
_END
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
FORX %CurDir%\*.*,AnyFile,0,CALL CopyFile //搜索当前目录的所有文件,并按要求复制
FIND $%InfFile%=,!CALL InsInfFile         //搜索到INF文件并用InstallHinfSectionW安装
EXEC %CurDrv%\系统工具\WimTool\WimTool.EXE /Reg /M  //按WimTool路径注册WimTool。
////////////////////////////////////////////////////////////////////////////////////

未命名.PNG (76.97 KB, 下载次数: 88)

未命名.PNG

作者: shoulea    时间: 2010-6-10 23:59
CALL挺好使的,如果老九愿意,可以设个环境变量来保存CALL $的返回值,这样就能自己实现各种MessageBox,甚至用PECMD配置文件来编程也说不定哟。

未命名.JPG (47.69 KB, 下载次数: 94)

未命名.JPG

作者: nn2nn    时间: 2010-6-14 09:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: nn2nn    时间: 2010-6-14 09:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: anning999    时间: 2010-7-17 17:00
很实用,设置简单,谢谢
作者: zhhwin    时间: 2010-8-31 18:57
PECMD CALL $imm32,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime
Rundll32 imm32.dll,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime
效果是一样的吧
作者: shoulea    时间: 2010-9-11 20:15
原帖由 zhhwin 于 2010-8-31 18:57 发表
PECMD CALL $imm32,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime
Rundll32 imm32.dll,ImmInstallIMEW,%SystemRoot%\System32\jpwb.ime
效果是一样的吧


通过暑假学习Shell编程,我终于可以正确回答这个问题了。一个rundll32可调用的DLL导出函数必须具有如下原型:

    void CALLBACK FunctionName(HWND hwnd, HINSTANCE hInstance, LPTSTR lpCmdLine, int nCmdShow);

而通常的函数都不具有这种原型,因此都不能用rundll32调用!
作者: iphdd    时间: 2020-10-17 11:29
大佬们,问一下,这个PE下的输入法,.ime和其它几个扩展名的文件,哪来的?是要用什么软件来生成吗?比如QQ五笔,要用哪几个文件啊?




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3