Board logo

标题: [特效代码] [已解决][讨论+求助]Windows10如何多行回退 [打印本页]

作者: HOPE2021    时间: 2021-8-9 21:40     标题: [已解决][讨论+求助]Windows10如何多行回退

本帖最后由 HOPE2021 于 2021-8-10 08:30 编辑

今天找到一个好帖子,可以不用curs等第三方的情况下定位光标,[传送门:http://www.bathome.net/thread-7137-1-1.html]
在虚拟机里一测试(Windows xp x86),果然如此,但在 Windows10 x64 中测试却失效了,请各位集思广益,设计出一种能在 Windows10 x64 运行的多行回退。(原则:不许用第三方)
By Hope
谢谢。
作者: a20150604    时间: 2021-8-9 22:19

本帖最后由 a20150604 于 2021-8-9 23:07 编辑

Windows10 直接用 VT100 序列控制, 何苦用别的东东;  那个帖子里 字符的数量还有控制台缓冲区宽度对控制的影响没有深入测试, 另外 在 WIN10 里也不是失效, 而是得在 旧版控制台 模式才有效

进一步的测试:

http://www.bathome.net/viewthrea ... mp;page=1#pid190804

而 VT100 仅 WIN10 从某一次更新开始支持(不能用旧版控制台), 可控制在控制台界面任意坐标以任意色彩显示字符, 可无闪烁清屏(CLS有闪烁)

dostips 上对 VT100 的应用较多, 但本论坛目前还几乎没人有兴趣玩这个, 我折腾过一个双显时钟, 有兴趣可以搜到

dostips 上对 VT100 的一些应用
https://www.google.com/search?q= ... CRAIHag8Du0Q4dUDCA4


VT100 是有公开文档可学习的, 而老系统上那种 "秘技" 功能又弱, 又没文档, ...

[转载]CMD获取当前光标坐标、位置
http://www.bathome.net/viewthread.php?tid=58523

显示在CMD窗口中间
http://www.bathome.net/thread-56525-1-1.html

贴个简单特效, 一串字符到处撞拖影
  1. @echo off & setlocal enabledelayedexpansion
  2. REM VT100 参考
  3. REM https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
  4. for /F %%a in ('echo prompt $E^| cmd') do set "_ESC=%%a"
  5. REM 窗口尺寸也可以不指定
  6. mode 100,40
  7. REM 移动周期: 正整数, 越小, 移动越快
  8. set /a "cycle=2000"
  9. set "rgb_red=%_ESC%[38;2;255;0;0m"
  10. set "rgb_grn=%_ESC%[38;2;0;255;0m"
  11. set "rgb_blu=%_ESC%[38;2;0;0;255m"
  12. REM set       "str=bbs.bathome.net"
  13. set       "str=%rgb_red%bbs.%rgb_grn%bathome%rgb_blu%.net"
  14. set "str_clear=%rgb_red%bbs.%rgb_grn%       %rgb_blu%.net"
  15. for /f "tokens=3,4 delims=, " %%A in (
  16.     'powershell -command "&{$H=get-host;$H.ui.rawui;}"^|findstr /b WindowSize'
  17. ) do set /a "_win_wid=%%A, _win_hei=%%B, x_ubound=_win_wid-14" & REM 14 为 str 的长度 - 1
  18. set /a "y= !random! %% _win_hei + 1, x= !random! %% x_ubound + 1"
  19. set /a "dx=dy=1"
  20. REM 隐藏光标 Hide the cursor
  21. <nul set /p "=%_ESC%[?25l"
  22. for /l %%a in (-9999999 1 9999999) do (
  23.     set /a "m=%%a %% cycle"
  24.     if !m!==0 (
  25.         <nul set /p "=%_ESC%[!y!;!x!H%str_clear%"
  26.         if !y! geq !_win_hei! set /a "dy=-1"
  27.         if !y! leq 1 set /a "dy=1"
  28.         if !x! geq !x_ubound! set /a "dx=-1"
  29.         if !x! leq 1 set /a "dx=1"
  30.         set /a "y+=dy,x+=dx"
  31.         <nul set /p "=%_ESC%[!y!;!x!H%str%"
  32.     )
  33. )
复制代码





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