Autoit脚本实现计算机等级考试修改考试用户名
作者:陈
来源:《电脑知识与技术》2010年第03
        摘要:该文主要介绍了如何配置用于计算机等级考试的学生机,Autoit语言实现模拟手动修改考试用户名,简单介绍了应用WMI服务命令和调用NetUserSetInfo API函数实现全自动修改考试用户名,从而提高配置大量考试用机的工作效率和准确性。
        关键词:Autoit;WMI;API
       
        中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)03-632-02
        Autoit Realization the Calculator Grade Examination Modification User's Name
        CHEN Xi
        (Minjiang University, Fuzhou 350000, China)
        Abstract: This text introduce how move the modification examination user's name with the Autoit language hand, introduce the applied WMI service order with adjust to carry out a full-automatic modification with the function of NetUserSetInfo API, raise the work efficiency and accuracy thus.
        Key words: Autoit; WMI; API
        自从计算机等级考试操作系统环境要求为Windows以来,考试学生机要求每台机器名按顺序编排(例如compt01compt02compt03……),并且Windows的登录用户名的顺序号要与机器名相一致(例如ks01ks02ks03……)。现在学生机基本上配有硬盘还原卡,大多数还原卡所带的驱动可以自动有序修改机器名,但是不能实现自动有序设置修改用户名,如果是几百台计算机要人工手动修改计算机名的话,工作量是非常复杂、而且容易出错,不利于学生考试。
        因些要想自动、准确地配置好考试登录用户名,有两种方案,第一种是每台机从样机同步复制系统后,删除旧的用户名,另外新建与计算机序号相同的用户名;第二种是直接修改原用户名,改成与计算机序号相同的用户名。第一种方案,会出现新建立的用户配置文件与样机原用
户配置文件不同,会造成映射盘符不同、输入法不同、用户界面快捷方式等不同,与样机调试好的考试环境有较大出入,而第二种方案完全保持样机原用户配置文件,与样机调试好的考试环境完全相同,所以选择第二种方案。
        1 AutoIt 语言实现模拟手动修改用户名
        要实现第二种方案,可以考虑先从最简单的模拟手动操作键盘、鼠标修改用户名出发,AutoIt语言是用以编写并生成具有 BASIC 语言风格的脚本程序语言,它被设计用来在Windows GUI(用户界面)中进行自动操作. 通过它可以组合使用模拟键击,鼠标移动和窗口/控件操作等来实现自动化任务,而这是其它语言所无法做到或尚无可靠方法实现的, AutoIt 非常小巧,完全可以运行在目前流行的Windows操作系统上 , 并且不需要任何运行库。
        模拟手动修改用户名的程序设计主要思路如下:先获取机器名(例如compt02),截取机器名的后面两位序号(例如02),再定义新修改的用户名变量(例如 ks+序号02),通过调用计算机管理程序,再模拟键盘操作到样机原用户名(例如ks01),再模拟键盘输入新修改的用户名(例如 ks02)
        程序主要代码如下:
        dim $str=@ComputerName; 获取机器名
        ;Dim $var = "ks"&StringRight($str,2); 取变量var"ks"+机器名后两位
        $var = inputbox("用户名修改为","把当前用户名修改为:",@UserName); 输入新修改的用户名
        BlockInput(1); 禁止用户按键盘、鼠标,防止误操作
        Run("mmc%windir%\system32\compmgmt.msc",@TempDir); 调用计算机管理程序
        WinWait("计算机管理"); 等待计算机管理程序窗口激活
        Send("{DOWN 4}"); 模拟键盘向下操作4
autoit        Send("{RIGHT}"); 模拟键盘向右操作1
        ……
        send($var); 模拟键盘输入新修改的用户名
        ……
        WinClose ("计算机管理"); 关闭计算机管理程序
        BlockInput(0); 恢复用户按键盘、鼠标
        模拟手动程序优点是比较直观,让用户了解操作的每一步骤,但是缺点是实效性慢,因为新旧机器速度运行不一样,延时快慢不好精确设置,另外,一些新的还原卡驱动(如增霸卡新驱动V2.3)在样机传送完毕后,在更新计算机名时是会关闭键盘修改计算机用户名的操作,所以这个程序比较适合考试过程中个别机器出现故障,需要换另外备用机器而临时修改用户名使用。
        2 使用WMI服务命令自动修改用户名
        WMI是英文Windows Management Instrumentation的简写,WMICIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。
        有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API,工具软件和WMI可以方便地读写WMI。它的功能主要是:访问本地主机的一些信息和服务,可以方便地管理本地和远程计算机。
        目前主流的Windows都支持WMI,需要在计算机上安装 WMI服务并启动服务后,才能使用该命名空间中的管理功能。使用Autoit脚本编写的程序,需要先判断系统是否存在WMI服务,如果所需的服务名称winmgmt不存在,则需要从 MSDN 下载并安装 WMI,再启动服务Winmgmt
        程序主要代码如下:
        ; 设置服务winmgmt自动启动
        RunWait(@ComSpec & ' /c sc config winmgmt start= auto', @SystemDir, @SW_HIDE)
        ; 启动服务winmgmt
        RunWait(@ComSpec & ' /c sc start winmgmt', @SystemDir, @SW_HIDE)
        ;先修改用户全名,注销登录界面显示的是用户全名,把样机原用户全名考试ks01”修改为考试ks”序号
        RunWait(@COMSPEC & " /c WMIc useraccount where fullname='考试ks01' set fullname=考试ks%computername:~-2%")
        ; 修改用户名, 把样机原用户名“ks01”修改为“ks”序号
        RunWait(@COMSPEC & " /c WMIc useraccount where name='ks01' call rename name=ks%computername:~-2%")
       
        使用WMI服务命令自动修改用户名简单方便,但是需要安装并启动WMI服务。
        3 调用了Netapi32.dll中的NetUserSetInfo API函数自动修改用户名
        API的英文全称(Application Programming Interface),WIN32 API也就是MicrosoftWindows32位平台的应用程序编程接口。我们还可以调用Netapi32.dll中的NetUser
SetInfo API函数,这个API函数很强大,可以设置用户名或全名、密码、用户配置文件等,设置用户的各种信息最终都会调用到这个API
        可以先定义函数使用NetUserSetInfo,例如:
        Func _LsaLocalUserSetInfo($sUserName, $iLevel, $pBuffer, $sBufferType = "ptr", $sSystem = "")
        Local $iResult
        $iResult = DllCall("Netapi32.dll", "long", "NetUserSetInfo", "wstr", $sSystem, _
        "wstr", $sUserName, "dword", $iLevel, _
        $sBufferType, $pBuffer, "dword*", 0)
        Return SetError($iResult[0], 0, $iResult[0] = 0)
        EndFunc
        ; 先改全名,到用户名"ks01",用户全名修改为考试ks”序号
        _LsaLocalUserSetInfo("ks01", 1011, '考试ks' & StringRight(@ComputerName,2) , "wstr*")
        ; 再改用户名,到用户名"ks01",用户名修改为“ks”序号
        _LsaLocalUserSetInfo("ks01", 0, "ks"& StringRight(@ComputerName,2), "wstr*")
        4 结束语
        以上是针对不同情况,采用Autoit脚本语言按计算机等级考试要求进行修改Windows登录用户名的几种实现方法,可以大大地方便机房配置教学和考试用机,提高工作效率,本人程序抛砖引玉,需要不断进行完善,请专家指正。
       

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。