无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3512|回复: 13
打印 上一主题 下一主题

请教一条PECMD命令或启用PE语言选择栏的问题【已解决】

[复制链接]
跳转到指定楼层
1#
发表于 2010-1-24 22:19:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在PE中启用语言/输入法选择栏通常用Win2000版的internat.exe和indicdll.dll,但很多版本的PE为了缩减内核,一般都不保留这两个文件。一般情况下PE只挂载一种汉字输入法(采用率最高的就是极点五笔),有没有语言/输入法选择栏无关紧要。但挂入多个输入之后,有输入法选择栏会更方便一些。

internat.exe这个程序好像必须完全进入桌面才能运行,在WINPE.ini中加载没有反应。HHH333前辈将internat.exe和indicdll.dll放到PE内核中,在PECMD.ini中将internat.exe放到启动项%startup%中,PE进入桌面后自动激活语言选择栏,这种方法很好,但须将此2文件放到一级内核。

依照网上诸高手的示范,本人在增加拼音加加输入法、启程输入之星这些输入法时,在批处理中将internat.exe和indicdll.dll解压到system32下并运行internat.exe,如此启用语言选择栏,以这种按需加载的方式,可以避免过早占用过多的内存,以利于在小内存机器上运行PE。现在积累下来,在PE中备用的汉字输入有两三个,不确定先启用哪一个,每一个都在第一次调用时都运行internat.exe以激活语言选择栏,但这个程序一旦驻留后,再次运行就会出现错误提示,影响批处理的执行。如果能够在批处理中判断internat.exe是否运行再确定是否调用internat.exe,问题就解决了。

本人技术很菜,对PECMD了解也很浅,不知道PECMD里面有没有指令可以判断内存中是否驻留了internat.exe这一进程,这里烦请高手指引一条批命令。谢谢。



------------------------------------------------------------
已解决,见14楼

[ 本帖最后由 上古天真 于 2010-1-26 07:18 编辑 ]
14#
 楼主| 发表于 2010-1-26 07:15:55 | 只看该作者
仔细研读了PECMD的说明书,才意识到自己多么粗心,原来FIND指令就能解决问题的。

我把PE的所有输入法都放在IME文件夹内,其中包含internat.exe和indicdll.dll这两个文件。系统默认加载占用内存极少的极点五笔,其他输入法作为第二输入法根据软硬环境按需加载,在加载批命令中都包含以下几句:
IF NOT EXIST %Windir%\System32\indicdll.dll COPY indicdll.dll %Windir%\System32 >NUL
IF NOT EXIST %Windir%\System32\internat.exe COPY internat.exe %Windir%\System32 >NUL
PECMD FIND internat.exe,EXIT!EXEC %Windir%\System32\internat.exe

顺便在此推荐一下“启程输入之星2.811U盘版”,在绿色下载站可以下到。该输入法包含五笔和拼音两种输入法可供切换,标点输入也算方便,最出色的是词库和联想输入比较丰富,支持句式输入,剥离一些无关紧要的文件,可以缩减到8M多,支持在只读环境加载,载入极为迅速,而且载入后内存占用很少(载入前后可用内存变化值在1M左右)。
回复

使用道具 举报

13#
 楼主| 发表于 2010-1-25 20:59:07 | 只看该作者

回复 #11 netwinxp 的帖子

谢谢提醒。输入法系统栏图标--右键--属性 出不来一直没查到是什么原因,原来如此。

我最迫切的是激活语言/输入法指示器,以便用鼠标进行切换,属性设置倒是没去细想。但若换成Win2000的KBDUS.DLL,担心有点兼容问题。
回复

使用道具 举报

12#
 楼主| 发表于 2010-1-25 20:52:52 | 只看该作者

回复 #10 yulon 的帖子

可能是我表述不清导致您的误读。

在WinPE.ini中通常默认安装了一种汉字输入法(最常用的是极点五笔),但这种输入法由于要控制内存占用,词库、联想输入、句式输入等等功能都比较欠缺。若需要在PE中大量输入文字,就需要弥补以上不足的输入法进行补充。当我要加载第二种输入法时,就同时加载语言/输入法指示器,以便鼠标选取切换。现在放到外置工具包(OP.WIM)中的输入法有三四种之多,供需要时加载,但不确定哪一个会作为第二种输入法装入,因此我在各个输入法驱动包中都准备internat.exe文件,加载输入法时如发现内存中没有internat.exe进程,就将那两个文件解压到system32中,并运行internat.exe激活语言/输入法指示器。由于各个输入法各有优劣,使用中可能会加载第三乃至第四种输入法,那么在第三或第四种输入法加载时,都需要进行一次internat.exe是否已经运行的判断,以便确定是否运行internat.exe。如果重复运行internat.exe,出错提示可能导致某些模块安装不正确或妨碍批处理的继续运行。

当然前面提到,在WinPE.ini中将internat.exe挂到启动项(LINK %Startup%\输入法指示器,X:\WXPE\SYSTEM32\internat.exe,这句是从HHH333那里偷来的),各个输入法安装包中都无需再保留和启动internat.exe了,但是这会导致内存中多被占用2M以上的空间(内存盘中的文件和内存中的进程),无论是否需要都占用了内存,不利于在资源紧张的系统运行PE。

[ 本帖最后由 上古天真 于 2010-1-26 07:21 编辑 ]
回复

使用道具 举报

11#
发表于 2010-1-25 20:33:55 | 只看该作者
其实使用INTERNAT.EXE还要把KBDUS.DLL改成2000的,否则输入法系统栏图标--右键--属性 出不来(这是IMETOOL一直有的BUG)
回复

使用道具 举报

10#
发表于 2010-1-25 19:07:48 | 只看该作者

回复 #8 上古天真 的帖子

我的意思是通过注册表判断有没有俩种以上的输入法···

你的意思不是在启用第二种以上的输入法才启用internat.exe激活语言选择栏么?
回复

使用道具 举报

9#
 楼主| 发表于 2010-1-25 19:00:01 | 只看该作者

回复 #7 系统维护 的帖子

呵呵,您的意思是先杀了,再装载一次。应该可行,但就是在执行上会有一点延迟。

我看PECMD的说明时,发现FIND是可以搜寻内存进程的,但不清楚能否在批处理命令行中支持goto的语句。
例如:PECMD FIND internat.exe goto norun,goto run                ........(run和norun是批处理中个两个跳转执行项目)

或者做成两个批处理run.bat和norun.bat,然后用PECMD FIND internat.exe "EXEC !norun.bat","EXEC !run.bat"     ........这样执行上好像有点麻烦。

回家再试了。熟悉PECMD命令的网友,请指教一二,以上两种方法究竟是否可行。

[ 本帖最后由 上古天真 于 2010-1-25 21:35 编辑 ]
回复

使用道具 举报

8#
 楼主| 发表于 2010-1-25 18:48:07 | 只看该作者

回复 #6 yulon 的帖子

读取注册表注册项的返回值这种方法没试过,语句更是不甚明了,感觉兜了圈子。PECMD应该可以直接发现内存进程的,而不需去搜索注册表。谢谢您的建议。
回复

使用道具 举报

7#
发表于 2010-1-25 10:32:42 | 只看该作者

回复 #4 上古天真 的帖子

每次运行internat.exe前先执行pecmd kill internat.exe是不是就可以达到目的了呢?
回复

使用道具 举报

6#
发表于 2010-1-24 23:08:53 | 只看该作者
你先研究HKEY_CURRENT_USER\Keyboard Layout\Preload这个键值下的东西···

再用REGI读取和FIND的判断···

应该可以吧···
回复

使用道具 举报

5#
发表于 2010-1-24 23:02:47 | 只看该作者
原帖由 上古天真 于 2010-1-24 22:42 发表
回楼上

internat.exe和indicdll.dll 是Win2000的官方程序。在输入法设置工具IMETool中就是要这两个文件的配合才能对输入法进行管理。

PECMD的RUNS可以将internat.exe作为启动项目处理,但我希望internat. ...



抱歉,IMETool用糊涂了,没仔细研究过···
回复

使用道具 举报

4#
 楼主| 发表于 2010-1-24 22:42:44 | 只看该作者
回楼上

internat.exe和indicdll.dll 是Win2000的官方程序。在输入法设置工具IMETool中就是要这两个文件的配合才能对输入法进行管理。

PECMD的RUNS可以将internat.exe作为启动项目处理,但我希望internat.exe是按需驻留,而不是启动就驻留。我的意思是在启用第二种以上的输入法才启用internat.exe激活语言选择栏。
回复

使用道具 举报

3#
发表于 2010-1-24 22:31:52 | 只看该作者
internat.exe和indicdll.dll 都不是MS的吧···

RUNS命令试试···

[ 本帖最后由 yulon 于 2010-1-24 22:33 编辑 ]
回复

使用道具 举报

2#
 楼主| 发表于 2010-1-24 22:21:53 | 只看该作者
看了一下PECMD的说明,好象Find和IFEX可以用作判断,但不知语句该怎么写才能达到我要的效果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-10-2 18:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表