Board logo

标题: [特效代码] 简单的 VT100 绘图引擎,支持 24 位色! [打印本页]

作者: HOPE2021    时间: 2022-9-10 13:30     标题: 简单的 VT100 绘图引擎,支持 24 位色!

本帖最后由 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
复制代码
运行效果:

作者: HOPE2021    时间: 2022-9-10 20:00

本帖最后由 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
复制代码

作者: HOPE2021    时间: 2022-9-11 12:08

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
复制代码

作者: 帝尊    时间: 2022-9-14 18:21

本帖最后由 帝尊 于 2022-9-14 18:48 编辑

回复 3# HOPE2021


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

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

抱歉,应该是我系统是英文的原因。
作者: HOPE2021    时间: 2022-9-14 19:33

回复 4# 帝尊
试试看用Visual Studio Code编辑,另存为GB2312编码
作者: 帝尊    时间: 2022-9-14 20:22

回复 5# HOPE2021


    改了编码的确正常了。不得不说,大神做的这个东西很有启发,牛逼!
作者: ANSL    时间: 2022-9-16 08:19

很厉害,但是写程序多考虑兼容性问题,因为现在还有很多人用win7,xp
作者: HOPE2021    时间: 2022-9-16 21:30

回复 7# ANSL
您说得很有道理,但事物总有落伍的时候,很多早先的东西都不支持了。现在VT100转义正在壮大,应该尽早赶上国际潮流。此外,兼容的问题也可以最大化减小,VT100转义序列和早期的ANSI是有部分相同的,可以判断版本然后决定使用VT100转义还是ANSI,早期Windows使用ANSI的方法见:
http://www.bathome.net/viewthread.php?tid=8509&highlight=ANSI
作者: ANSL    时间: 2022-9-17 10:32

本帖最后由 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,可惜不行
作者: HOPE2021    时间: 2022-9-17 10:47

本帖最后由 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
作者: bat1152    时间: 2023-1-31 17:51

回复 3# HOPE2021

牛逼啊……
作者: dos-a    时间: 2023-4-9 14:17

回复 11# bat1152


   大佬&#128514;&#128514;
作者: 老刘1号    时间: 2023-4-9 22:28

本帖最后由 老刘1号 于 2023-4-9 22:39 编辑

楼主会玩,我也给我的帖子搞几张图去,嘿嘿




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2