标题: [原创] 支持 VBS / JS 的终端控制、彩色显示类库 - TerminalController.vbs [打印本页]
作者: 老刘1号 时间: 2022-4-11 22:06 标题: 支持 VBS / JS 的终端控制、彩色显示类库 - TerminalController.vbs
本帖最后由 老刘1号 于 2023-4-9 22:24 编辑
GitHub
- ___ __, __, _, _ _ _, _ _, _, _, _, _, _ ___ __, _, _, _, __, __,
- | |_ |_) |\/| | |\ | /_\ | / ` / \ |\ | | |_) / \ | | |_ |_)
- | | | \ | | | | \| | | | , \ , \ / | \| | | \ \ / | , | , | | \
- ~ ~~~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~~ ~ ~ ~ ~ ~ ~ ~ ~ ~~~ ~~~ ~~~ ~ ~
复制代码
为 VBS、JScript 而生,由 VBS 写就的 COM 组件。
实用且便携的 Windows Terminal 控制类,可实现彩色输出、光标控制等功能。
浏览
开始
环境要求
安装
以管理员权限运行以下命令:- git clone https://github.com/OldLiu001/TerminalController.vbs.git
- cd TerminalController.vbs
- regsvr32 TerminalController.wsc
复制代码
警告:不要使用右键菜单注册 TerminalController.wsc 。
使用下列代码创建类的实例:
VBScript- Set objTerminalController = CreateObject("Terminal.Controller")
复制代码
JScript- var objTerminalController = new ActiveXObject("Terminal.Controller");
复制代码
便携
制作便携版本后,其他用户无需进行上述的安装操作即可使用您的脚本。
VBScript
方法1:使用 “Windows 脚本宿主文件” (WSF)
复制脚本 TerminalController.vbs 到您脚本所在的文件夹下。
假设您的脚本的文件名为 MyScript.vbs ,使用如下的代码模板:
Template.wsf- <job id="MyScript">
- <script language="VBScript" src="TerminalController.vbs"/>
- <script language="VBScript" src="MyScript.vbs"/>
- </job>
复制代码
将其放置到您脚本所在的文件夹下。
或将脚本和类库都嵌入单个 WSF 中:
Template_Embedded.wsf- <job id="MyScript">
- <script language="VBScript">
- ' 此处写 "TerminalController.vbs" 文件的内容
- </script>
- <script language="VBScript">
- ' 此处写 "MyScript.vbs" 文件的内容
- </script>
- </job>
复制代码
当然,您可以只将必要的部分嵌入 WSF 中,此处不再赘述。
创建类的实例:- Set objTerminalController = New TerminalController
复制代码
方法2:使用 “ExecuteGlobal”
复制脚本 TerminalController.vbs 到您脚本所在的文件夹下。
将下列代码添加至脚本末尾:- Sub Import(strFileName)
- With CreateObject("Scripting.FileSystemObject")
- ExecuteGlobal .OpenTextFile( _
- .GetParentFolderName( _
- .GetFile(WScript.ScriptFullName)) & _
- "\" & strFileName).ReadAll
- End With
- End Sub
复制代码
在脚本开头导入类库:- Import "TerminalController.vbs"
复制代码
创建类的实例:- Set objTerminalController = New TerminalController
复制代码
方法3: 将类库嵌入脚本中
将脚本 TerminalController.vbs 的内容添加至您的脚本末尾。
创建类的实例:- Set objTerminalController = New TerminalController
复制代码
JScript
假设您的脚本名为 MyScript.js 。
类似 VBScript ,您可使用下列代码模板:
Template.wsf- <job id="MyScript">
- <script language="VBScript" src="TerminalController.vbs"/>
- <script language="VBScript">
- Function GenerateObject(ByVal strClassName)
- Set GenerateObject = EVal("New " & strClassName)
- End Function
- </script>
- <script language="JScript" src="MyScript.js" />
- </job>
复制代码
Template_Embedded.wsf- <job id="MyScript">
- <script language="VBScript">
- ' 此处写 "TerminalController.vbs" 文件的内容
- </script>
- <script language="VBScript">
- Function GenerateObject(ByVal strClassName)
- Set GenerateObject = EVal("New " & strClassName)
- End Function
- </script>
- <script language="JScript">
- // 此处写 "MyScript.js" 文件的内容
- </script>
- </job>
复制代码
创建类的实例:- var objTerminalController = GenerateObject("TerminalController");
复制代码
用法
首先设置处理输出的回调函数。
可直接使用下列代码:
VBScript- Function Printer(ByVal strControlSequence)
- WScript.StdOut.Write strControlSequence
- End Function
- objTerminalController.SetPrinter GetRef("Printer")
复制代码
JScript- objTerminalController.SetPrinter(function (strControlSequence) {
- WScript.StdOut.Write(strControlSequence);
- });
复制代码
然后可以使用下列的若干方法控制终端:
名称 | 参数 | 等价控制序列 | 描述 |
SaveCursorPosition | - | Chr(27) & "7" | 储存光标位置 |
RestoreCursorPosition | - | Chr(27) & "8" | 恢复光标位置 |
HideCursor | - | Chr(27) & "[?25l" | 隐藏光标 |
ShowCursor | - | Chr(27) & "[?25h" | 显示光标 |
SaveScreen | - | Chr(27) & "[?1049h" | 保存屏幕 |
RestoreScreen | - | Chr(27) & "[?1049l" | 恢复屏幕 |
ClearScreen | - | Chr(27) & "[2J" | 清除屏幕 |
LimitScoll | lngTop, lngBottom | Chr(27) & "[" & lngTop & ";" & lngBottom & "r" | 限制滚动 |
ReleseScoll | - | Chr(27) & "[r" | 解除滚动限制 |
MoveCursorToTopLeft | - | Chr(27) & "[H" | 将光标移动至终端左上角 |
MoveCursorTo | lngRow, lngColumn | Chr(27) & "[" & lngRow & ";" & lngColumn & "H" | 将光标移动至指定位置 |
MoveCursorToRow | lngRow | Chr(27) & "[" & lngRow & "H" | 将光标移动至指定行 |
MoveCursorToColumn | lngColumn | Chr(27) & "[" & lngColumn & "G" | 将光标移动至指定列 |
MoveCursorUp | lngCount | Chr(27) & "[" & lngCount & "A" | 光标上移若干行 |
MoveCursorDown | lngCount | Chr(27) & "[" & lngCount & "B" | 光标下移若干行 |
MoveCursorLeft | lngCount | Chr(27) & "[" & lngCount & "D" | 光标左移若干字符 |
MoveCursorRight | lngCount | Chr(27) & "[" & lngCount & "C" | 光标右移若干字符 |
SetTextStyle | strTextStyle | Chr(27) & "[" & strTextStyle & "m" | 设置文本类型 |
SetTextColor | strForeground, strBackground | Chr(27) & "[" & strForeground & ";" & strBackground & "m" | 设置文本颜色 |
ResetTextAttributes | - | Chr(27) & "[0m" | 重置文本属性 |
也有一些属性,可以获取终端的信息:
名称 | 类型 | 描述 |
RowLength | Long | 终端的总列数 |
ColumnLength | Long | 终端的总行数 |
参考
匈牙利命名:lng Long, str String, obj Object, arr Array.
颜色可选值:黑 Black, 红 Red, 绿 Green, 黄 Yellow, 蓝 Blue, 品红 Magenta, 青 Cyan, 白 White, 亮黑 BrightBlack, 亮红 BrightRed, 亮绿 BrightGreen, 亮黄 BrightYellow, 亮蓝 BrightBlue, 亮品红 BrightMagenta, 亮青 BrightCyan, 亮白 BrightWhite, 默认 Default.
文本类型可选值:常规 Normal, 粗体 Bold, 暗淡 Dim, 斜体 Italic, 下划线 Underline, 闪烁 Blink, 反色 Reverse, 隐藏 Invisible, 删除线 Strikeout.
示例
- Colors.vbs - 测试所有颜色 (VBScript)
- Styles.wsf - 测试所有文本类型 (VBScript)
- Rain.vbs - 代码雨特效 (VBScript)
- Startup.js - Windows 2000 启动特效 (JScript)
- LangtonAnt.js - 兰顿蚂蚁 (JScript)
- ConwayLife.wsf(TODO) - 康威生命游戏 (JScript)
参照
作者: czjt1234 时间: 2022-6-9 18:42
厉害 .......................
作者: jyswjjgdwtdtj 时间: 2024-4-5 11:32
为什么我使用了如下的代码- Set objTerminal = NEW TerminalController
- Function Printer(strControlSequence)
- WScript.StdOut.Write strControlSequence
- End Function
- objTerminal.SetPrinter GetRef("Printer")
- objTerminal.SetTextColor "Black", "Default"
- WScript.Echo "Foreground: Black"
- WSCRIPT.STDIN.READLINE
复制代码
然而却输出了复制代码
是我的电脑不支持改变颜色吗
作者: Five66 时间: 2024-4-5 12:37
回复 3# jyswjjgdwtdtj
好像是终端控制码 win10才有这功能
参考
http://www.bathome.net/viewthread.php?tid=53595
作者: jyswjjgdwtdtj 时间: 2024-4-5 16:20
回复 4# Five66
是win10
作者: 老刘1号 时间: 2024-4-5 18:16
回复 5# jyswjjgdwtdtj
目前只测试了windows terminal,win10的话需要自己装一个windows terminal
win11自带所以就不用自己装了
作者: Five66 时间: 2024-4-5 18:25
回复 5# jyswjjgdwtdtj
额 , 那链接里都说了:不是所有win10 版本都支持
还有查了下 , cmd的终端控制码好像是 Windows 10 build 18362 (外部版本 1903) 的新功能
作者: jyswjjgdwtdtj 时间: 2024-4-5 20:01
回复 7# Five66
但是链接里的bat时钟彩色部分可以显示啊
作者: Five66 时间: 2024-4-5 21:46
回复 8# jyswjjgdwtdtj
请确保系统版本是win10 1903以上 , 并且CMD的属性框 不要勾选 使用旧版控制台
不行的话可能不关cmd的事 , 那就让自带的终端conhost来 , 方法是在注册表位置HKEY_CURRENT_USER\Console中新建一个DWORD类型的值 , 名字改成VirtualTerminalLevel ,并将其数值修改为1
还是不行的话就用上面大佬说的Windows Terminal这个新终端
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |