WindowManager.cs 2.9 KB
using Common;
using DeviceLibrary;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DeviceLibrary
{
    public class WindowManager
    {
        public static List<WindInfo> windInfos = new List<WindInfo>();
        public static bool NeedRefresh = false;
        static string baseDir = Application.StartupPath + @"\Modules\";
        public static void Start()
        {
            foreach (var item in windInfos)
            {
                try
                {
                    if (ReelCheckCamera.CheckIPServiceAlive())
                    {
                        ReelCheckCamera.CloseIPService();
                        Thread.Sleep(3000);
                    }
                    item.ProcessInfo = ProcessUtil.StartProcess(item.Name, baseDir + $"{item.Name}\\", 60000);
                }
                catch (Exception ex)
                {
                    LogUtil.error($"程序{item.Name}启动失败", ex);
                }
            }
            NeedRefresh = true;
        }
        public static void Stop()
        {
            foreach (var item in windInfos)
            {
                try
                {
                    ProcessUtil.CloseProcess(item.ProcessInfo);

                    if (ReelCheckCamera.CheckIPServiceAlive())
                    {
                        ReelCheckCamera.CloseIPService();
                    }

                }
                catch (Exception ex)
                {
                    LogUtil.error($"程序{item.Name}关闭失败", ex);
                }
            }
            NeedRefresh = true;
        }
        public static void InitShow()
        {
            foreach (var item in windInfos)
            {
                item.MoveWindowIsOk = WindowUtil.PutIntoForm(item.Parent, item.Name, out IntPtr intPtr);
                item.WindowHandle = intPtr;
                if (intPtr == IntPtr.Zero)
                {
                    if (ReelCheckCamera.CheckIPServiceAlive())
                    {
                        ReelCheckCamera.CloseIPService();
                    }
                }
            }
        }
        public static void Show()
        {
            foreach (var item in windInfos)
            {
                item.Parent.Invoke(new Action(() =>
                {
                    item.MoveWindowIsOk = WindowUtil.PutIntoForm(item.Parent, item.Name, out IntPtr intPtr);
                    item.WindowHandle = intPtr;
                }));

            }
        }
    }
    public class WindInfo
    {
        public string Name { get; set; }
        public IntPtr WindowHandle { get; set; }
        public Panel Parent { get; set; }
        public Process ProcessInfo { get; set; }
        public bool MoveWindowIsOk { get; set; }

        public const string IPCamera = "IPCamera";
    }
}