找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31922|回复: 12

[特效代码] 简单的 VT100 绘图引擎,支持 24 位色!

[复制链接]
发表于 2022-9-10 13:30:17 | 显示全部楼层 |阅读模式
本帖最后由 HOPE2021 于 2022-9-11 12:11 编辑

前两天无意中看到用批处理制作绘图引擎的提议。仔细想了一下,觉得在Windows 10中使用控制台虚拟终端序列制作还是挺简单的。于是我将常用的VT100转义写成了函数,下面是一些简单的实例:
VT 100 动画 - 本楼
中秋节快乐艺术字海报 - 2楼
进度条时钟 - 3 楼
  1. @Mode Con: Cols=80 Lines=25 & Chcp 936 > Nul & @SetLocal Enableextensions & @Echo Off
  2. %= 利用 VT100 虚拟终端序列来制作绘图引擎的实例 =%
  3. @Goto :Main

  4. :Main
  5.         @Call :Ani
  6.         Pause > Nul
  7. @Exit /B 0

  8. :Ani
  9.         Call :SetConsoleCursorInfo 1 1
  10.         Call :SetConsoleTextAttribute 0-0-0 0-128-0
  11.         Call :Type "Welcome to the "
  12.         Call :SetConsoleTextAttributeEx 4
  13.         Call :Type "future"
  14.         Call :SetConsoleTextAttributeEx 5
  15.         Call :Type "."
  16.         TimeOut /T 2 > Nul 2> Nul
  17.         Call :SetConsoleCursorInfo 2 0
  18.         Cls
  19.         For /L %%I in (0,1,2) Do (
  20.                 Call :GotoXY 1 13
  21.                 Set /P=Welcome to the future.< Nul
  22.                 For /L %%I in (1,1,58) Do (
  23.                         Help > Nul 2> Nul
  24.                         Call :GotoXY %%I 13
  25.                         Set /P=# Welcome to the future.< Nul
  26.                 )
  27.                 For /L %%I in (58,-1,1) Do (
  28.                         Help > Nul 2> Nul
  29.                         Call :GotoXY %%I 13
  30.                         Set /P=Welcome to the future. < Nul
  31.                 )
  32.         )
  33.         Cls
  34.         For /L %%I in (0,16,255) Do (
  35.                 For /L %%J in (0,16,255) Do (
  36.                         For /L %%K in (0,16,255) Do (
  37.                                 Call :SetConsoleTextAttribute %%I-%%J-%%K %%I-%%J-%%K
  38.                                 Set /P=#< Nul
  39.                         )
  40.                 )
  41.         )
  42. @Goto :Eof

  43. %================================================================%
  44. %= 日期: 2022 年 9 月 10 日 =%
  45. %= 名称: Type =%
  46. %= 作用: 模拟打字 =%
  47. %= 参数: String 要显示的字符串 =%
  48. %= 备注: 此函数要访问环境变量 _._ =%
  49. %================================================================%
  50. :Type <String>
  51.         If "%~1"=="" @Goto :Eof
  52.         Set "_._=%~1"
  53.         Set /P=#%_._:~0,1%< Nul
  54.         Set "_._=%_._:~1%"
  55.         TimeOut /T 0 > Nul 2> Nul
  56.         If Defined _._ @Call :Type "%_._%"
  57. @Goto :Eof

  58. %================================================================================================================================%
  59. %= VT100 函数 =%
  60. %================================================================================================================================%

  61. %================================================================%
  62. %= 日期: 2022 年 9 月 9 日 =%
  63. %= 名称: InitVT100 =%
  64. %= 作用: 初始化 Windows 10 的 虚拟终端序列 =%
  65. %================================================================%
  66. :InitVT100
  67. %= { =%

  68.         %= 获取 ESC 字符 =%

  69.         Set "ESC="

  70.         %= 如果没有定义 ESC 字符,这个过程是为了防止论坛误吞上文的 ESC 字符 =%
  71.         If Not Defined ESC (

  72.                 For /F "Delims=#" %%_ in ('Prompt #$E# ^& Echo On ^& For %%$ in ^(1^) Do DosKey') Do Set "ESC=%%_"

  73.         )

  74. %= } =%
  75. @Goto :Eof

  76. %================================================================%
  77. %= 日期: 2022 年 9 月 9 日 =%
  78. %= 名称: GotoXY =%
  79. %= 作用: 定位光标到指定位置 =%
  80. %= 参数: X 光标的 X 轴坐标,如果省略或设为 0,则设其为1 =%
  81. %= 参数: Y 光标的 Y 轴坐标,如果省略或设为 0,则设其为1 =%
  82. %================================================================%
  83. :GotoXY <X> <Y>
  84. %= { =%

  85.         %= 如果没有定义 ESC 字符 =%
  86.         If Not Defined ESC (

  87.                 @Call :InitVT100

  88.         )

  89.         %= 定位光标 =%
  90.         Set /P=%ESC%[%2;%1H< Nul

  91. %= } =%
  92. @Goto :Eof

  93. %================================================================%
  94. %= 日期: 2022 年 9 月 9 日 =%
  95. %= 名称: SetConsoleTextAttribute =%
  96. %= 作用: 设置控制台文本颜色 =%
  97. %= 参数: BGCOL 背景 RGB 颜色值,格式为R-G-B =%
  98. %= 参数: FGCOL 前景 RGB 颜色值,格式为R-G-B =%
  99. %================================================================%
  100. :SetConsoleTextAttribute <BGCOL> <FGCOL>
  101. %= { =%

  102.         %= 如果没有定义 ESC 字符 =%
  103.         If Not Defined ESC (

  104.                 @Call :InitVT100

  105.         )

  106.         %= 设置背景色 =%
  107.         For /F "Delims=-, Tokens=1,2,3" %%I in ("%1") Do (
  108.                 Set /P=%ESC%[48;2;%%I;%%J;%%Km< Nul
  109.         )

  110.         %= 设置前景色 =%
  111.         For /F "Delims=-, Tokens=1,2,3" %%I in ("%2") Do (
  112.                 Set /P=%ESC%[38;2;%%I;%%J;%%Km< Nul
  113.         )

  114. %= } =%
  115. @Goto :Eof

  116. %================================================================%
  117. %= 日期: 2022 年 9 月 9 日 =%
  118. %= 名称: SetConsoleCursorInfo =%
  119. %= 作用: 设置控制台光标属性 =%
  120. %= 参数: CursorVisibility 光标可见和闪烁状态,取值1~4,分别为: =%
  121. %=       1 显示光标 =%
  122. %=       2 隐藏光标 =%
  123. %=       3 开始光标闪烁 =%
  124. %=       4 停止闪烁光标 =%
  125. %= 参数: CursorShape      自定义光标形状,取值0~6,分别为: =%
  126. %=       0 用户配置的默认光标形状 =%
  127. %=       1 闪烁块光标形状 =%
  128. %=       2 稳定块光标形状 =%
  129. %=       3 闪烁下划线光标形状 =%
  130. %=       4 稳定下划线光标形状 =%
  131. %=       5 闪烁条形光标形状 =%
  132. %=       6 稳定条形光标形状 =%
  133. %================================================================%
  134. :SetConsoleCursorInfo <CursorVisibility> <CursorShape>
  135. %= { =%

  136.         %= 如果没有定义 ESC 字符 =%
  137.         If Not Defined ESC (

  138.                 @Call :InitVT100

  139.         )

  140.         %= 设置光标可见和闪烁状态 =%
  141.         For /F "Delims=-, Tokens=%1" %%I in ("25h-25l-12h-12l") Do (
  142.                 Set /P=%ESC%[?%%I< Nul
  143.         )

  144.         Set /P=%ESC%[%2 q< Nul

  145. %= } =%
  146. @Goto :Eof

  147. %================================================================%
  148. %= 日期: 2022 年 9 月 9 日 =%
  149. %= 名称: SetConsoleTextAttributeEx =%
  150. %= 作用: 格式化控制台文本 =%
  151. %= 参数: Code 操作代码,取值1~6,分别为: =%
  152. %=       1 默认,通常相当于Color 07 =%
  153. %=       2 粗体/亮 =%
  154. %=       3 无粗体/亮 =%
  155. %=       4 下划线 =%
  156. %=       5 无下划线 =%
  157. %=       6 交换前景色和背景色 =%
  158. %================================================================%
  159. :SetConsoleTextAttributeEx <Code>
  160. %= { =%

  161.         %= 如果没有定义 ESC 字符 =%
  162.         If Not Defined ESC (

  163.                 @Call :InitVT100

  164.         )

  165.         For /F "Delims=-, Tokens=%1" %%I in ("0-1-22-4-24-7") Do (
  166.                 Set /P=%ESC%[%%Im< Nul
  167.         )

  168. %= } =%
  169. @Goto :Eof
复制代码
运行效果:

评分

参与人数 3PB +14 技术 +2 收起 理由
CrLf + 8 + 1 感谢分享
老刘1号 + 6 +6
ANSL + 1 说的是我吗?厉害!

查看全部评分

 楼主| 发表于 2022-9-10 20:00:59 | 显示全部楼层
本帖最后由 HOPE2021 于 2022-9-11 21:47 编辑

今天是中秋节,我以此作品祝大家中秋节快乐:
  1. @Mode Con: Cols=160 Lines=20 & Chcp 437 > Nul & Title Happy Mid-Autumn Day! & @SetLocal EnableExtensions EnableDelayedExpansion & @Echo Off
  2. %= 利用 VT100 虚拟终端序列来制作绘图引擎的实例 =%
  3. %= 此程序必须保存为ANSI编码 =%
  4. If "%1"=="" (
  5.         For %%a in (        FontSize:0006000C
  6.         ) Do For /F "tokens=1,2 delims=:" %%b in ("%%a") do (
  7.                 > Nul Reg Add HKCU\Console\Happy_Mid_Autumn_Day /V %%b /T Reg_DWORD /D 0x%%c /F
  8.         )
  9.         Start "Happy_Mid_Autumn_Day" "%ComSpec%" /C "%~s0" 1 & @Goto :Eof

  10. ) Else (
  11.         > Nul Reg Delete HKCU\Console\Happy_Mid_Autumn_Day /F
  12. )
  13. @Goto :Main

  14. :Main
  15.         @Call :Ani
  16.         Pause > Nul
  17. @Exit /B 0

  18. :Ani
  19.         Set "Chr[1]=0x0100,0x0100,0x0104,0x7FFE,0x4104,0x4104,0x4104,0x4104,0x7FFC,0x4104,0x0100,0x0100,0x0100,0x0100,0x0100,0x0100"
  20.         Set "Chr[2]=0x0840,0x1C40,0xF040,0x1040,0x1144,0xFD4C,0x1150,0x3240,0x3840,0x54A0,0x50A0,0x9110,0x1108,0x120E,0x1404,0x1800"
  21.         Set "Chr[3]=0x1080,0x1080,0x1080,0x1088,0x5BFC,0x5488,0x5088,0x9088,0x1088,0x1FFE,0x1080,0x1140,0x1120,0x1210,0x140E,0x1804"
  22.         Set "Chr[4]=0x0020,0x00F0,0x1F00,0x1000,0x1100,0x1100,0x2104,0x7FFE,0x0100,0x0100,0x0920,0x0910,0x1108,0x210C,0x4504,0x0200"
  23.         @Call :SetConsoleCursorInfo 2 2
  24.         @Call :SetConsoleTextAttribute 0-0-0 251-193-1
  25.         Cls
  26.         @Call :DrawMoon
  27.         @Call :SetConsoleTextAttribute 0-0-0 16-132-186
  28.         @Call :DrawChr 22 3 "%Chr[1]%"
  29.         @Call :DrawChr 57 3 "%Chr[2]%"
  30.         @Call :DrawChr 92 3 "%Chr[3]%"
  31.         @Call :DrawChr 127 3 "%Chr[4]%"
  32. @Goto :Eof

  33. %================================================================%
  34. %= 日期: 2022 年 9 月 10 日 =%
  35. %= 名称: DrawMoon =%
  36. %= 作用: 输出月亮 =%
  37. %= 备注: 此函数要访问环境变量 _x_ / _y_ / _Temp_ =%
  38. %================================================================%
  39. :DrawMoon
  40. %={=%
  41.         Set _x_=1
  42.         Set _y_=1
  43.         For /L %%_ in (1,1,11) Do (
  44.                         Set /A "_y_=%%_"
  45.                 For /L %%? in (1,1,11) Do (
  46.                         Set /A "_x_=%%?"
  47.                         Set /A "_Temp_=!_x_!*!_x_!+!_y_!*!_y_!-121"
  48.                         If !_Temp_! Leq 0 Set /P=圹< Nul
  49.                 )
  50.                 @Call :GotoXY 1 %%_
  51.         )       
  52. %={=%
  53. @Goto :Eof

  54. %================================================================%
  55. %= 日期: 2022 年 9 月 10 日 =%
  56. %= 名称: DrawChr =%
  57. %= 作用: 输出点阵字符 =%
  58. %= 参数: x 字符左上角 X 轴坐标 =%
  59. %= 参数: y 字符左上角 Y 轴坐标 =%
  60. %= 参数: Code 点阵数据 =%
  61. %= 备注: 此函数要访问环境变量 _._ / _.._ / _..._ / _x_ / _y_ =%
  62. %================================================================%
  63. :DrawChr <x> <y> <Code>
  64. %={=%
  65.         Set /A "_x_=%1"
  66.         Set /A "_y_=%2"
  67.         For %%_ in (%~3) Do (
  68.                 Set "_..._="
  69.                 Set /A "_.._=0"
  70.                 Set /A "_._=%%_"
  71.                 For /L %%? in (0,1,15) Do (
  72.                         Set /A "_.._=!_._!%%2"
  73.                         Set "_..._=!_.._!!_..._!"
  74.                         Set /A "_._=!_._!-!_.._!"
  75.                         Set /A "_._=_._/2"
  76.                 )
  77.                 Set _..._=!_..._:1=圹!
  78.                 Set _..._=!_..._:0=  !
  79.                 Call :GotoXY !_x_! !_y_!
  80.                 Echo.!_..._!
  81.                 Set /A "_y_+=1"
  82.                 %= 下面这句是为了让画面更有年代感,可以删去 =%
  83.                 Help > Nul 2> Nul
  84.         )
  85.         Echo.
  86. %=}=%
  87. @Goto :Eof

  88. %================================================================================================================================%
  89. %= VT100 函数 =%
  90. %================================================================================================================================%

  91. %================================================================%
  92. %= 日期: 2022 年 9 月 9 日 =%
  93. %= 名称: InitVT100 =%
  94. %= 作用: 初始化 Windows 10 的 虚拟终端序列 =%
  95. %================================================================%
  96. :InitVT100
  97. %= { =%

  98.         %= 获取 ESC 字符 =%

  99.         Set "ESC="

  100.         %= 如果没有定义 ESC 字符,这个过程是为了防止论坛误吞上文的 ESC 字符 =%
  101.         If Not Defined ESC (

  102.                 For /F "Delims=#" %%_ in ('Prompt #$E# ^& Echo On ^& For %%$ in ^(1^) Do DosKey') Do Set "ESC=%%_"

  103.         )

  104. %= } =%
  105. @Goto :Eof

  106. %================================================================%
  107. %= 日期: 2022 年 9 月 9 日 =%
  108. %= 名称: GotoXY =%
  109. %= 作用: 定位光标到指定位置 =%
  110. %= 参数: X 光标的 X 轴坐标,如果省略或设为 0,则设其为1 =%
  111. %= 参数: Y 光标的 Y 轴坐标,如果省略或设为 0,则设其为1 =%
  112. %================================================================%
  113. :GotoXY <X> <Y>
  114. %= { =%

  115.         %= 如果没有定义 ESC 字符 =%
  116.         If Not Defined ESC (

  117.                 @Call :InitVT100

  118.         )

  119.         %= 定位光标 =%
  120.         Set /P=%ESC%[%2;%1H< Nul

  121. %= } =%
  122. @Goto :Eof

  123. %================================================================%
  124. %= 日期: 2022 年 9 月 9 日 =%
  125. %= 名称: SetConsoleTextAttribute =%
  126. %= 作用: 设置控制台文本颜色 =%
  127. %= 参数: BGCOL 背景 RGB 颜色值,格式为R-G-B =%
  128. %= 参数: FGCOL 前景 RGB 颜色值,格式为R-G-B =%
  129. %================================================================%
  130. :SetConsoleTextAttribute <BGCOL> <FGCOL>
  131. %= { =%

  132.         %= 如果没有定义 ESC 字符 =%
  133.         If Not Defined ESC (

  134.                 @Call :InitVT100

  135.         )

  136.         %= 设置背景色 =%
  137.         For /F "Delims=-, Tokens=1,2,3" %%I in ("%1") Do (
  138.                 Set /P=%ESC%[48;2;%%I;%%J;%%Km< Nul
  139.         )

  140.         %= 设置前景色 =%
  141.         For /F "Delims=-, Tokens=1,2,3" %%I in ("%2") Do (
  142.                 Set /P=%ESC%[38;2;%%I;%%J;%%Km< Nul
  143.         )

  144. %= } =%
  145. @Goto :Eof

  146. %================================================================%
  147. %= 日期: 2022 年 9 月 9 日 =%
  148. %= 名称: SetConsoleCursorInfo =%
  149. %= 作用: 设置控制台光标属性 =%
  150. %= 参数: CursorVisibility 光标可见和闪烁状态,取值1~4,分别为: =%
  151. %=       1 显示光标 =%
  152. %=       2 隐藏光标 =%
  153. %=       3 开始光标闪烁 =%
  154. %=       4 停止闪烁光标 =%
  155. %= 参数: CursorShape      自定义光标形状,取值0~6,分别为: =%
  156. %=       0 用户配置的默认光标形状 =%
  157. %=       1 闪烁块光标形状 =%
  158. %=       2 稳定块光标形状 =%
  159. %=       3 闪烁下划线光标形状 =%
  160. %=       4 稳定下划线光标形状 =%
  161. %=       5 闪烁条形光标形状 =%
  162. %=       6 稳定条形光标形状 =%
  163. %================================================================%
  164. :SetConsoleCursorInfo <CursorVisibility> <CursorShape>
  165. %= { =%

  166.         %= 如果没有定义 ESC 字符 =%
  167.         If Not Defined ESC (

  168.                 @Call :InitVT100

  169.         )

  170.         %= 设置光标可见和闪烁状态 =%
  171.         For /F "Delims=-, Tokens=%1" %%I in ("25h-25l-12h-12l") Do (
  172.                 Set /P=%ESC%[?%%I< Nul
  173.         )

  174.         Set /P=%ESC%[%2 q< Nul

  175. %= } =%
  176. @Goto :Eof

  177. %================================================================%
  178. %= 日期: 2022 年 9 月 9 日 =%
  179. %= 名称: SetConsoleTextAttributeEx =%
  180. %= 作用: 格式化控制台文本 =%
  181. %= 参数: Code 操作代码,取值1~6,分别为: =%
  182. %=       1 默认,通常相当于Color 07 =%
  183. %=       2 粗体/亮 =%
  184. %=       3 无粗体/亮 =%
  185. %=       4 下划线 =%
  186. %=       5 无下划线 =%
  187. %=       6 交换前景色和背景色 =%
  188. %================================================================%
  189. :SetConsoleTextAttributeEx <Code>
  190. %= { =%

  191.         %= 如果没有定义 ESC 字符 =%
  192.         If Not Defined ESC (

  193.                 @Call :InitVT100

  194.         )

  195.         For /F "Delims=-, Tokens=%1" %%I in ("0-1-22-4-24-7") Do (
  196.                 Set /P=%ESC%[%%Im< Nul
  197.         )

  198. %= } =%
  199. @Goto :Eof
复制代码

评分

参与人数 1PB +18 技术 +1 收起 理由
523066680 + 18 + 1 支持一下

查看全部评分

 楼主| 发表于 2022-9-11 12:08:26 | 显示全部楼层
VT100绘图引擎实例3,进度条时钟:
  1. @Mode Con: Cols=128 Lines=9 & Chcp 437 > Nul & Title Clock & @SetLocal EnableExtensions EnableDelayedExpansion & @Echo Off
  2. %= 利用 VT100 虚拟终端序列来制作绘图引擎的实例 =%
  3. %= 此程序必须保存为ANSI编码 =%
  4. @Goto :Main

  5. :Main
  6.         @Call :SetConsoleTextAttribute 0-0-0 58-150-221
  7.         @Cls
  8.         @Call :SetConsoleCursorInfo 2 0
  9.         @Call :Show
  10. @Exit /B 0

  11. :Show
  12.         @Call :GotoXY 61 2
  13.         @Call :SetConsoleTextAttribute 0-0-0 58-150-221
  14.         Set _Temp_Time_=%Time:~0,8%
  15.         Set /P=#%_Temp_Time_%< Nul
  16.         Set _Temp_Time_=%_Temp_Time_: =0+%
  17.         Set _Temp_Time_=%_Temp_Time_::0=:0+%

  18.         Set "Block=圹"
  19.         Set "Block=%Block:~0,1%"

  20.         For /F "Delims=:, Tokens=1,2,3" %%i in ("%_Temp_Time_%") Do (
  21.                 Set /A _Temp_H_=%%i
  22.                 Set /A _Temp_M_=%%j
  23.                 Set /A _Temp_S_=%%k
  24.         )

  25.         @Call :SetConsoleTextAttribute 255-255-255 58-150-221

  26.         @Call :GotoXY 5 4
  27.         For /L %%i in (0,1,23) Do (
  28.                 For /L %%j in (0,1,4) Do (
  29.                         If %%i Lss !_Temp_H_! (
  30.                                 Set /P=#%Block%< Nul
  31.                         ) Else Set /P=# < Nul
  32.                 )
  33.         )

  34.         @Call :GotoXY 5 6
  35.         For /L %%i in (0,1,59) Do (
  36.                 For /L %%j in (0,1,1) Do (
  37.                         If %%i Lss !_Temp_M_! (
  38.                                 Set /P=#%Block%< Nul
  39.                         ) Else Set /P=# < Nul
  40.                 )
  41.         )

  42.         @Call :GotoXY 5 8
  43.         For /L %%i in (0,1,59) Do (
  44.                 For /L %%j in (0,1,1) Do (
  45.                         If %%i Lss !_Temp_S_! (
  46.                                 Set /P=#%Block%< Nul
  47.                         ) Else Set /P=# < Nul
  48.                 )
  49.         )

  50. @Goto :Show

  51. %================================================================================================================================%
  52. %= VT100 函数 =%
  53. %================================================================================================================================%

  54. %================================================================%
  55. %= 日期: 2022 年 9 月 9 日 =%
  56. %= 名称: InitVT100 =%
  57. %= 作用: 初始化 Windows 10 的 虚拟终端序列 =%
  58. %================================================================%
  59. :InitVT100
  60. %= { =%

  61.         %= 获取 ESC 字符 =%

  62.         Set "ESC="

  63.         %= 如果没有定义 ESC 字符,这个过程是为了防止论坛误吞上文的 ESC 字符 =%
  64.         If Not Defined ESC (

  65.                 For /F "Delims=#" %%_ in ('Prompt #$E# ^& Echo On ^& For %%$ in ^(1^) Do DosKey') Do Set "ESC=%%_"

  66.         )

  67. %= } =%
  68. @Goto :Eof

  69. %================================================================%
  70. %= 日期: 2022 年 9 月 9 日 =%
  71. %= 名称: GotoXY =%
  72. %= 作用: 定位光标到指定位置 =%
  73. %= 参数: X 光标的 X 轴坐标,如果省略或设为 0,则设其为1 =%
  74. %= 参数: Y 光标的 Y 轴坐标,如果省略或设为 0,则设其为1 =%
  75. %================================================================%
  76. :GotoXY <X> <Y>
  77. %= { =%

  78.         %= 如果没有定义 ESC 字符 =%
  79.         If Not Defined ESC (

  80.                 @Call :InitVT100

  81.         )

  82.         %= 定位光标 =%
  83.         Set /P=%ESC%[%2;%1H< Nul

  84. %= } =%
  85. @Goto :Eof

  86. %================================================================%
  87. %= 日期: 2022 年 9 月 9 日 =%
  88. %= 名称: SetConsoleTextAttribute =%
  89. %= 作用: 设置控制台文本颜色 =%
  90. %= 参数: BGCOL 背景 RGB 颜色值,格式为R-G-B =%
  91. %= 参数: FGCOL 前景 RGB 颜色值,格式为R-G-B =%
  92. %================================================================%
  93. :SetConsoleTextAttribute <BGCOL> <FGCOL>
  94. %= { =%

  95.         %= 如果没有定义 ESC 字符 =%
  96.         If Not Defined ESC (

  97.                 @Call :InitVT100

  98.         )

  99.         %= 设置背景色 =%
  100.         For /F "Delims=-, Tokens=1,2,3" %%I in ("%1") Do (
  101.                 Set /P=%ESC%[48;2;%%I;%%J;%%Km< Nul
  102.         )

  103.         %= 设置前景色 =%
  104.         For /F "Delims=-, Tokens=1,2,3" %%I in ("%2") Do (
  105.                 Set /P=%ESC%[38;2;%%I;%%J;%%Km< Nul
  106.         )

  107. %= } =%
  108. @Goto :Eof

  109. %================================================================%
  110. %= 日期: 2022 年 9 月 9 日 =%
  111. %= 名称: SetConsoleCursorInfo =%
  112. %= 作用: 设置控制台光标属性 =%
  113. %= 参数: CursorVisibility 光标可见和闪烁状态,取值1~4,分别为: =%
  114. %=       1 显示光标 =%
  115. %=       2 隐藏光标 =%
  116. %=       3 开始光标闪烁 =%
  117. %=       4 停止闪烁光标 =%
  118. %= 参数: CursorShape      自定义光标形状,取值0~6,分别为: =%
  119. %=       0 用户配置的默认光标形状 =%
  120. %=       1 闪烁块光标形状 =%
  121. %=       2 稳定块光标形状 =%
  122. %=       3 闪烁下划线光标形状 =%
  123. %=       4 稳定下划线光标形状 =%
  124. %=       5 闪烁条形光标形状 =%
  125. %=       6 稳定条形光标形状 =%
  126. %================================================================%
  127. :SetConsoleCursorInfo <CursorVisibility> <CursorShape>
  128. %= { =%

  129.         %= 如果没有定义 ESC 字符 =%
  130.         If Not Defined ESC (

  131.                 @Call :InitVT100

  132.         )

  133.         %= 设置光标可见和闪烁状态 =%
  134.         For /F "Delims=-, Tokens=%1" %%I in ("25h-25l-12h-12l") Do (
  135.                 Set /P=%ESC%[?%%I< Nul
  136.         )

  137.         Set /P=%ESC%[%2 q< Nul

  138. %= } =%
  139. @Goto :Eof

  140. %================================================================%
  141. %= 日期: 2022 年 9 月 9 日 =%
  142. %= 名称: SetConsoleTextAttributeEx =%
  143. %= 作用: 格式化控制台文本 =%
  144. %= 参数: Code 操作代码,取值1~6,分别为: =%
  145. %=       1 默认,通常相当于Color 07 =%
  146. %=       2 粗体/亮 =%
  147. %=       3 无粗体/亮 =%
  148. %=       4 下划线 =%
  149. %=       5 无下划线 =%
  150. %=       6 交换前景色和背景色 =%
  151. %================================================================%
  152. :SetConsoleTextAttributeEx <Code>
  153. %= { =%

  154.         %= 如果没有定义 ESC 字符 =%
  155.         If Not Defined ESC (

  156.                 @Call :InitVT100

  157.         )

  158.         For /F "Delims=-, Tokens=%1" %%I in ("0-1-22-4-24-7") Do (
  159.                 Set /P=%ESC%[%%Im< Nul
  160.         )

  161. %= } =%
  162. @Goto :Eof
复制代码

评分

参与人数 1PB +12 技术 +1 收起 理由
523066680 + 12 + 1 支持一下

查看全部评分

发表于 2022-9-14 18:21:47 | 显示全部楼层
本帖最后由 帝尊 于 2022-9-14 18:48 编辑

回复 3# HOPE2021


    为什么我运行后进度条是σσσσσ这个符号??

保存为ANSI后变成????号了。

抱歉,应该是我系统是英文的原因。
 楼主| 发表于 2022-9-14 19:33:11 | 显示全部楼层
回复 4# 帝尊
试试看用Visual Studio Code编辑,另存为GB2312编码
发表于 2022-9-14 20:22:47 | 显示全部楼层
回复 5# HOPE2021


    改了编码的确正常了。不得不说,大神做的这个东西很有启发,牛逼!
发表于 2022-9-16 08:19:36 | 显示全部楼层
很厉害,但是写程序多考虑兼容性问题,因为现在还有很多人用win7,xp
 楼主| 发表于 2022-9-16 21:30:58 | 显示全部楼层
回复 7# ANSL
您说得很有道理,但事物总有落伍的时候,很多早先的东西都不支持了。现在VT100转义正在壮大,应该尽早赶上国际潮流。此外,兼容的问题也可以最大化减小,VT100转义序列和早期的ANSI是有部分相同的,可以判断版本然后决定使用VT100转义还是ANSI,早期Windows使用ANSI的方法见:
http://www.bathome.net/viewthread.php?tid=8509&highlight=ANSI
发表于 2022-9-17 10:32:28 | 显示全部楼层
本帖最后由 ANSL 于 2022-9-17 10:39 编辑

回复 8# HOPE2021我倒是可以接受新事物,但findstr绘图引擎却是最实用的,可以在新系统上运行,也可以在XP运行,(本人电脑win10),(个人感觉)
见:[转载自Dostips] 游戏 劳里的幻想世界 - BAT求助&讨论 - 批处理之家 批处理_BAT脚本_PowerShell_VBS_CMD_DOS_Perl_Python - Powered by Discuz! (bathome.net)对,比如之前的findstr,debug,第三方,16位程序.......
我还是希望尽早淘汰win7,xp我之前也想写这么个东西,没时间,因为兼容性闹心
尝试把VT100技术做成可以被rundll32执行的dll,可惜不行
 楼主| 发表于 2022-9-17 10:47:27 | 显示全部楼层
本帖最后由 HOPE2021 于 2022-9-17 10:54 编辑

回复 9# ANSL
虽然FindStr能完成日常所需的图形绘制,但功能未免太弱小了,根本不可能彩显特殊字符,像下面两个作品根本不可能用FindStr实现:
https://www.dostips.com/forum/viewtopic.php?f=3&t=8044
https://www.dostips.com/forum/viewtopic.php?f=3&t=8056
而且FindStr的速度太慢,支持的颜色太少,下面的功能就很难用FindStr实现:
https://www.dostips.com/forum/viewtopic.php?f=3&t=9869

评分

参与人数 1技术 +1 收起 理由
ANSL + 1 没错!我看中了VT100的功能!

查看全部评分

发表于 2023-1-31 17:51:53 | 显示全部楼层
回复 3# HOPE2021

牛逼啊……
发表于 2023-4-9 14:17:05 | 显示全部楼层
回复 11# bat1152


   大佬&#128514;&#128514;
发表于 2023-4-9 22:28:18 | 显示全部楼层
本帖最后由 老刘1号 于 2023-4-9 22:39 编辑

楼主会玩,我也给我的帖子搞几张图去,嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:45 , Processed in 0.025353 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表