在C#中检测终端类型:区分现代Terminal应用与传统命令提示符
检测当前运行的终端类型(Windows Terminal vs 传统Command Prompt)
方法1:检查专属环境变量
Windows Terminal会自动设置WT_SESSION环境变量,传统Command Prompt无此变量,可通过读取该变量快速判断:
- Command Prompt 脚本示例:
if defined WT_SESSION ( echo 运行在Windows Terminal中 ) else ( echo 运行在传统Command Prompt中 )
- PowerShell 脚本示例:
if ($env:WT_SESSION) { Write-Host "运行在Windows Terminal中" } else { Write-Host "运行在传统Command Prompt中" }
方法2:检查父进程名称
Windows Terminal的终端实例父进程是WindowsTerminal.exe,传统Command Prompt的父进程通常是explorer.exe或其他启动程序,可通过获取父进程信息判断:
$parentProcId = (Get-Process -Id $PID).Parent.Id $parentProc = Get-CimInstance Win32_Process -Filter "ProcessId = $parentProcId" if ($parentProc.Name -eq "WindowsTerminal.exe") { Write-Host "运行在Windows Terminal中" } else { Write-Host "运行在传统Command Prompt中" }
方法3:检测终端特性支持
如果需要判断终端是否支持特定功能(而非单纯区分类型),可尝试发送Windows Terminal支持但传统Command Prompt不支持的ANSI转义序列,比如真彩色输出,通过观察响应判断:
# 测试真彩色输出(Windows Terminal会显示正确红色,传统CMD可能无变化或显示乱码) Write-Host "$([char]27)[38;2;255;0;0m测试真彩色$([char]27)[0m"
内容的提问来源于stack exchange,提问作者PhonicUK
相关产品推荐
相关产品推荐

