81 lines
2.1 KiB
C#
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";
|
|
}
|
|
}
|