IME.CMDの解説

(チェックボックスにチェックを入れると、解説が表示される)


setlocal
「このバッチファイルで宣言した変数は、このバッチファイル内だけのローカル変数である」と言う意味の定型句。


set WinPEWinDir=%~dp0winpe_x86\mount\Windows
set IMEBinSrc=%windir%
mountフォルダの下のWindowsフォルダのフルパスを、WinPEWinDirという変数に入れる。
作製環境のシステムフォルダであるWindowsフォルダのフルパスを、IMEBinSrcという変数に入れる。


md %WinPEWinDir%\IME
md %WinPEWinDir%\IME\IMEJP10
md %WinPEWinDir%\IME\IMEJP10\DICTS
md %WinPEWinDir%\System32\IME
md %WinPEWinDir%\System32\IME\IMEJP10
md %WinPEWinDir%\System32\IME\shared
WinPEWinDir下に、MS-IME関連ファイルを配置するために必要なフォルダをあらかじめ作っておく。


rem SYSTEM32 folder (Cicero)
copy /y %IMEBinSrc%\System32\CTFMON.EXE %WinPEWinDir%\System32\CTFMON.EXE
copy /y %IMEBinSrc%\System32\MSUTB.DLL %WinPEWinDir%\System32\MSUTB.DLL
copy /y %IMEBinSrc%\System32\MsCtfMonitor.DLL %WinPEWinDir%\System32\MsCtfMonitor.DLL

rem DICTS folder
copy /y %IMEBinSrc%\IME\IMEJP10\DICTS\IMJPST.DIC %WinPEWinDir%\IME\IMEJP10\DICTS\IMJPST.DIC
copy /y %IMEBinSrc%\IME\IMEJP10\DICTS\IMJPGN.GRM %WinPEWinDir%\IME\IMEJP10\DICTS\IMJPGN.GRM

rem SYSTEM32 folder
copy /y %IMEBinSrc%\System32\IMJP10.IME %WinPEWinDir%\System32\IMJP10.IME
copy /y %IMEBinSrc%\System32\IMJP10K.DLL %WinPEWinDir%\System32\IMJP10K.DLL

rem IMEJP10 folder
copy /y %IMEBinSrc%\System32\IME\IMEJP10\IMJPAPI.DLL %WinPEWinDir%\System32\IME\IMEJP10\IMJPAPI.DLL
copy /y %IMEBinSrc%\System32\IME\IMEJP10\IMJPTIP.DLL %WinPEWinDir%\System32\IME\IMEJP10\IMJPTIP.DLL
copy /y %IMEBinSrc%\System32\IME\IMEJP10\IMJPMGR.EXE %WinPEWinDir%\System32\IME\IMEJP10\IMJPMGR.EXE

rem shared folder
copy /y %IMEBinSrc%\System32\IME\shared\IMEAPIS.DLL %WinPEWinDir%\System32\IME\shared\IMEAPIS.DLL
copy /y %IMEBinSrc%\System32\IME\shared\IMETIP.DLL %WinPEWinDir%\System32\IME\shared\IMETIP.DLL
copy /y %IMEBinSrc%\System32\IME\shared\IMJKAPI.DLL %WinPEWinDir%\System32\IME\shared\IMJKAPI.DLL
copy /y %IMEBinSrc%\System32\IME\shared\MSCAND20.DLL %WinPEWinDir%\System32\IME\shared\MSCAND20.DLL
作製環境のシステムフォルダに存在するIME関連ファイルを、WinPEWinDi配下に全く同じ構成のままコピーせよという命令群である。そのため、もしも作製環境にこのコマンドで指定しているファイルが存在していなければ、コピー操作は失敗してしまう。この一連のコマンドはMS-IME10のものであるので、作製環境がMS-IME10でなければ上手く行かない。Vista/Server2008/7などがIME10を搭載している。


rem Creating some batch files...
@echo @echo off > %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\MSUTB.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\MsCtfMonitor.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IMJP10K.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IME\shared\IMETIP.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IME\shared\IMEAPIS.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IME\shared\IMJKAPI.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IME\shared\MSCAND20.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IME\IMEJP10\IMJPTIP.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REGSVR32 /S %%WinDir%%\System32\IME\IMEJP10\IMJPAPI.DLL >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@rem @echo REG ADD "HKLM\Software\Microsoft\CTF" /v "StartOnNoTaskEng" /t REG_DWORD /d 1 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD "HKLM\Software\Microsoft\IMEJP" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD "HKLM\Software\Microsoft\IMEJP\10.0" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD "HKLM\Software\Microsoft\IMEJP\10.0\directories" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD "HKLM\Software\Microsoft\IMEJP\10.0\directories" /v "DictionaryPath" /t REG_EXPAND_SZ /d %%SystemRoot%%\IME\IMEJP10\DICTS ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD "HKLM\Software\Microsoft\IMEJP\10.0\directories" /v "ModulePath" /t REG_EXPAND_SZ /d %%SystemRoot%%\System32\IME\IMEJP10 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\TIP\{03B5835F-F03C-411B-9CE2-AA23E1171E36} ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\TIP\{03B5835F-F03C-411B-9CE2-AA23E1171E36}\LanguageProfile ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\TIP\{03B5835F-F03C-411B-9CE2-AA23E1171E36}\LanguageProfile\0x00000411 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\TIP\{03B5835F-F03C-411B-9CE2-AA23E1171E36}\LanguageProfile\0x00000411\{A76C93D9-5523-4E90-AAFA-4DB112F9AC76} ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\TIP\{03B5835F-F03C-411B-9CE2-AA23E1171E36}\LanguageProfile\0x00000411\{A76C93D9-5523-4E90-AAFA-4DB112F9AC76} /v "Enable" /t REG_DWORD /d 1 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000411 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31} ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000 /v "CLSID" /d "{03B5835F-F03C-411B-9CE2-AA23E1171E36}" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000 /v "Profile" /d "{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000 /v "KeyboardLayout" /t REG_DWORD /d 0 ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\SortOrder\Language /v "00000000" /d "00000411" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\HiddenDummyLayouts /v "00000411" /d "00000411" ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\Assemblies\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31} /v "Default" /d "{03B5835F-F03C-411B-9CE2-AA23E1171E36}" /f ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\Assemblies\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31} /v "Profile" /d "{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}" /f ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo REG ADD HKCU\Software\Microsoft\CTF\Assemblies\0x00000411\{34745C63-B2F0-4784-8B67-5E12C8701A31} /v "KeyboardLayout" /t REG_DWORD /d "04110411" /f ^> nul >> %WinPEWinDir%\System32\IME\IMEReg.CMD
@echo start CTFMON.EXE >> %WinPEWinDir%\System32\IME\IMEReg.CMD
WinPEWinDirフォルダ下のSystem32\IME\IMEReg.CMDというファイルに、必要なコマンドを順次書き込んでいる。
REGSVR32 はシステムにコンポーネントを登録するコマンドで、REG ADD はレジストリにキーや値を追加するコマンドである。このコマンドはWinPE起動時に実行されるもので、作製環境のコンポーネント登録やレジストリを変更するものではない。


@if not exist %WinPEWinDir%\System32\startnet.org copy %WinPEWinDir%\System32\startnet.cmd %WinPEWinDir%\System32\startnet.org
@echo @echo off > %WinPEWinDir%\System32\STARTNET.CMD
@echo echo Preparing WinPE ... >> %WinPEWinDir%\System32\STARTNET.CMD
@type %WinPEWinDir%\System32\STARTNET.org >> %WinPEWinDir%\System32\STARTNET.CMD
@echo @echo. >> %WinPEWinDir%\System32\STARTNET.CMD
@echo Call %%WinDir%%\System32\IME\IMEReg.CMD >> %WinPEWinDir%\System32\STARTNET.CMD
まず、もしもstartnet.orgという名前のファイルが存在しなければ、startnet.cmdをstartnet.orgとしてコピーしておく。この段階でのstartnet.cmdには、wpeinitと1行書かれているだけである。そして、startnet.cmdの中の記載を以下のように書き換える。
----------------------------------------
@echo off
echo Preparing WinPE ...
wpeinit (startnet.orgに書かれているコマンドをそのまま書き加えている。)
@echo.
Call %%WinDir%%\System32\IME\IMEReg.CMD (先程作ったIMEReg.CMDを呼び出すコマンド)
----------------------------------------
startnet.cmdは、WinPEの起動時にWinpeshl.exeによって呼び出され、自動的に実行されるバッチファイルである。したがって、連鎖的にIMEReg.CMDも実行されるわけである。


endlocal
文頭のsetlocalと対になって使われる定型句で、ここでsetlocalの効用を終了するという意味。

元のページに戻る