标题: [特效代码] [已解决][讨论+求助]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
贴个简单特效, 一串字符到处撞拖影- @echo off & setlocal enabledelayedexpansion
- REM VT100 参考
- REM https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
-
- for /F %%a in ('echo prompt $E^| cmd') do set "_ESC=%%a"
-
- REM 窗口尺寸也可以不指定
- mode 100,40
-
- REM 移动周期: 正整数, 越小, 移动越快
- set /a "cycle=2000"
-
- set "rgb_red=%_ESC%[38;2;255;0;0m"
- set "rgb_grn=%_ESC%[38;2;0;255;0m"
- set "rgb_blu=%_ESC%[38;2;0;0;255m"
- REM set "str=bbs.bathome.net"
- set "str=%rgb_red%bbs.%rgb_grn%bathome%rgb_blu%.net"
- set "str_clear=%rgb_red%bbs.%rgb_grn% %rgb_blu%.net"
-
- for /f "tokens=3,4 delims=, " %%A in (
- 'powershell -command "&{$H=get-host;$H.ui.rawui;}"^|findstr /b WindowSize'
- ) do set /a "_win_wid=%%A, _win_hei=%%B, x_ubound=_win_wid-14" & REM 14 为 str 的长度 - 1
-
- set /a "y= !random! %% _win_hei + 1, x= !random! %% x_ubound + 1"
- set /a "dx=dy=1"
-
- REM 隐藏光标 Hide the cursor
- <nul set /p "=%_ESC%[?25l"
-
- for /l %%a in (-9999999 1 9999999) do (
- set /a "m=%%a %% cycle"
- if !m!==0 (
- <nul set /p "=%_ESC%[!y!;!x!H%str_clear%"
-
- if !y! geq !_win_hei! set /a "dy=-1"
- if !y! leq 1 set /a "dy=1"
- if !x! geq !x_ubound! set /a "dx=-1"
- if !x! leq 1 set /a "dx=1"
- set /a "y+=dy,x+=dx"
- <nul set /p "=%_ESC%[!y!;!x!H%str%"
- )
- )
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |