pro3_control_panel_v2/Services/Uart/TeraTermLauncher.cs
2025-12-23 14:12:21 +08:00

81 lines
2.1 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
namespace AmebaPro3_ControlPanel.Services.Uart;
public static class TeraTermLauncher
{
public static bool TryLaunch(string? port, int baudRate, out string message)
{
if (string.IsNullOrWhiteSpace(port))
{
message = "Select a COM port first.";
return false;
}
var exePath = ResolveTeraTermPath();
if (string.IsNullOrWhiteSpace(exePath))
{
message = "Tera Term not found. Set TERATERM_PATH or install it.";
return false;
}
var args = $"/C={port} /BAUD={baudRate}";
try
{
Process.Start(new ProcessStartInfo
{
FileName = exePath,
Arguments = args,
UseShellExecute = true
});
message = "Tera Term launched.";
return true;
}
catch (Exception ex)
{
message = $"Failed to start Tera Term: {ex.Message}";
return false;
}
}
private static string? ResolveTeraTermPath()
{
var envPath = Environment.GetEnvironmentVariable("TERATERM_PATH");
if (!string.IsNullOrWhiteSpace(envPath))
{
var candidate = Directory.Exists(envPath)
? Path.Combine(envPath, "ttermpro.exe")
: envPath;
if (File.Exists(candidate))
{
return candidate;
}
}
var programFiles = new[]
{
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
};
foreach (var root in programFiles)
{
if (string.IsNullOrWhiteSpace(root))
{
continue;
}
var candidate = Path.Combine(root, "teraterm", "ttermpro.exe");
if (File.Exists(candidate))
{
return candidate;
}
}
return "ttermpro.exe";
}
}