admin 管理员组

文章数量: 887021


2024年1月18日发(作者:数据库语言又称为)

13. 从Script中控制Windows和应用程序

Microsoft Windows Script Host(WSH)2提供了一些用来控制Script的新功能,例如:延迟Script的方法、仿真传送给应用程序的按键动作(keystroke),以及在应用程序之间切换等等。在本章中,您将学会如何使用这些方法来自动化一般的工作以及在登入期间设定您自己的环境。本章也将告诉您如何在Windows 2000中新增登录脚本(script),以及看到Windows 2000用来在启动、关机、登入和注销期间执行Script的新功能。

延迟Script的执行

要暂停或延迟Script叙述的执行,您可以使用我们在前面章节中已经使用过的 Sleep 方法。

使用 Sleep 方法来减轻CPU的负担

有时候您必须同步处理Script和另一个程序。举例来说,在第11章中您看到了Windows 98网域登录脚本试着读取 UserName 属性的解决方案。当这个属性传回空的值时,Script必须等待直到此属性有值为止。下面的程序代码解决了这个问题:

Set WshNetwork = Object("k")

User = "" ' 初始化

Do While User = "" ' 重复直到使用者名称被传回为止

200 ' 暂停以便减低CPU负担

User = me ' 读取属性

Loop

这个Script使用循环来取得 me 属性直到传回的值不是空的为止。您在第9章便看过类似的技巧了(Script需要等待直到使用者透过按下 确定

钮来确认 Microsoft Internet Explorer

窗体的输入)。我们可以使用下面的程序代码来轮询(poll)窗体的状态:

Do ' 等待直到【确定】钮被按下了

200 ' 暂停200微秒

Loop While (al() = 0)

第3个VBScript叙述会呼叫 CheckVal 方法以便决定 Internet Explorer

的内部状态。如果用户按下窗体的 确定钮

,那么 CheckVal 便会传回1而且循环也将结束。轮询有个很大的缺点:他可能会占据CPU百分之百的资源。因此,我加入这个叙述到循环中:

200 ' 暂停200微秒

这个叙述会呼叫 WScript 对象的 Sleep 方法。传递给此方法的参数用来指定Script的执行要被暂停多久(单位是微秒,即千分之一秒)。循环每次执行时,Sleep 都会暂停Script的执行达200微秒的时间。在这段周期内,Script都不会使用到CPU的资源。

在轮询中使用 Sleep 方法的结果如图13-1所示。在Windows 2000的 Windows页中, CPU任务管理器

的 效能

标签使用历程记录

曲线图显示的是两个Script使用的CPU负担(从窗体范例中取得的)。不含

叙述的 Do While 循环的执行会占据CPU百分之百的负担直到使用者按下 确定钮

为止,如图13-

1的左边记录所示。这张图也显示了如果Script使用 叙述所占用的CPU负担,如图13-1的右边记录所示。改善后的Script并不会造成太多的CPU负担。这段时间周期内一开始所看到的小起伏是由鼠标点按以启动这个Script,并加载窗体到 Internet Explorer

中,以及Script中轮询 直到浏览器完成加载窗体为止的循环所造成。

图13-1 在轮询期间的处理器使用情形

说明

工作管理者

来监视CPU使用历程记录。而在Windows 95和Windows 98中,您可以使用 系统监视器

(在Windows NT和Windows 2000中也有)。

您可以在Windows NT或Windows 2000中使用 Windows使用延迟来解决异步处理的问题

现在让我们来看看 Sleep 方法能够如何帮助解决另一个异步处理的问题。当我使用 SendKeys(本章稍后将介绍到)时偶而会遇到这个问题。让我们假设Script启动两个外部的应用程序( 小算盘

和 记事本

)并显示允许用户互动的对话盒:

"", 1 ' 启动【小算盘】

"", 1 ' 启动【记事本】

"应用程序有被启动了吗?"

您想哪个窗口会先被显示呢?以及哪个会在前景呢?看第一眼时,您可能会说 小算盘

会先被显示出来,然后才是 记事本

窗口重迭到 小算盘

窗口的上面,而Echo对话盒则依然会留在前景。然而,在笔者的系统上, 小算盘

窗口和Echo对话盒都被隐藏到 记事本

窗口的后面。用户只能够从任务栏上的按钮认出Echo对话盒。

这个动作就是Windows如何处理这些应用程序的结果。这个Script使用了两个 Run 呼叫并从下一个命令继续执行。于是,Echo对话盒会在Windows可以启动外部应用程序之前先被显示。还有,应用程序窗口的顺序与每个应用程序启动时所需的时间长短有关。(由此处可看出 记事本

在启动时花费的时间比 小算盘

要来得短。)

说明

在 MsgBox 或 Popup 中,您可以使用常数 vbSystemModal 来强制Windows在前景中显示对话盒。但是,这个常数在 Echo 方法中却无法使用。

要指定哪个应用程序窗口被显示在前景中,您可依序开启应用程序窗口并以等待直到窗口可以看得见为止的方式来撰写Script。在大部分的情况下,您可以藉由在执行 Run 方法之后使用简单的延迟来达到这个目的:

"", 1 ' 启动【小算盘】

500 ' 等待0.5秒

"", 1 ' 启动【记事本】

500 ' 等待0.5秒

"请关闭所有的应用程序窗口。"

以参数500呼叫 Sleep 方法会使得Script暂停0.5秒直到下一个命令被处理。于是,应用程序窗口和Echo对话盒便会被以适当的顺序来显示。这个动作如程序13-1中的VBScript程序代码所示。这个程序会启动 小算盘

和 记事本

并显示对话盒。在第2个部分中,两个应用程序和一个额外的对话盒都会被启动(每个叙述之间都有短暂的延迟)。

程序13-1

'************************************************

' 档案: (WSH sample in VBScript)

' 作者: (c) G. Born

'

' 使用Run方法来启动【小算盘】和【记事本】

'************************************************

Option Explicit

Dim oShell

' 建立WshShell对象

Set oShell = Object("")

"", 1 ' 启动【小算盘】

"", 1 ' 启动【记事本】

' 现在在启动应用程序之后延迟Script

"第2次尝试:启动【小算盘】和【记事本】。"

"", 1 ' 启动【小算盘】

500 ' 等待0.5秒

"", 1 ' 启动【记事本】

500 ' 等待0.5秒

"请关闭所有的应用程序窗口。"

'*** 程序结束

使用 AppActivate 方法来启动应用程序

您可以使用前面看过的 WshShell 对象的 Run 方法来启动外部的应用程序,而在WSH 2中您可藉由使用

AppActivate 方法来切换应用程序到前景(使其获得焦点)。

让我们来看一个Script启动两个应用程序的简单范例。其中一个应用程序窗口会先取得焦点。若用户按下另一个窗口,那么他便会取得焦点。要从WSH Script中控制窗口(举例来说,以 SendKeys 传送数据给他),您必须保证窗口拥有焦点。

AppActivate 方法使用如下的语法:

物件.AppActivate 标题

对象变量「对象」包含 WshShell 对象的参考,而「标题」则包含显示在要被启动(正在执行)之窗口程序中的标题文字。程序13-2中的Script使用了 AppActivate 方法。这个Script会启动 小算盘

和 记事本

然后将焦点从一个窗口转换到另一个窗口。这个Script将询问用户窗口的标题并将焦点转移到包含此给定标题文字的窗口。

程序13-2

'********************************************************

' 档案: (WSH 2 sample in VBScript)

' 作者: (c) G. Born

'

' 启动【小算盘】和【记事本】

' 并使用AppActivate在应用程序之间切换

'********************************************************

Option Explicit

' 定义应用程序窗口的标题字符串

' 重要:这些字符串与Windows的语言版本有关

Const Edit_Title = "未命名 - 记事本" ' 窗口的标题

Const Calc_Title = "小算盘" ' 窗口的标题

Dim Wsh, win_title

' 建立Run和AppActivate需要的WshShell对象

Set Wsh = Object("")

' 我们试着启动两个应用程序

' 为了保证后者会取得焦点,所以我们必须延迟Script

"",1 ' 启动【小算盘】

800 ' 延迟允许【小算盘】取得焦点

"", 1 ' 启动【记事本】

800 ' 延迟允许【记事本】取得焦点

"请按下【确定】钮以便设定焦点给【小算盘】窗口。"

' 将焦点设回给【小算盘】窗口

ivate Calc_Title

' 将焦点设定给【记事本】窗口

"请按下【确定】钮以便设定焦点给【记事本】窗口。"

ivate Edit_Title

' 询问用户窗口的标题并将焦点设定给该窗口

win_title = InputBox ("请输入窗口的标题:", _

"询问窗口标题", Calc_Title)

ivate win_title

'*** 程序结束

让我们来仔细看看程序13-2中的某些程序代码。首先,您定义了两个包含窗口标题字符串的常数:

Const Edit_Title = "未命名 - 记事本" ' 窗口的标题

Const Calc_Title = "小算盘" ' 窗口的标题

定义这些标题字符串为常数是非常方便的,因为 小算盘和 记事本

都使用当地语言的标题。举例来说,中文版的Windows就使用和英文版Windows不同的字符串。要让这个范例适应Windows的其他语言版本,您只需要修改常数中的标题文字即可。然后建立包含您需要执行的 Run 方法之 的参考:

Set Wsh = Object("")

在这些初步设定之后,您便准备好可以使用 Run 方法来启动应用程序了:

"",1 ' 启动【小算盘】

"", 1 ' 启动【记事本】

要避免因为加载时的延迟而让 小算盘取

得焦点,您可以使用 Sleep 方法:

"",1 ' 启动【小算盘】

800 ' 延迟允许【小算盘】取得焦点

"", 1 ' 启动【记事本】

800 ' 延迟允许【记事本】取得焦点

800微秒的延迟在我的系统是足够保证 记事本窗

口会取得焦点的。第2个延迟则确保两个应用程序在启动之后Script的对话盒会被显示在前景中,如图13-2所示。如果您省略延迟,那么其中一个应用程序将可能会变成在对话盒被显示出来之后才看得见。在程序13-2的范例中,Script的对话盒会被隐藏在背景中而应用程序窗口则会取得焦点。

图13-2 显示应用程序窗口和拥有焦点之Script对话盒的 桌面

如果使用者按下 确定

钮,那么下面的命令就会转移焦点到 小算盘

窗口:

ivate Calc_Title

Script叫用的其他对话盒允许使用者检查每个步骤的结果。在最后一个步骤中,用户可以输入任何显示在 桌面

上或工具栏中之窗口的标题文字。Script便会将焦点转移到这个窗口上。

说明

当 AppActivate 方法转移焦点到指定的应用程序或窗口时并不会影响到窗口样式─举例来说,无论窗口是最大化或最小化,他都不会受到影响。因此,工具栏上的按钮可以取得焦点。而WSH 2并不提供改变窗口样式的方法。

使用 AppActivate 方法时易犯的错误

要决定启动哪个应用程序,AppActivate 会将传递给他的「标题」参数和每个执行中的应用程序的标题字符串做比较。如果都没有完全符合,那么任何标题字符串的开头包含「标题」变量之式样(pattern)的应用

程序就会被启动。如果还是没有发现应用程序,则任何标题字符串的结尾包含「标题」变量之式样的应用程序就会被启动。

虽然一般而言这是非常好用的,但是 AppActivate 方法有下面这几个缺点:

 您在设计时期就必须知道确切的标题。如果Script是在其他语言的Windows上面执行,则您首先必须指定窗口标题的常数。

 如果程序改变其标题文字,那么要使用 AppActivate 就变得很困难甚至不可能。

 如果窗口是最小化,您便无法将窗口样式变为正常或最大化。

 如果好几个窗口使用相同的窗口标题,您便无法使用标题文字来侦测指定的窗口。如果超过一个以标题命名的应用程序的实体存在,则 AppActivate 会启动第1个实体(由内部的、开启的窗口列表来决定)。

程序13-3示范的是在JScript中使用 AppActivate,并叫用两个 小算盘

实体的例子。他接着会在两个 小算盘

之间切换焦点。因为这两个窗口使用的都是相同的标题,因此并不会发生变化。

程序13-3

//********************************************************

// 档案: (WSH 2 sample in JScript)

// 作者: (c) G. Born

//

// 启动【小算盘】两次并试着在两个窗口之间做切换

//********************************************************

// 定义应用程序窗口的标题字符串

// 重要:这些字符串与Windows的语言版本有关

var Calc_Title = "小算盘"; // 窗口标题

// 建立Run和AppActivate需要的WshShell对象

var Wsh = Object("");

// 我们试着启动两个应用程序

// 为了保证后者会取得焦点,所以我们必须延迟Script

("", 1); // 启动【小算盘】

("", 1); // 启动第2个【小算盘】的实体

(800); // 延迟直到【小算盘】获得焦点

// 在两个【小算盘】窗口之间切换焦点

("请按下【确定】钮以便设定焦点给【小算盘】窗口。");

ivate(Calc_Title);

("请按下【确定】钮以便设定焦点给第2个【小算盘】窗口。");

ivate(Calc_Title);

//*** 程序结束

结论是,WSH 2的 AppActivate 方法并未提供改变窗口样式的任何方法,而窗口标题也并非分辨窗口的最佳办法。《Windows Script Host Programmer's Reference》(1999年,Dino Esposito着,Wrox出版)提到

AppActivate 可以使用从 Shell 函数取得的程序标识符(Process Identifier,PID)来启动窗口,但是WSH 2并不支持 Shell 函数。

使用 SendKeys 方法来仿真按键动作

Script可以叫用应用程序并将其窗口切换至前景。所有用户输入的按键动作都会影响到该应用程序窗口。有时候Script需要有模仿使用者输入的能力。

在WSH 2中使用 SendKeys

在WSH 2中,您可以使用 WshShell 对象的 SendKeys 方法。让我们来看个简单的范例吧!下面的JScript程序代码使用了 Run 方法来启动 小算盘

var WshShell = Object("");

("");

(200);

最后一行叙述是必要的以便允许 小算盘

窗口取得焦点。如果这个延迟被省略,那么Script可能会在 小算盘

取得焦点之前先去执行随后的传送按键动作的叙述;如果这真的发生,则所有的按键动作都将会遗失。

在 小算盘拥

有焦点之后,Script就会传送表达式「10+2=」给 小算盘窗

口。SendKeys 方法的语法如下:

ys 按键

SendKeys 方法是 WshShell 对象的一部份;「按键」参数包含要传送的单个或一串字符。这个参数中每个被传递的「按键」都被以至少1个字符来表示。键盘的按键可以被以单个字符来表示。举例来说,要传送A按键,您可以在「按键」参数中传递字符A。如果字符串包含数个字符(例如ABC),那么这串字符组便会被传送给应用程序。

加号(+)在 SendKeys 命令中有特殊的意义(请参考 表13-2 )。为了要被传递给这个方法,此字符必须被以大括号给围住。比方说,要传递加号,您可以在「按键」参数中将字符串写成 {+}。

因此,您可以使用下面的叙述来传送命令给 小算盘

窗口:

ys("10");

ys("{+}");

ys("2");

ys("=");

每个 SendKeys 呼叫都会传递包含字符串的参数。因此 小算盘

便会计算该表达式并将答案12显示出来。下面的命令会暂停Script并清除 小算盘

中显示的结果:

(2000);

ys("c")

在循环中,Script会强制 小算盘相

加数字1到3:

for (var i = 1; i <= 3; i++)

{

ys(i); // 相加数字1到3

ys("{+}");

}

完整的Script范例显示于程序13-4中。

程序13-4

//*****************************************************

// 档案: (WSH 2 sample in JScript)

// 作者: (c) G. Born

//

// 使用SendKeys方法来启动【小算盘】并进行运算

//*****************************************************

// 建立Run方法需要的WshShell对象

var WshShell = Object("");

// 启动【小算盘】

("");

// 暂停直到【小算盘】准备好要取得输入

// 否则,从SendKeys取得的「键盘输入」将跑到Windows的讯息暂存区中

// 而且将在【小算盘】获得焦点之前便被传送给拥有焦点的窗口了

(200); // 就等一下下啰

ys("10");

ys("{+}");

ys("2");

ys("=");

(2000); // 等待2秒钟

ys("c"); // 清除结果

for (var i = 1; i <= 3; i++)

{

ys(i); // 相加数字1到3

ys("{+}");

}

("结束?");

(200);

ys("%{F4}"); // 使用Alt+F4来关闭【小算盘】

(); // 结束Script

//*** 程序结束

再谈 SendKeys 方法

加号(+)、脱字符号(^)、百分比符号(%)、波浪符号(~)和小括号(( ))在 SendKeys 命令中都有特殊的意义(请参考表13-1和表13-2)。这些字符必须在要被传递给这个方法的字符串中以大括号给围起来。比方说,要传送加号,您可以将「按键」参数中的字符串写为 {+}。而中括号([ ])也必须在他们被传送给 SendKeys 方法之前先被以大括号给围住,因为这些字符在使用动态数据交换(Dynamic Data Exchange,DDE)的应用程序中具有特殊的意义。要传送大括号时,您可以使用 {{} 和 {}}。

您键盘上的某些按键(包括 Enter

键和 Tab

键等)并不会产生可见的字符。要传送这些按键到 SendKeys

方法,您必须将其编码。表13-1显示的是所有特殊按键的代码。

表13-1 SendKeys 方法中特殊按键的代码

按键

编码

Backspace

{BACKSPACE}、{BS} 或 {BKSP}

Break

{BREAK}

Caps Lock

{CAPSLOCK}

Delete

End

Enter

Esc

Help

{DELETE} 或 {DEL}

{END}

{ENTER} 或~

{ESC}

{HELP}

Home

Insert

{HOME}

{INSERT} 或 {INS}

Num Lock

{NUMLOCK}

Page Down

{PGDN}

Page Up

{PGUP}

Print Screen

{PRTSC}

Scroll lock

{SCROLLLOCK}

Tab

F1

F2

F3

F4

F5

F6

F7

F8

F9

F10

F11

F12

F13

F14

F15

F16

{TAB}

{UP}

{DOWN}

{LEFT}

{RIGHT}

{F1}

{F2}

{F3}

{F4}

{F5}

{F6}

{F7}

{F8}

{F9}

{F10}

{F11}

{F12}

{F13}

{F14}

{F15}

{F16}

要传送包含Shift、Ctrl或Alt的按键组合,您必须插入特殊代码到第2个按键代码的前面。这些按键的特殊代码如表13-2所示。

表13-2 SendKeys 方法中组合键的代码

按键

用于第2个按键代码前面的代码

Shift

+

Ctrl

^

Alt

%

因此,^X 代表的就是Ctrl+X了。如果按键组合包含超过两个按键,您就必须将这些字符放置在小括号里面。这个指定听起来可能很复杂,但实际上并非如此。举例来说,要传送按键组合Shift+E+C,您需要传送的是字符串 +(EC) 。其中加号表示Shift键,而 (EC) 则代表当Shift键按住时必须一起按下的按键E和C。要传送Shift+E接着是C键的按键组合,您要使用的字符串是 +EC。其中加号是表示要用来与E组合的Shift键。在那个按键组合被处理完之后,字符C才会被取得。第1个例子中的参数会强制Windows在大括号中直译按键为以Shift为前置句柄的按键组合。

要表示重复的按键,您可以使用 {按键代码 次数} 这种格式(「按键代码」和「次数」之间的空格是一定得有的)。比方说,字符串 {LEFT 42} 就表示要将←键按42下;而字符串 {H 10} 则表示要将 H

键按10下。

提示

要自动触发 Num Lock

键,您可以使用 SendKeys 来撰写传送代码 {NUMLOCK} 的Script。在每次系统开始时都从 启动

菜单中去执行这个Script以便触发 Num Lock

键。在随书光盘的WSHDevGuideChapter13文件夹中的会为您达到这个目的。

使用 SendKeys 来操作两个应用程序

现在请看一个使用 SendKeys 方法的范例,然后是如何使用 SendKeys 来与其他方法相搭配。这个范例是以JScript撰写,并以下面的命令来启动 小算盘

和 记事本

("",1); // 启动空的【记事本】

(500); // 延迟直到【记事本】取得焦点为止

("",1); // 启动【小算盘】

(500); // 延迟直到【小算盘】取得焦点为止

Sleep 方法用来确保 小算盘能

够取得焦点。您接着可以使用 SendKeys 来计算「10+2」,其使用的命令如下:

ys("10"); // 计算点东西

ys("{+}");

ys("2");

ys("=");

上面的程序代码使用按键代码来强制 小算盘

计算给定的表达式。您接着可以使用下面的叙述来复制结果到 剪贴簿

中:

ys("^{c}"); // 复制结果到【剪贴簿】中

代码 ^{c} 表示Ctrl+C的快捷键。Script接着会显示告知用户结果将被写入 记事本

窗口的对话盒。若使用者关闭此对话盒,那么Script就会藉由使用下面的程序代码来转移焦点到 记事本

中并插入 剪贴簿

的内容:

ivate(Edit_Title);

// 写入文字到【记事本】窗口中

// 首先从剪贴簿中插入结果

ys("Calculation Result: ");

ys("^{v}");

ys("nn");

第1行叙述使用窗口标题来转移焦点到应用程序上。(如果有超过1个窗口使用这个标题,那么这个方法就显得不是很可靠了。)这3个呼叫 SendKeys 方法的叙述会写入一些文字到 记事本

窗口中,然后从 剪贴簿

中贴上计算后的结果。代码 nn 会在文件的结尾建立两个新行。Script接着使用简单的 for 循环来写入更多的文字到 记事本窗

口中:

// 现在写入文字30遍

for (var i = 1; i <= 30; i++)

{

ys(i + " Hello, worldn");

}

Script接着试着要关闭 小算盘

窗口和 记事本

窗口。他首先会试着关闭 小算盘

窗口:

ivate(Calc_Title); // 设定焦点到【小算盘】上

ys("%{F4}"); // 使用Alt+F4来关闭【小算盘】

使用Alt+F4来关闭 记事本窗

口会唤起「是否储存这些变更?」的对话盒,所以Script还需要额外的步骤来「按下」 否钮

(即使用Alt+N快捷键来选取 否钮

)。

ivate(Edit_Title);

ys("%{F4}"); // 使用Alt+F4来关闭【记事本】

ys("%{N}"); // 「按下」了【否】钮

完整的实作如程序13-5所示。

程序13-5

//**************************************************

// 档案: (WSH 2 sample in JScript)

// 作者: (c) G. Born

//

// 使用SendKeys和AppActivate方法来启动

// 【小算盘】和【记事本】并写入应用程序窗口

//**************************************************

// 定义应用程序窗口的标题字符串

// 重要:这些字符串与Windows的语言版本有关

var Edit_Title = "未命名 - 记事本"; // 窗口标题

var Calc_Title = "小算盘"; // 窗口标题

// 建立Run和AppActivate需要的WshShell对象

var oWSH = Object("");

// 我们试着启动两个应用程序

// 为了保证后者会取得焦点,所以我们必须延迟Script

("",1); // 启动空的【记事本】

(500); // 延迟直到【记事本】取得焦点为止

("",1); // 启动【小算盘】

(500); // 延迟直到【小算盘】取得焦点为止

ys("10"); // 计算点东西

ys("{+}");

ys("2");

ys("=");

ys("^{c}"); // 复制结果到【剪贴簿】中

("写入文字到【记事本】窗口中。");

// 设定焦点到【记事本】窗口上

ivate(Edit_Title);

// 写入文字到【记事本】窗口中

// 首先从剪贴簿中插入结果

ys("Calculation Result: ");

ys("^{v}");

ys("nn");

// 现在写入文字30遍

for (var i = 1; i <= 30; i++)

{

ys(i + " Hello, worldn");

}

("关闭【小算盘】窗口。");

ivate(Calc_Title); // 设定焦点到【小算盘】上

ys("%{F4}"); // 使用Alt+F4来关闭【小算盘】

("关闭【记事本】窗口。");

// 设定焦点到【记事本】上并送出结束命令

ivate(Edit_Title);

ys("%{F4}"); // 使用Alt+F4来关闭【记事本】

ys("%{N}"); // 「按下」了【否】钮

//*** 程序结束

您现在知道控制外部应用程序的新WSH 2程序设计技巧了。更深入的讨论与处理外部应用程序之额外方法的信息,请参阅《Advanced Development with Microsoft Windows Script Host 2.0》。

使用登录脚本来自定义化Windows

您已经在前面的章节中学过如何撰写对应网络驱动器机或连接到网络打印机的登录脚本(Script)了。您也知道如何使用 FileSystemObject 对象与其方法(例如,用来备份文件),以及学会开发在 桌面

上或在 开始

菜单中建立快捷方式的Script的技巧。因此您也知道您可以使用Script来自定义化用户的系统和自动化工作。我尚未讨论的是如何撰写在诸如启动、关机、登入和注销等事件期间被执行的Script。自从Windows NT

4支持登录脚本(比方说,批处理文件)以来,Microsoft已经在Windows 2000中尽了最大的努力想要提供在启动、关机、登入和注销期间使用的延伸的Script支持。

设定登录脚本

在Windows 2000(甚至是Windows NT)中,管理者可以自动执行登录脚本的方式在每次任何使用者登入时都来设定这位使用者的账号。(您可以使用前面章节中自定义的Script来达到这个目的。)要设定登录脚本,请采取下面这些步骤:

1. 复制登录脚本或自定义的Script到脚本文件路径中。(请参考本节稍后有关确切位置的说明。)

2. 以管理者的身份登入,并启动管理使用者账号的工具。在Windows 2000中, Microsoft管理控制台 (MMC)提供了必要的功能。在 控制面板 双击 系统管理工具 ,然后再双击 计算机管理 。(在Windows NT 4里面,您可以使用 使用者管理员 来管理使用者账号。)

3. 选取用户账号并显示其内容。在 Microsoft管理控制台 中,选取分支 系统工具本机用户和群组使用者 并双击用户账号列表中的用户名称项目。(在Windows NT 4中,双击账号清单中的用户名称可以开启使用者账号的 内容 对话盒。)

4. 在使用者的 内容 对话盒中选取 配置文件 属性页次并在 登录脚本 文本框中输入登录脚本的文件名,如图13-3所示。(在Windows NT 4中,按下 配置文件 钮可以开启包含 登录脚本 文本框的对话盒。)

图13-3 Microsoft管理控制台 和 配置文件 属性页次

在您使用 确定

钮来关闭完属性页次和对话盒之后,这个使用者账号的设定便会被储存起来。如果您先前不曾这么做过,那么您尚需要复制登录脚本到Script路径中。这个路径与登录脚本在登入网域或登入本机账号时是否被执行有关。要在登入网域时执行登录脚本,Script必须被储存在主域控制器上面。在Windows

NT 4的域控制器上,登录脚本的路径是:

systemrootsystem32replimportscripts

其中 systemroot 表示Windows文件夹的路径;而在Windows 2000的域控制器上,登录脚本的路径则是:

sysvoldomainnamescripts

针对Windows 2000或Windows NT 4的本机账号,登录脚本的路径如下:

systemrootsystem32replimportscripts

如果Script是放在这个登入路径中,那么您只需要在 登录脚本

文本框中输入档名(例如)即可。您也可以在储存登录脚本的Script路径中使用子文件夹(比方说,以便您可以为使用者群组分类不同的登录脚本)。在这种情况下,您必须在档名的前面加上相关的路径(举例而言,)。

现在登录脚本每当该名使用者登入时便会自动地执行。这个方法的好处是您可以指定个人的登录脚本给每个使用者。

注意

在Windows 2000中,您可以直接使用WSH Script档案来当作登录脚本。(您可以在 登录脚本

文本框中以扩展名.vbs、 .js和.wsf输入档案。)Windows NT 4只支援扩展名为.exe、 .cmd和.bat的登录脚本,所以您必须建立启动WSH登录脚本的.bat档案、将.bat档案储存在Script路径中,最后再将.bat的档名输入到 登录脚本

文本框中。

使用全局性的登入和注销脚本文件

Windows 2000提供另一个自动在使用者登入或注销期间执行Script的方法:

1. 使用在登入或注销期间您所需要的命令来撰写您的Script。将这个Script储存为WSH Script档案放置于本机文件夹中。

2. 以管理者的权限登入并启动支持使用者和组策略的 Microsoft管理控制台 。(其步骤请参阅 附录B 中的说明。)

3. 在树状目录中选取分支 本机计算机原则用户设定Windows设定脚本文件 - (登入/注销) 。

4. Microsoft管理控制台 会在右边窗格显示两个分别表示 登入 和 注销 脚本文件的图示。双击其中一个图示将会开启 脚本文件 页次(如图13-4所示)。

图13-4 Microsoft管理控制台 和 脚本文件 页次

5.

按下 新增 钮来叫用 新增脚本文件 对话盒(如图13-5所示)。输入脚本文件的档名和参数(可有可无)到对话盒中。您也可以使用 浏览 钮来选取任何文件夹中的Script。

图13-5 新增脚本文件 对话盒

在您使用 确定

钮来关闭所有开启的对话盒之后,每当使用者登入或注销时(视您双击的图示而定)被选取的Script档案就会自动被执行(与使用者账号无关)。

使用启动和关机脚本文件

Windows 2000尚允许启动和关机脚本文件的执行(与使用者的登入或注销无关)。这对执行目前没有使用者登入的机器(比如说,服务器)而言是很方便的。如果您需要在启动或关机期间会自动被执行的脚本文件,那么请采取下面这些与前一小节类似的步骤:

1. 使用在启动或关机期间您所需要的命令来撰写您的Script。将这个Script储存为WSH Script档案放置于本机文件夹中。

2. 以管理者的权限登入并启动支持使用者和组策略的 Microsoft管理控制台 。

3. 如果需要则连接到远程的机器(其本机原则将自动被加载)上,并在树状目录中选取分支 本机计算机原则用户设定Windows设定脚本文件 - (启动/关机) 。

4. 在右边窗格双击 启动 或 关机 的图示,并按下 新增 钮来叫用 新增脚本文件 对话盒(如图13-5所示)。

5. 输入脚本文件的档名和参数(可有可无)到对话盒中。如果需要,您也可以使用 浏览 钮来选取任何文件夹中的Script。

在您使用 确定

钮来关闭所有开启的对话盒之后,在每次系统启动或关机期间(视您双击的图示而定)被选取的Script档案就会自动被执行。

Windows 95和Windows 98中的启动和登录脚本

如果Windows 95或Windows 98的机器是在Windows NT域控制器的网络环境中执行,那么网络管理者便可以设定要在使用者或组策略中被执行的登录脚本。如果计算机是在工作组环境中或者单独系统中执行,则您可以选择下面的其中一个方法以便在使用者登入期间自动执行脚本文件:

 最简单的方法是新增包含要执行脚本文件命令的快捷方式到 开始 菜单的 启动 文件夹中。(举例来说,您可以在Windows 98中使用拖放来达到这个目的。)

 您可以新增像是「 路径脚本文件」这样的命令到登录的分支HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows的 Run 机码中。您可以使用 系统策略编辑器 或 系统配置编辑器 (在Windows 98中)来维护 Run 机码的内容。或者使用第11章介绍过的登录存取技巧来从 Run 登录机码中新增或移除项目。

无论您选择的是哪个方法,所有的脚本文件都会在每次使用者登入时被执行。


本文标签: 使用 脚本 启动 方法