using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace JJMediSys { public partial class ErrMsgShow : Form { [DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")] private static extern IntPtr CreateRoundRectRgn ( int nLeftRect, // x-coordinate of upper-left corner int nTopRect, // y-coordinate of upper-left corner int nRightRect, // x-coordinate of lower-right corner int nBottomRect, // y-coordinate of lower-right corner int nWidthEllipse, // height of ellipse int nHeightEllipse // width of ellipse ); [DllImport("dwmapi.dll")] public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset); [DllImport("dwmapi.dll")] public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); [DllImport("dwmapi.dll")] public static extern int DwmIsCompositionEnabled(ref int pfEnabled); private bool m_aeroEnabled; // variables for box shadow private const int CS_DROPSHADOW = 0x00020000; private const int WM_NCPAINT = 0x0085; private const int WM_ACTIVATEAPP = 0x001C; public struct MARGINS // struct for box shadow { public int leftWidth; public int rightWidth; public int topHeight; public int bottomHeight; } private const int WM_NCHITTEST = 0x84; // variables for dragging the form private const int HTCLIENT = 0x1; private const int HTCAPTION = 0x2; protected override CreateParams CreateParams { get { m_aeroEnabled = CheckAeroEnabled(); CreateParams cp = base.CreateParams; if (!m_aeroEnabled) cp.ClassStyle |= CS_DROPSHADOW; return cp; } } private bool CheckAeroEnabled() { if (Environment.OSVersion.Version.Major >= 6) { int enabled = 0; DwmIsCompositionEnabled(ref enabled); return (enabled == 1) ? true : false; } return false; } protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_NCPAINT: // box shadow if (m_aeroEnabled) { var v = 2; DwmSetWindowAttribute(this.Handle, 2, ref v, 4); MARGINS margins = new MARGINS() { bottomHeight = 1, leftWidth = 1, rightWidth = 1, topHeight = 1 }; DwmExtendFrameIntoClientArea(this.Handle, ref margins); } break; default: break; } base.WndProc(ref m); if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT) // drag the form m.Result = (IntPtr)HTCAPTION; } public Dispensing fordispensing; public ErrMsgShow(Dispensing dispensing) { m_aeroEnabled = false; InitializeComponent(); fordispensing = dispensing; } public ErrMsgShow() { m_aeroEnabled = false; InitializeComponent(); } private void ErrMsgShow_Load(object sender, EventArgs e) { //int x = fordispensing.Location.X + (fordispensing.Width - this.Width) / 2; //int y = fordispensing.Location.Y + (fordispensing.Height - this.Height) / 2; //this.Location = new Point(x, y); //Msg.Text = fordispensing.ErrorInfoStr; Msg.Text = "蓝牙连接失败"; if (Msg.Text.Contains("蓝牙11")) { BRetry.Location = new System.Drawing.Point(16, 171); BCancel.Location = new System.Drawing.Point(362, 171); ResetBLE.Visible = true; ResetBLE.Location = new System.Drawing.Point(190, 171); } else { BRetry.Location = new System.Drawing.Point(77, 171); BCancel.Location = new System.Drawing.Point(305, 171); ResetBLE.Visible = false; } } private void BRetry_Click(object sender, EventArgs e) { DialogResult = DialogResult.Retry; this.Close(); } private void BCancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; //Form1.CancelDispensing = true; //手动点击终止后 ,TubeLabelTool.cs中的循环将退出 并返回手动取消状态 //if (!fordispensing.isStop)//处于可手动终止状态 // fordispensing.DispenseCancel = true; // //fordispensing.Closewin(); this.Close(); } private async void ResetBLE_Click(object sender, EventArgs e) { try { // 停止蓝牙服务 await StopBluetoothServiceAsync(); // 等待几秒钟以确保服务完全停止 // await Task.Delay(5000); // 启动蓝牙服务 // await StartBluetoothServiceAsync(); Console.WriteLine("蓝牙服务已成功重启。"); } catch (Exception ex) { Console.WriteLine($"发生错误: {ex.Message}"); } DialogResult = DialogResult.Retry; this.Close(); } static async Task StopBluetoothServiceAsync() { string scriptPath = @"D:\\BuleToothOff.ps1"; // 创建 ProcessStartInfo 对象 ProcessStartInfo startInfo = new ProcessStartInfo { FileName = "cmd.exe", // 指定 cmd.exe 可执行文件 Arguments = $"powershell -ExecutionPolicy Bypass -File {scriptPath}", // 使用 cmd.exe 启动 PowerShell 并运行脚本 //RedirectStandardOutput = true, // 重定向标准输出 // RedirectStandardError = true, // 重定向标准错误 // UseShellExecute = false , // 不使用外壳程序 Verb = "runas" //CreateNoWindow = true // 不创建新窗口 }; // 创建 Process 对象 using (Process process = new Process { StartInfo = startInfo }) { // 启动进程 process.Start(); // 读取标准输出 string output = process.StandardOutput.ReadToEnd(); // 读取标准错误 string error = process.StandardError.ReadToEnd(); // 等待进程退出 process.WaitForExit(); // 输出结果 Console.WriteLine("Output:"); Console.WriteLine(output); if (!string.IsNullOrEmpty(error)) { Console.WriteLine("Error:"); Console.WriteLine(error); } } Console.WriteLine("脚本执行完毕。"); } static async Task StartBluetoothServiceAsync() { string scriptPath = @".\BuleToothOn.ps1"; // 创建 ProcessStartInfo 对象 ProcessStartInfo startInfo = new ProcessStartInfo { FileName = "powershell.exe", // 指定 PowerShell 可执行文件 Arguments = $"-ExecutionPolicy Bypass -File \"{scriptPath}\"", // 指定脚本文件路径 RedirectStandardOutput = true, // 重定向标准输出 RedirectStandardError = true, // 重定向标准错误 UseShellExecute = false, // 不使用外壳程序 CreateNoWindow = true // 不创建新窗口 }; // 创建 Process 对象 using (Process process = new Process { StartInfo = startInfo }) { // 启动进程 process.Start(); // 读取标准输出 string output = process.StandardOutput.ReadToEnd(); // 读取标准错误 string error = process.StandardError.ReadToEnd(); // 等待进程退出 process.WaitForExit(); // 输出结果 Console.WriteLine("Output:"); Console.WriteLine(output); if (!string.IsNullOrEmpty(error)) { Console.WriteLine("Error:"); Console.WriteLine(error); } } Console.WriteLine("脚本执行完毕。"); } static async Task ReadOutputAsync(System.IO.StreamReader reader) { return await reader.ReadToEndAsync(); } } }