CRT JS脚本的常用命令

1 CurrentColumn属性

返回当前光标的列坐标。

实例:

var curCol = crt.Screen.CurrentColumn;
crt.Dialog.MessageBox(curCol);

2 CurrentRow

返回当前光标处的行坐标。

实例:

var curRow = crt.Screen.CurrentRow;
crt.Dialog.MessageBox(curRow);

3 Columns

返回当前屏幕的最大列宽。

实例:

var cols = crt.Screen.Columns;
crt.Dialog.MessageBox(cols);

4 Rows

返回当前屏幕的最大行宽,这个行宽指的是可见区的,并不是指缓冲区的行宽

实例:

var rows = crt.Screen.Rows;
crt.Dialog.MessageBox(rows);

5 IgnoreEscape

定义当使用WaitForString、WaitForStrings 和 ReadString这三个方法时是否获取Escape字符(也就是特殊控制字符,如"\n"),默认是会获取的。

参数:
True|False:当设置为true时不会获取特殊字符,为False时会获取,默认为False。

实例:

// 设置False,获取ctrl+c
crt.Screen.IgnoreEscape = False;
crt.Dialog.MessageBox(crt.Screen.ReadString("\03"));

// 设置True,不获取ctrl+c
crt.Screen.IgnoreEscape = True;
crt.Dialog.MessageBox(crt.Screen.ReadString("\03"));

6 MatchIndex

当使用WaitForStrings 和 ReadString这两个方法获取字符串时,会根据参数的位置获取返回值,而MatchIndex就是这个位置,从1开始计算,如果没有一个匹配到则返回0,可以根据下面的例子来看。

语法
crt.Screen.MatchIndex

代码

var outPut = crt.Screen.ReadString("error", "warning", "#", 10);
switch (crt.Screen.MatchIndex) {
case 0:
	crt.Dialog.MessageBox("Not Found!");
	break;
case 1:
	crt.Dialog.MessageBox("Found 'error'");
	break;
case 2:
	crt.Dialog.MessageBox("Found 'warning'");
	break;
case 3:
	crt.Dialog.MessageBox("Found '#'");
	break;
}

7 Synchronous

设置屏幕的同步属性,若设置为False,则在脚本中使用WaitForString、WaitForStrings或ReadString函数时可能存在丢失一部分数据的现象,而设置为True时不会,但是设置为true后可能会存在屏幕卡顿的情况,严重时可能会造成CRT卡死。

参数:

True|False :默认为False

实例:

crt.screen.Synchronous = true;
crt.screen.Send("\r\n");
crt.screen.ReadString("#");
crt.screen.Send("\r\n");
crt.screen.WaitForString("#");
crt.screen.Send("\r\n");
crt.screen.WaitForStrings("#",">");

8 Clear()

清屏功能

实例:

crt.Screen.Clear();

9 get()

按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列),不包含字符串中的回车换行符,所以这个多用于获取无格式的光标处字符串或某小段特定区域字符串。crt.Screen.Get(row1, col1, row2, col2)

实例:

var getScr = crt.Screen.Get(1,10,1,100);
crt.Dialog.MessageBox(getScr);

10 get2()

按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列),包含字符串中的回车换行符,所以这个多用于获取大段带格式的字符串。crt.Screen.Get2(row1, col1, row2, col2)

实例:

var getScr = crt.Screen.Get(1,10,1,100);
crt.Dialog.MessageBox(getScr);

11 IgnoreCase()

使用全局参数设置控制在使用WaitForString、WaitForStrings和ReadString这三个函数时是否对大小写敏感,默认为false指大小写敏感即大小写字符串都会检查,设置为true时则不会检测大小写。

实例:

crt.Screen.IgnoreCase = true;

12 Send()

向远端设备或者向屏幕发送字符串。string是待发送的字符串,这个字符串可以包含转码字符比如"\r","\n","\03"(ctrl+c),当向屏幕上发送字符串时需要指定第二个参数为true。crt.Screen.Send(string[, bSendToScreenOnly])

实例:

// 向远程设备发送英文命令"show memory"
crt.Screen.Send("show memory\r\n");
//向屏幕上发送字符串
crt.Screen.Send("show memory\r\n",true);

13 SendKeys()

向当前窗口发送按键,包含组合按键,比如可以发送类似"CTRL+ALT+C"等这样的组合键,这样写即可:crt.screen.sendkeys("^%c");

实例:

crt.Screen.Clear();
crt.screen.sendkeys("^");

具体按键值可参照下表,修改对应参数即可,可以根据需要自由组合:

SHIFT

+

CTRL

^

ALT

%

BACKSPACE

{BACKSPACE}, {BS}, or {BKSP}

BREAK

{BREAK}

CAPS LOCK

{CAPSLOCK}

DEL or DELETE

{DELETE} or {DEL}

DOWN ARROW

{DOWN}

END

{END}

ENTER

{ENTER} or ~

ESC

{ESC}

HELP

{HELP}

HOME

{HOME}

INS or INSERT

{INSERT} or {INS}

LEFT ARROW

{LEFT}

NUM LOCK

{NUMLOCK}

PAGE DOWN

{PGDN}

PAGE UP

{PGUP}

PRINT SCREEN

{PRTSC}

RIGHT ARROW

{RIGHT}

SCROLL LOCK

{SCROLLLOCK}

TAB

{TAB}

UP ARROW

{UP}

Fn, n=1~16

{Fn},n=1~16

14 WaitForCursor()

等待光标移动,当移动时返回值为true,当有超时时间参数且超时时返回false,否则会一直等待光标移动。利用这个功能可以用来判断一个命令的输出是否结束,只不过超时时间是以秒为单位的。crt.Screen.WaitForCursor([timeout])

15 WaitForKey()

解释
检测有键盘按键时返回true,当有超时时间参数且超时时返回false,否则会一直等待按键。只可惜这个函数不知道输入的键是什么,否则就可以针对性的判断了,它只能检测到有输入而已。crt.Screen.WaitForKey([timeout])

16 WaitForString()

一般用于发送命令后等待某字符串,这个字符串只要是屏幕上出现的即可,哪怕是粘贴上去的命令也会同样被检测到,也可以用于等待屏幕的输出打印,不需要先发送命令。不过一般我们使用它来检测的都是发送命令后出现的标识符。
   crt.Screen.WaitForString(string,[timeout],[bCaseInsensitive])

参数:
①string,必选参数,等待的字符串,可以是特殊字符比如:\r\n;
②timeout,可选参数,超时时间,当检测不到对应字符串时会返回false,没有此参数时会一直等待;
③bCaseInsensitive,可选参数,大小写不敏感,默认值是false,表示将检测字符串的大小写,当为true时不检测大小写。

17 WaitForStrings()

和WaitForString是同样的功能,只不过可以等待多个字符串,如果有匹配到某个字符串,则返回值该字符串在这些字符串中的位置,位置值从1开始。若在超时时间内没有匹配到则返回false,没有超时时间时会一直等待。
crt.Screen.WaitForStrings([string1,string2..],[timeout],[bCaseInsensitive])

参数:
①string,必选参数,等待的字符串,最少有一个,可以是特殊字符比如:\r\n;
②timeout,可选参数,超时时间,当检测不到对应字符串时会返回false,没有此参数时会一直等待;
③bCaseInsensitive,可选参数,大小写不敏感,默认值是false,表示将检测字符串的大小写,当为true时不检测大小写。

实例:

var outPut = crt.Screen.WaitForStrings("error", "warning", "#", 10);
var waitIndex = crt.Screen.MatchIndex;
switch (waitIndex) {
case 0:
	crt.Dialog.MessageBox("Timed out!");
	break;
case 1:
	crt.Dialog.MessageBox("Found 'error'");
	break;
case 2:
	crt.Dialog.MessageBox("Found 'warning'");
	break;
case 3:
	crt.Dialog.MessageBox("Found '#'");
	break;
}

18 ReadString()

这个功能和上面的WaitForStrings函数有些类似,都是等待某几个字符串出现,不过不同的是,ReadString函数还会读取字符串之前的所有出现的字符,这个功能可以很方便的用于发送一个命令后获取这个命令的输出结果,不过这个函数也不是特别稳定,因为很可能存在命令的输出结果很快,而屏幕又没有捕捉到时,要么会由于超时而返回false,要么会一直等待,最终返回的都是空值,因此完全依靠该函数获取命令的输出的话并不是很把稳(如果程序对于稳定性要求很高的话,那么最好还是不要依赖这个函数。)
crt.Screen.ReadString([string1,string2..],[timeout],[bCaseInsensitive])

参数:
①string,必选参数,等待的字符串,最少有一个,可以是特殊字符比如:\r\n;
②timeout,可选参数,超时时间,当检测不到对应字符串时会返回false,没有此参数时会一直等待;
③bCaseInsensitive,可选参数,大小写不敏感,默认值是false,表示将检测字符串的大小写,当为true时不检测大小写。

实例:

// 发送命令并根据提示符获取命令的输出。
crt.Screen.Send("show version\r\n");
crt.Screen.WaitForString("show version",2);
var outPut = crt.Screen.ReadString("error", "warning", "#", 10);
var waitIndex = crt.Screen.MatchIndex;
switch (waitIndex) {
case 0:
	crt.Dialog.MessageBox("Timed out!");
	break;
case 1:
	crt.Dialog.MessageBox("Found 'error'");
	break;
case 2:
	crt.Dialog.MessageBox("Found 'warning'");
	break;
case 3:
	crt.Dialog.MessageBox("命令的输出时:"+outPut);
	break;
}