无忧启动论坛

标题: 注册表解析重新设置 [打印本页]

作者: freesoft00    时间: 2011-11-18 01:09
标题: 注册表解析重新设置
是关于输入法的,我做了一个输入法安装程序
原来的2的值是e0040804
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Keyboard Layout\Preload]
  3. "1"="00000804"
  4. "2"="e0040804"
复制代码
安装输入法后2变成了新输入法的E0200804,又增加了3变成了e0040804
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Keyboard Layout\Preload]
  3. "1"="00000804"
  4. "2"="E0200804"
  5. "3"="e0040804"
复制代码
想怎样解析这个Preload下面的2,增加一个键值改成2的值,这个增加的值是在原有基础上再递增的,因为不定有几个值,就如下面。把2固定为我的输入法的e0040804就可以了。
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Keyboard Layout\Preload]
  3. "1"="00000804"
  4. "2"="e0040802"
  5. "3"="E0400804"
  6. "4"="e0040803"
  7. "5"="e0040801"
复制代码
这个批处理应该如何写?

[ 本帖最后由 freesoft00 于 2011-11-18 23:30 编辑 ]
作者: pznpt    时间: 2011-11-21 15:44
------------------------------分割线----------------------------------
@echo off
setlocal enabledelayedexpansion
set aa=0
echo Windows Registry Editor Version 5.00>c:\my.reg
echo.>>c:\my.reg
echo [HKEY_CURRENT_USER\Keyboard Layout\Preload]>>c:\my.reg
reg export "hkcu\Keyboard Layout\Preload" %temp%\tmp1.txt
for /f "skip=3 tokens=1,2* delims==" %%a in ('type %temp%\tmp1.txt') do (
set /a aa=!aa!+1
echo "!aa!"=%%b>>c:\my.reg
if "!aa!"=="2" echo "3"="E0200804">>c:\my.reg && set /a aa=!aa!+1
)
del %temp%\tmp1.txt >nul
pause
------------------------------分割线----------------------------------

保存为BAT文件,运行后在C盘会生成MY.REG的注册表文件,双击MY.REG应该可按您的要求在第二行后插入 "3"="E0200804",数字递增。

[ 本帖最后由 2011pzn 于 2011-11-21 16:11 编辑 ]
作者: freesoft00    时间: 2011-11-21 16:22
谢谢,晚上了我试试
2要固定为E0200804
e0040804这个值是不确定的,因为我原来的就两个输入法,一个英文,一个智能abc,这个2就是智能abc的值,而在其他人的电脑上,也许有其他的输入法这个值就变了,所以需要解析一下,还有可能有多余两个的输入法,所以就不止
1
2
两个键值了,多余两个输入法,键值就增加了,比如
1
2
3
4
5
就要把原来的2解析后改成E0200804,然后再增加一个6改成原来的2值

[ 本帖最后由 freesoft00 于 2011-11-21 21:41 编辑 ]
作者: freesoft00    时间: 2011-11-21 21:54
测试了一下,不对
原来的是
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Keyboard Layout\Preload]
  3. "1"="00000804"
  4. "2"="e00f0804"
  5. "3"="e0040804"
复制代码

解析后的my.reg是
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Keyboard Layout\Preload]
  3. "1"="00000804"
  4. "2"="e00f0804"
  5. "3"="E0200804"
  6. "4"="e0040804"
复制代码

应该成这样就对了
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Keyboard Layout\Preload]
  3. "1"="00000804"
  4. "2"="E0200804"
  5. "3"="e0040804"
  6. "4"="e00f0804"
复制代码

作者: pznpt    时间: 2011-11-22 01:57
哦,那我理解有误,是要在第二行插入 "2"="E0200804",第三行固定为 "3"="E0040804" 是吗?
再看这样对不对:
--------------------------------------------------分割线-----------------------------------------------
@echo off
setlocal enabledelayedexpansion
if exist %temp%\tmp*.txt del %temp%\tmp*.txt>nul
set aa=0 && set bb=0
reg export "hkcu\Keyboard Layout\Preload" %temp%\tmp1.txt
for /f "skip=3 tokens=1,2* delims==" %%a in ('type %temp%\tmp1.txt') do (
set /a aa=!aa!+1
echo "!aa!"=%%b>>%temp%\tmp2.txt
if "!aa!"=="1" echo "2"="E0200804">>%temp%\tmp2.txt && set /a aa=!aa!+1
)
echo Windows Registry Editor Version 5.00>c:\my.reg
echo.>>c:\my.reg
echo [HKEY_CURRENT_USER\Keyboard Layout\Preload]>>c:\my.reg
for /f "tokens=1,2* delims==" %%a in ('type %temp%\tmp2.txt') do (
set /a bb=!bb!+1
if "!bb!"=="3" (set k1=%%b && echo "3"="E0040804">>c:\my.reg) else (
if /i %%b=="E0040804" (echo "!bb!"=!k1!>>c:\my.reg) else (
echo "!bb!"=%%b>>c:\my.reg
)))
pause
--------------------------------------------------分割线-----------------------------------------------
(匆忙写的,比较繁琐,应该可以优化一下的)
作者: freesoft00    时间: 2011-11-22 02:11
再次感谢,只对了一半,第三行固定为 "3"="E0040804"
比如我有两个输入法键值1不管,键值2E0222204,就是把现有的2改成E0200804,然后再添加一个键值3写成2E0222204
如果我有三个输入法,那就添加一个4写成2E0222204
如果我装有四个输入法,那就添加一个4写成2E0222204
键值的多少和数值数据是不确定的,唯一确定的就是2要改成E0200804,然后再在原来的基础上递增一个键值写入为原料的2键值数据

[ 本帖最后由 freesoft00 于 2011-11-22 02:13 编辑 ]
作者: pznpt    时间: 2011-11-22 03:13
对不起呀,我理解能力太低啦。

-----------------------------------------分割线------------------------------------------------
@echo off
setlocal enabledelayedexpansion
if exist %temp%\tmp*.txt del %temp%\tmp*.txt>nul
set n=1
reg export "hkcu\Keyboard Layout\Preload" %temp%\tmp1.txt
for /f "skip=3" %%a in ('type %temp%\tmp1.txt') do set /a n=!n!+1
type %temp%\tmp1.txt >%temp%\tmp2.txt
for /f "tokens=1,2* delims==" %%a in ('findstr /c:"\"2"\" %temp%\tmp2.txt') do set k=%%b
echo Windows Registry Editor Version 5.00>c:\my.reg
echo.>>c:\my.reg
echo [HKEY_CURRENT_USER\Keyboard Layout\Preload]>>c:\my.reg
for /f "skip=3 tokens=1,2* delims==" %%a in (%temp%\tmp2.txt) do (
if "!k!"=="%%b" (echo %%a="E0200804">>c:\my.reg) else (
echo %%a=%%b>>c:\my.reg
))
echo "!n!"=!k!>>c:\my.reg
pause
-----------------------------------------分割线------------------------------------------------
重新整了一下,应该可以了吧

[ 本帖最后由 2011pzn 于 2011-11-22 13:55 编辑 ]
作者: freesoft00    时间: 2011-11-23 19:14
再次感谢,这次可以了。




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