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"; } }