Board logo

标题: [注册表类] 批处理如何判断计算机类型然后打开或关闭数字键? [打印本页]

作者: crist    时间: 2011-1-5 13:49     标题: 批处理如何判断计算机类型然后打开或关闭数字键?

意图如下:
1、判断计算机是台式机还是笔记本
2、根据1返回的结果修改注册表,如果是台式机则打开数字键,如果是笔记本则关闭数字键

请问批处理代码应该怎样写?

另外我写了一个代码但是无法正确达到目的,清帮忙指正。谢谢
  1. wmic path Win32_SystemEnclosure get ChassisTypes /value >ChssisTypes.log
  2. FOR /F "skip=2 delims==" %%I IN (ChssisTypes.log) DO (
  3. SET T=%%I
  4. IF "%T%"=="{3}" REG ADD "HKEY_USERS\.DEFAULT\Control Panel\Keyboard" /v "InitialKeyboardIndicators" /d "2" /f
  5. IF "%T%"=="{10}" REG ADD "HKEY_USERS\.DEFAULT\Control Panel\Keyboard" /v "InitialKeyboardIndicators" /d "0" /f
  6. )
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-5 14:56 编辑 ]
作者: hanyeguxing    时间: 2011-1-5 13:57

  1. @echo off&setlocal enableDelayedExpansion
  2. for /f "tokens=2 delims==" %%a in ('wmic path Win32_SystemEnclosure get ChassisTypes /value') do (
  3.         set a=%%a
  4.         set b=0
  5.         if !a:~1^,-2!==10 set b=2
  6.         REG ADD "HKU\.DEFAULT\Control Panel\Keyboard" /v InitialKeyboardIndicators /d !b! /f
  7. )
  8. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-5 14:05 编辑 ]
作者: crist    时间: 2011-1-5 14:39     标题: 回复 2楼 的帖子

谢谢你的代码,我的电脑是台式机,但是我运行后发现注册表相关项的值是0而不是2。请问是怎么回事?
作者: hanyeguxing    时间: 2011-1-5 14:44

如果要求台机时设置为2,则:
  1. @echo off&setlocal enableDelayedExpansion
  2. for /f "tokens=2 delims==" %%a in ('wmic path Win32_SystemEnclosure get ChassisTypes /value') do (
  3.         set a=%%a
  4.         set b=0
  5.         if !a:~1^,-2!==3 set b=2
  6.         REG ADD "HKU\.DEFAULT\Control Panel\Keyboard" /v InitialKeyboardIndicators /d !b! /f
  7. )
复制代码

作者: crist    时间: 2011-1-5 15:09     标题: 回复 4楼 的帖子

谢谢
再请问一下!a:~1^,-2!的意思是?
如果是在安装系统的过程中运行本代码,setlocal一行还有效吗?如果不能使用setlocal,那么代码应该如何修改?

[ 本帖最后由 crist 于 2011-1-5 15:10 编辑 ]
作者: hanyeguxing    时间: 2011-1-5 15:22

  1. @echo off
  2. for /f "tokens=2 delims==" %%a in ('wmic path Win32_SystemEnclosure get ChassisTypes /value') do set a=%%a
  3. set b=0
  4. if %a%=={3} set b=2
  5. REG ADD "HKU\.DEFAULT\Control Panel\Keyboard" /v InitialKeyboardIndicators /d %b% /f
复制代码

作者: crist    时间: 2011-1-5 19:46     标题: 回复 6楼 的帖子

谢谢,在进入系统之后运行能行,我再把这段代码放到xp安装版T12阶段运行看是否成功。

附带问一句,你知道网上那些ghostxp是怎样实现判断计算机类型然后自动开启或关闭数字键的吗?
作者: crist    时间: 2011-1-6 14:18     标题: 回复 6楼 的帖子

在虚拟机测试:
1.在未进入桌面的情况下此批处理的运行结果是:
"InitialKeyboardIndicators"="0x80000000"

2.在进入桌面后运行则能正确修改注册表。
"InitialKeyboardIndicators"="0"
备注:虚拟机的计算机类型返回数值是{1}

这可能是因为
path Win32_SystemEnclosure get ChassisTypes /value
必须要在桌面环境运行吧

不知有什么办法能在安装系统的过程中(例如T13或者T12阶段)判断计算机类型然后打开/关闭数字键?
听说可以通过vbs脚步来实现,但不知应该怎么写代码。

[ 本帖最后由 crist 于 2011-1-6 14:20 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2