using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace 成套报价软件
{
/// AI助手设置:引擎状态/端口/令牌/开机自启(纯文件操作与 HTTP 探测,
/// 引擎启停用 ai助手 目录里的 启动引擎.cmd/停止引擎.cmd)。模型与密钥在内嵌面板里配置。
public partial class AI助手设置 : Form
{
/// 用系统默认程序打开 URL(ShellExecute,不经 Process.Start)。
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
private static extern int ShellExecuteW(IntPtr hWnd, string verb, string file, string parameters, string directory, int showCmd);
public AI助手设置()
{
InitializeComponent();
this.BackColor = System.Drawing.Color.White;
this.btn刷新.Click += btn刷新_Click;
this.btn复制令牌.Click += btn复制令牌_Click;
this.btn保存.Click += btn保存_Click;
this.btn复制引擎目录.Click += btn复制引擎目录_Click;
this.btn复制状态目录.Click += btn复制状态目录_Click;
this.btn查看日志.Click += btn查看日志_Click;
this.btn打开面板.Click += btn打开面板_Click;
this.Load += AI助手设置_Load;
}
private void AI助手设置_Load(object sender, EventArgs e)
{
刷新界面();
}
private void 刷新界面()
{
bool 就绪 = OpenClawHost.网关就绪();
txt状态.Text = 就绪
? "运行中(端口 " + OpenClawHost.端口 + ")"
: (OpenClawHost.运行时已安装()
? "未启动 —— 请先双击 ai助手\\启动引擎.cmd(或重开软件自动拉起)"
: "未安装引擎运行时(ai助手\\zcode 目录缺失)");
if (OpenClawHost.端口 >= num端口.Minimum && OpenClawHost.端口 <= num端口.Maximum)
num端口.Value = OpenClawHost.端口;
txt令牌.Text = OpenClawHost.令牌;
chk自启.Checked = OpenClawHost.自启已登记();
}
private void btn刷新_Click(object sender, EventArgs e)
{
刷新界面();
}
private void btn保存_Click(object sender, EventArgs e)
{
try
{
OpenClawHost.保存端口((int)num端口.Value);
OpenClawHost.设置自启(chk自启.Checked);
MessageBox.Show(this, "已保存。端口修改需重启引擎(停止引擎.cmd → 启动引擎.cmd)后生效。",
"AI助手", MessageBoxButtons.OK, MessageBoxIcon.Information);
刷新界面();
}
catch (Exception ex)
{
MessageBox.Show(this, "保存失败:" + ex.Message, "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btn复制令牌_Click(object sender, EventArgs e)
{
try
{
Clipboard.SetText(txt令牌.Text ?? "");
MessageBox.Show(this, "令牌已复制到剪贴板。", "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { OpenClawHost.写日志("[AI助手设置] 复制令牌到剪贴板失败: " + ex.Message); }
}
/// 在系统默认浏览器中打开 AI助手面板(ZCode Web,自动带端口与令牌)。
private void btn打开面板_Click(object sender, EventArgs e)
{
try
{
if (!OpenClawHost.健康检查(OpenClawHost.端口))
{
MessageBox.Show(this, "AI 引擎未运行。请先双击软件目录的「成套报价软件启动器.cmd」"
+ "(或 ai助手\\启动引擎.cmd)后再打开面板。", "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
string url = "http://127.0.0.1:" + OpenClawHost.端口 + "/#token="
+ Uri.EscapeDataString(OpenClawHost.令牌);
ShellExecuteW(IntPtr.Zero, "open", url, null, null, 5); // 5=SW_SHOW
OpenClawHost.写日志("[AI助手] 已在浏览器打开面板 http://127.0.0.1:" + OpenClawHost.端口);
}
catch (Exception ex)
{
MessageBox.Show(this, "打开失败:" + ex.Message, "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btn复制引擎目录_Click(object sender, EventArgs e)
{
try
{
Clipboard.SetText(OpenClawHost.引擎目录());
MessageBox.Show(this, "引擎目录路径已复制,粘贴到资源管理器地址栏即可打开。", "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { OpenClawHost.写日志("[AI助手设置] 复制引擎目录失败: " + ex.Message); }
}
private void btn复制状态目录_Click(object sender, EventArgs e)
{
try
{
Clipboard.SetText(OpenClawHost.状态目录());
MessageBox.Show(this, "状态目录路径已复制,粘贴到资源管理器地址栏即可打开。", "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { OpenClawHost.写日志("[AI助手设置] 复制状态目录失败: " + ex.Message); }
}
private void btn查看日志_Click(object sender, EventArgs e)
{
try
{
string f = OpenClawHost.网关日志路径();
string 内容 = "(暂无日志)";
if (System.IO.File.Exists(f))
{
string[] 行 = System.IO.File.ReadAllLines(f, Encoding.UTF8);
int 起 = Math.Max(0, 行.Length - 40);
var sb = new StringBuilder();
for (int i = 起; i < 行.Length; i++) sb.AppendLine(行[i]);
内容 = sb.ToString();
}
MessageBox.Show(this, 内容, "AI助手日志(末 40 行)",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(this, "读取日志失败:" + ex.Message, "AI助手",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}