using Common.system;

using NReco.VideoConverter;

using System;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Ink;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
using System.Windows.Threading;

using XHWK.Model;
using XHWK.WKTool.Utils;

namespace XHWK.WKTool
{
    /// <summary>
    /// 录屏工具栏
    /// </summary>
    public partial class ScreenRecordingToolbarWindow : Window
    {
        #region 初始变量

        /// <summary>
        /// 视频保存名称
        /// </summary>
        private string VideoSavePathName;

        /// <summary>
        /// 临时视频路径
        /// </summary>
        private string TempVideoPathName;

        /// <summary>
        /// 临时麦克风路径
        /// </summary>
        private string TempAudioPathName1;

        /// <summary>
        /// 临时扬声器路径
        /// </summary>
        private string TempAudioPathName2;

        /// <summary>
        /// 视频信息
        /// </summary>
        private Model_Video VideoInfo = null;

        //声明一个 DrawingAttributes 类型的变量
        private DrawingAttributes drawingAttributes;

        private DispatcherTimer t = null;

        /// <summary>
        /// 计时器状态
        /// </summary>
        private enum State
        {
            Start,
            Pause,
            End,
            Loading
        }

        /// <summary>
        /// 状态
        /// </summary>
        private State _state = State.End;

        private KeyboardHookCommon k_hook;

        /// <summary>
        /// 🖊状态 0红色 1蓝色 10红色批注内 11蓝色批注内
        /// </summary>
        public int flg = 0;

        #endregion 初始变量

        #region 初始化

        /// <summary>
        /// 录屏工具栏
        /// </summary>
        public ScreenRecordingToolbarWindow()
        {
            InitializeComponent();
            ResizeMode = ResizeMode.NoResize;
        }

        /// <summary>
        /// 初始化
        /// </summary>
        public void Initialize()
        {
            GridSrToobar.Visibility = Visibility.Visible;
            if (APP.W_PracticeWindow == null)
            {
                APP.W_PracticeWindow = new PracticeWindow
                {
                    //APP.W_PracticeWindow.Topmost = true;
                    Width = pwidth,
                    Height = pHeight,
                    Left = 0,
                    Top = 0
                };
                //practiceWin.Owner = this;
            }
            APP.W_PracticeWindow.InitPen();
            APP.W_PracticeWindow.InitTQLPPen();
            APP.W_PracticeWindow.Show();
            new Thread(new ThreadStart(new Action(() =>
            {
                Thread.Sleep(100);
                Dispatcher.Invoke(() =>
                {
                    Topmost = true;
                });
            }))).Start();
            APP.W_PracticeWindow.Hide();

            flg = 0;

            k_hook = new KeyboardHookCommon();
            k_hook.KeyDownEvent += K_hook_KeyDownEvent;

            //创建 DrawingAttributes 类的一个实例
            drawingAttributes = new DrawingAttributes();
            //将 InkCanvas 的 DefaultDrawingAttributes 属性的值赋成创建的 DrawingAttributes 类的对象的引用
            //InkCanvas 通过 DefaultDrawingAttributes 属性来获取墨迹的各种设置，该属性的类型为 DrawingAttributes 型

            drawingAttributes.FitToCurve = true;
            //隐藏画笔工具栏
            BtnRecordingScreen.Visibility = Visibility.Visible;
            BtnRecordingScreenPause.Visibility = Visibility.Collapsed;
            BtnStopRecordingScreen.IsEnabled = false; //停止录制按钮不点击
            BtnPenBlue.IsEnabled = false;//蓝笔不可点击
            BtnPenRed.IsEnabled = false;//红笔不可点击
            BtnPenBlue.Visibility = Visibility.Visible;
            BtnPenRed.Visibility = Visibility.Visible;
            BtnPenBlue_CL.Visibility = Visibility.Collapsed;
            BtnPenRed_CL.Visibility = Visibility.Collapsed;
            TxbTime.Content = "00:00:00";
        }

        private void K_hook_KeyDownEvent(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyValue == (int)System.Windows.Forms.Keys.F5 && (int)Control.ModifierKeys == (int)Keys.Control)
            {
                //开始，暂停
                BtnRecordingScreen_Click(null, null);
            }
            if (e.KeyValue == (int)Keys.S && (int)Control.ModifierKeys == (int)Keys.Control)
            {
                //结束
                BtnStopRecordingScreen_Click(null, null);
            }
        }

        #endregion 初始化

        #region 事件

        private DateTime SRTime = Convert.ToDateTime("2020-01-01 00:00:00");

        /// <summary>
        /// 时钟回调
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnTimer(object sender, EventArgs e)
        {
            if (_state == State.Start)
            {
                SRTime = SRTime.AddMilliseconds(1000);
            }

            TxbTime.Content = SRTime.ToString("HH:mm:ss");
        }

        /// <summary>
        /// 结束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void End()
        {
            _state = State.End;
        }

        #region 录屏

        /// <summary>
        /// 设置录屏文件地址
        /// </summary>
        private void SetUpVideoPathName()
        {
            string fileType = ((Enum_VideoType)int.Parse(FileToolsCommon.GetConfigValue("VideoType"))).ToString();
            FileToolsCommon.CreateDirectory(APP.WKData.WkPath);
            FileToolsCommon.DeleteDirectory(APP.WKData.WkPath + "temprs/");
            VideoSavePathName = APP.WKData.WkPath + APP.WKData.WkName + "_录屏." + fileType;
            int num = 1;
            while (FileToolsCommon.IsExistFile(VideoSavePathName))
            {
                num++;
                VideoSavePathName = APP.WKData.WkPath + APP.WKData.WkName + "_录屏_" + num + "." + fileType;
            }

            TempVideoPathName = APP.WKData.WkPath + APP.WKData.WkName + "_录屏_" + num + ".avi";
            TempAudioPathName1 = APP.WKData.WkPath + APP.WKData.WkName + "_录屏_" + num + "_1.mp3";
            TempAudioPathName2 = APP.WKData.WkPath + APP.WKData.WkName + "_录屏_" + num + "_2.mp3";
        }

        /// <summary>
        /// 是否已经按下按钮
        /// </summary>
        private bool IsPressButton = false;

        //录制麦克风的声音
        private ZAudioRecordHelper helper1 = null;

        //录制扬声器的声音
        private ZAudioRecordHelper helper2 = null;

        //桌面录制
        private ZVideoRecordHelper helper3 = null;

        public IntPtr winHandle;// 当前窗体指针

        /// <summary>
        /// 开始或暂停录制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnRecordingScreen_Click(object sender, RoutedEventArgs e)
        {
            #region 防止连击

            if (IsPressButton)
            {
                return;
            }
            else
            {
                IsPressButton = true;
                new Thread(new ThreadStart(new Action(() =>
                {
                    Thread.Sleep(500);
                    IsPressButton = false;
                }))).Start();
            }

            #endregion 防止连击

            if (_state == State.End)
            {
                SRTime = Convert.ToDateTime("2020-01-01 00:00:00");
                TxbTime.Content = "00:00";

                if (t == null)
                {
                    t = new DispatcherTimer();
                    t.Tick += OnTimer;
                    t.Interval = new TimeSpan(0, 0, 0, 0, 1000);
                    t.IsEnabled = true;
                    t.Start();
                }
                else
                {
                    t.Interval = new TimeSpan(0, 0, 0, 0, 1000);
                }

                _state = State.Loading;

                VideoInfo = new Model_Video
                {
                    VideoType = (Enum_VideoType)int.Parse(FileToolsCommon.GetConfigValue("VideoType")),
                    WkType = Enum_WKVidetype.RecordingScreen
                };
                SetUpVideoPathName();

                if (APP.W_CountdownWindow == null)
                {
                    APP.W_CountdownWindow = new CountdownWindow();
                    APP.W_CountdownWindow.Initialize(true, 3000);
                }
                else
                {
                    APP.W_CountdownWindow.Initialize(true, 3000);
                }
                APP.W_CountdownWindow.Show();

                BtnRecordingScreen.Visibility = Visibility.Collapsed;
                BtnRecordingScreenPause.Visibility = Visibility.Visible;
                BtnStopRecordingScreen.IsEnabled = true; //停止录制按钮可点击
                BtnPenBlue.IsEnabled = true;//蓝笔可点击
                BtnPenRed.IsEnabled = true;//红笔可点击
                BtnPenBlue.Visibility = Visibility.Visible;
                BtnPenRed.Visibility = Visibility.Visible;
                BtnPenBlue_CL.Visibility = Visibility.Collapsed;
                BtnPenRed_CL.Visibility = Visibility.Collapsed;
                TxbTime.Visibility = Visibility.Visible;//时间显示

                #region 隐藏工具栏

                if (APP.IsHideSRTool)
                {
                    if (APP.W_MinToolbar == null)
                    {
                        APP.W_MinToolbar = new MinToolbar();
                    }
                    APP.W_MinToolbar.Topmost = true;
                    double MinToolTop = Top;
                    GridSrToobar.Visibility = Visibility.Hidden;

                    APP.W_MinToolbar.Initialize(MinToolTop, ActualHeight);
                    APP.W_MinToolbar.Show();
                }

                #endregion 隐藏工具栏

                helper1 = new ZAudioRecordHelper(TempAudioPathName1, ZAudioRecordHelper.RecordType.microphone);
                helper2 = new ZAudioRecordHelper(TempAudioPathName2, ZAudioRecordHelper.RecordType.loudspeaker);

                winHandle = new WindowInteropHelper(this).Handle;
                var curScreen = Screen.FromHandle(winHandle);
                int RecordWidth = curScreen.Bounds.Width;
                int RecordHeight = curScreen.Bounds.Height;
                helper3 = new ZVideoRecordHelper(TempVideoPathName, RecordWidth, RecordHeight);

                new Thread(o =>
                {
                    Thread.Sleep(3000);
                    Dispatcher.Invoke(() =>
                    {
                        _state = State.Start;
                        helper1.StartRecordAudio();
                        helper2.StartRecordAudio();
                        helper3.StartRecordVideo();
                    });

                    Thread.Sleep(1000);

                    Dispatcher.Invoke(() =>
                    {
                        k_hook.Start();//安装键盘钩子
                    });
                })
                { IsBackground = true }.Start();

                Console.WriteLine("TempAudioPathName1:" + TempAudioPathName1);
                Console.WriteLine("TempAudioPathName2:" + TempAudioPathName2);
                Console.WriteLine("TempVideoPathName:" + TempVideoPathName);
            }
            else if (_state == State.Start)
            {
                _state = State.Pause;
                helper1.PauseRecordAudio();
                helper2.PauseRecordAudio();
                helper3.PauseRecordVideo();
                BtnRecordingScreen.Visibility = Visibility.Visible;
                BtnRecordingScreenPause.Visibility = Visibility.Collapsed;
            }
            else if (_state == State.Pause)
            {
                _state = State.Start;
                helper1.ResumeRecordAudio();
                helper2.ResumeRecordAudio();
                helper3.ResumeRecordVideo();
                BtnRecordingScreen.Visibility = Visibility.Collapsed;
                BtnRecordingScreenPause.Visibility = Visibility.Visible;
            }
        }

        /// <summary>
        /// 停止录像
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnStopRecordingScreen_Click(object sender, RoutedEventArgs e)
        {
            #region 防止连击

            if (IsPressButton)
            {
                return;
            }
            else
            {
                IsPressButton = true;
                new Thread(new ThreadStart(new Action(() =>
                {
                    Thread.Sleep(500);
                    IsPressButton = false;
                }))).Start();
            }

            #endregion 防止连击

            BtnRecordingScreen.ToolTip = "开始";
            k_hook.Stop();
            TxbTime.Content = "00:00";

            if (APP.W_PracticeWindow != null)
            {
                if (APP.W_PracticeWindow.Visibility == Visibility.Visible)
                {
                    Owner = null;
                    APP.W_PracticeWindow.ReturnPractice();
                }
            }

            if (APP.W_XHMicroLessonSystemWindow == null)
            {
                APP.W_XHMicroLessonSystemWindow = new MainWindow();
            }
            APP.W_XHMicroLessonSystemWindow.InitializeKeyDownEvent();
            //APP.W_XHMicroLessonSystemWindow.InitPen();
            APP.W_XHMicroLessonSystemWindow.InitTQLPPen();
            APP.W_XHMicroLessonSystemWindow.Show();

            if (_state == State.Pause || _state == State.Start)
            {
                End();
                t.Stop();
                t = null;
                Console.WriteLine("停止录制");
                helper1.StopRecordAudio();
                helper2.StopRecordAudio();
                helper3.StopRecordVideo();

                new Thread(new ThreadStart(new Action(() =>
                {
                    FFMpegConverter ffMpeg = new FFMpegConverter();

                    FFMpegInput[] input = new FFMpegInput[] {
                    new FFMpegInput(TempVideoPathName),
                    new FFMpegInput(TempAudioPathName1),
                    new FFMpegInput(TempAudioPathName1),
                };

                    // 多路音频混音
                    ffMpeg.ConvertMedia(
                        input,
                        VideoSavePathName,
                        "mp4",
                        new OutputSettings()
                        {
                            CustomOutputArgs = "-filter_complex amix=inputs=2:duration=first:dropout_transition=2"
                        }
                    );
                    //生成缩略图
                    string ThumbnailPath = FileToolsCommon.GetDirectoryName(VideoSavePathName) + "ThumbnailPath/";
                    FileToolsCommon.CreateDirectory(ThumbnailPath);
                    //缩略图存储位置
                    string ThumbnailPathName = ThumbnailPath + FileToolsCommon.GetIOFileName(VideoSavePathName).Replace(".", "") + ".JPG";

                    FileToolsCommon.DeleteFile(ThumbnailPathName);
                    VideoInfo.RSTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    VideoInfo.VideoPath = VideoSavePathName;
                    VideoInfo.ThumbnailPath = ThumbnailPathName;
                    APP.FFmpeg.GenerateThumbnails(VideoSavePathName, ThumbnailPathName, 200, 130);
                    VideoInfo.FileGuid = Guid.NewGuid().ToString();
                    VideoInfo.IsUpload = false;
                    VideoInfo.Uploaded = 0;
                    if (!APP.VideoList.Exists(x => x.FileGuid == VideoInfo.FileGuid) || !APP.VideoList.Exists(x => x.VideoPath == VideoInfo.VideoPath))
                    {
                        APP.VideoList.Add(VideoInfo);
                        //保存数据
                        APP.SaveWkData();
                    }

                    FileToolsCommon.DeleteFile(TempAudioPathName1);
                    FileToolsCommon.DeleteFile(TempAudioPathName2);
                    FileToolsCommon.DeleteFile(TempVideoPathName);
                }))).Start();
                Click_stopRecordingScreen();
            }
            Hide();

            SRTime = Convert.ToDateTime("2020-01-01 00:00:00");
            TxbTime.Content = "00:00";
        }

        public void MaxToobar()
        {
            Graphics graphics = Graphics.FromHwnd(IntPtr.Zero);
            float DIP = graphics.DpiX;
            //float DIPY = graphics.DpiY;
            APP.W_ScreenRecordingToolbarWindow.Left = PrimaryScreen.WorkingArea.Width / (DIP / 96) - APP.W_ScreenRecordingToolbarWindow.Width;
            GridSrToobar.Visibility = Visibility.Visible;
            APP.W_ScreenRecordingToolbarWindow.Topmost = true;
        }

        #endregion 录屏

        #region 画笔相关

        /// <summary>
        /// 笔调用批注
        /// </summary>
        public void PenPractice()
        {
            if (flg != 11 && flg != 10)
            {
                #region 防止连击

                if (IsPressButton)
                {
                    return;
                }
                else
                {
                    IsPressButton = true;
                    new Thread(new ThreadStart(new Action(() =>
                    {
                        Thread.Sleep(500);
                        IsPressButton = false;
                    }))).Start();
                }

                #endregion 防止连击

                string time = GetTimeStamp();
                string tempPath = AppDomain.CurrentDomain.BaseDirectory + "temp\\";
                if (!Directory.Exists(tempPath))
                {
                    Directory.CreateDirectory(tempPath);
                }
                try
                {
                    Dispatcher.Invoke(() =>
                    {
                        //borOne.Background = new SolidColorBrush(Colors.LightSkyBlue);
                        //borTwo.Background = new SolidColorBrush(Colors.DodgerBlue);
                        if (APP.W_PracticeWindow == null)
                        {
                            APP.W_PracticeWindow = new PracticeWindow
                            {
                                Width = pwidth,
                                Height = pHeight,
                                Left = 0,
                                Top = 0
                            };
                            //practiceWin.Owner = this;
                        }
                        //APP.W_PracticeWindow.InitPen();
                        //APP.W_PracticeWindow.InitTQLPPen();
                        APP.W_PracticeWindow.Initialize();// imagePath);
                        flg = 11;
                        APP.W_PracticeWindow.Blue();
                        APP.W_PracticeWindow.Show();
                        APP.W_PracticeWindow.Topmost = true;
                        APP.W_PracticeWindow.Focus();
                    });

                    new Thread(new ThreadStart(new Action(() =>
                    {
                        Dispatcher.Invoke(() =>
                        {
                            APP.W_PracticeWindow.Topmost = false;
                        });
                        Thread.Sleep(500);
                        Dispatcher.Invoke(() =>
                        {
                            //Owner = APP.W_PracticeWindow;
                            Topmost = true;
                        });
                    }))).Start();
                }
                catch (Exception ex)
                {
                    LogHelper.WriteErrLog("【批注（PracticeWindow）" + ex.Message, ex);
                }
            }
        }

        /// <summary>
        /// 画笔点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnBrush_Click(object sender, RoutedEventArgs e)
        {
            if (BtnPenBlue.Visibility != Visibility.Visible)
            {
                return;
            }

            #region 防止连击

            if (IsPressButton)
            {
                return;
            }
            else
            {
                IsPressButton = true;
                new Thread(new ThreadStart(new Action(() =>
                {
                    Thread.Sleep(500);
                    IsPressButton = false;
                }))).Start();
            }

            #endregion 防止连击

            BtnPenBlue.Visibility = Visibility.Collapsed;
            BtnPenRed.Visibility = Visibility.Visible;
            BtnPenBlue_CL.Visibility = Visibility.Visible;
            BtnPenRed_CL.Visibility = Visibility.Collapsed;
            string time = GetTimeStamp();
            string tempPath = AppDomain.CurrentDomain.BaseDirectory + "temp\\";
            if (!Directory.Exists(tempPath))
            {
                Directory.CreateDirectory(tempPath);
            }

            #region 录屏批注取消画笔

            //string imagePath = Path.Combine(tempPath, time + ".jpg");
            //ImageHelper.GetScreenshot(new System.Drawing.Rectangle(0, 0, 0, 0), imagePath, true, out BitmapImage bitmap);

            #endregion 录屏批注取消画笔

            try
            {
                if (flg == 11)
                {
                    //Dispatcher.Invoke(() =>
                    //{
                    //    borOne.Background = new SolidColorBrush(Colors.DodgerBlue);
                    //    borTwo.Background = new SolidColorBrush(Colors.DodgerBlue);
                    //});
                    flg = 1;
                    //this.Owner = null;
                    APP.W_PracticeWindow.ReturnPractice();
                }
                else if (flg == 10)
                {
                    //Dispatcher.Invoke(() =>
                    //{
                    //    borOne.Background = new SolidColorBrush(Colors.LightSkyBlue);
                    //    borTwo.Background = new SolidColorBrush(Colors.DodgerBlue);
                    //});
                    APP.W_PracticeWindow.Blue();
                    flg = 11;
                }
                else
                {
                    //new Thread(new ThreadStart(new Action(() =>
                    //{
                    //Dispatcher.Invoke(() =>
                    //{
                    //    borOne.Background = new SolidColorBrush(Colors.LightSkyBlue);
                    //    borTwo.Background = new SolidColorBrush(Colors.DodgerBlue);
                    //});

                    //}))).Start();
                    if (APP.W_PracticeWindow == null)
                    {
                        APP.W_PracticeWindow = new PracticeWindow
                        {
                            //APP.W_PracticeWindow.Topmost = true;
                            Width = pwidth,
                            Height = pHeight,
                            Left = 0,
                            Top = 0
                        };
                        //practiceWin.Owner = this;
                    }
                    APP.W_PracticeWindow.InitPen();
                    APP.W_PracticeWindow.InitTQLPPen();
                    APP.W_PracticeWindow.Initialize();// imagePath);
                    flg = 11;
                    APP.W_PracticeWindow.Blue();
                    APP.W_PracticeWindow.Show();
                    new Thread(new ThreadStart(new Action(() =>
                    {
                        Thread.Sleep(100);
                        Dispatcher.Invoke(() =>
                        {
                            //Owner = APP.W_PracticeWindow;
                            Topmost = true;
                        });
                    }))).Start();
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrLog("【批注（PracticeWindow）" + ex.Message, ex);
            }

            //imgCanvas.Source = new BitmapImage(new Uri(imagePath));
        }

        /// <summary>
        /// 屏幕宽
        /// </summary>
        internal double pwidth = SystemParameters.PrimaryScreenWidth;

        /// <summary>
        /// 屏幕高
        /// </summary>
        internal double pHeight = SystemParameters.PrimaryScreenHeight;

        /// <summary>
        /// 获取时间戳
        /// </summary>
        /// <returns></returns>
        public string GetTimeStamp()
        {
            TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalMilliseconds).ToString();
        }

        /// <summary>
        /// 橡皮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnEraser_Click(object sender, RoutedEventArgs e)
        {
            APP.W_PracticeWindow.Eraser();
        }

        /// <summary>
        /// 🖊
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnPen_Click(object sender, RoutedEventArgs e)
        {
            APP.W_PracticeWindow.Pen();
        }

        /// <summary>
        /// ⚪
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnRound_Click(object sender, RoutedEventArgs e)
        {
            APP.W_PracticeWindow.Round();
        }

        /// <summary>
        /// 矩形
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnRectangle_Click(object sender, RoutedEventArgs e)
        {
            APP.W_PracticeWindow.Rectangle();
        }

        #endregion 画笔相关

        #endregion 事件

        /// <summary>
        /// 停止录屏
        /// </summary>
        public delegate void StopRecordingScreen();

        /// <summary>
        /// 停止录屏
        /// </summary>
        public event StopRecordingScreen Click_stopRecordingScreen;

        /// <summary>
        /// 移动工具栏
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Grid_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            DragMove();
        }

        /// <summary>
        /// 红笔
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnBlackPenTwo_Click(object sender, RoutedEventArgs e)
        {
            if (BtnPenRed.Visibility != Visibility.Visible)
            {
                return;
            }

            #region 防止连击

            if (IsPressButton)
            {
                return;
            }
            else
            {
                IsPressButton = true;
                new Thread(new ThreadStart(new Action(() =>
                {
                    Thread.Sleep(500);
                    IsPressButton = false;
                }))).Start();
            }

            #endregion 防止连击

            BtnPenBlue.Visibility = Visibility.Visible;
            BtnPenRed.Visibility = Visibility.Collapsed;
            BtnPenBlue_CL.Visibility = Visibility.Collapsed;
            BtnPenRed_CL.Visibility = Visibility.Visible;
            string time = GetTimeStamp();
            string tempPath = AppDomain.CurrentDomain.BaseDirectory + "temp\\";
            if (!Directory.Exists(tempPath))
            {
                Directory.CreateDirectory(tempPath);
            }

            #region 录屏批注取消画笔

            string imagePath = Path.Combine(tempPath, time + ".jpg");
            ImageHelper.GetScreenshot(new System.Drawing.Rectangle(0, 0, 0, 0), imagePath, true, out BitmapImage bitmap);

            #endregion 录屏批注取消画笔

            try
            {
                if (flg == 10)
                {
                    flg = 0;
                    APP.W_PracticeWindow.ReturnPractice();
                }
                else if (flg == 11)
                {
                    flg = 10;
                    APP.W_PracticeWindow.Red();
                }
                else
                {
                    if (APP.W_PracticeWindow == null)
                    {
                        APP.W_PracticeWindow = new PracticeWindow
                        {
                            Width = pwidth,
                            Height = pHeight,
                            Left = 0,
                            Top = 0
                        };
                    }
                    APP.W_PracticeWindow.InitPen();
                    APP.W_PracticeWindow.InitTQLPPen();
                    APP.W_PracticeWindow.Initialize();//imagePath);
                    flg = 10;
                    APP.W_PracticeWindow.Red();
                    APP.W_PracticeWindow.Show();

                    new Thread(new ThreadStart(new Action(() =>
                    {
                        Thread.Sleep(100);
                        Dispatcher.Invoke(() =>
                        {
                            //Owner = APP.W_PracticeWindow;
                            Topmost = true;
                        });
                    }))).Start();
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrLog("【批注（PracticeWindow）" + ex.Message, ex);
            }
        }

        /// <summary>
        /// 返回主界面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnReturn_Click(object sender, RoutedEventArgs e)
        {
            if (_state == State.Pause || _state == State.Start)
            {
                MessageBoxResult br = MessageWindow.Show("退出将结束并保存录制，是否继续？", "提示", MessageBoxButton.OKCancel);
                if (br == MessageBoxResult.Cancel)
                {
                    return;
                }
                BtnStopRecordingScreen_Click(null, null);
            }
            APP.W_XHMicroLessonSystemWindow.InitializeKeyDownEvent();
            //APP.W_XHMicroLessonSystemWindow.InitPen();
            APP.W_XHMicroLessonSystemWindow.InitTQLPPen();
            APP.W_XHMicroLessonSystemWindow.Show();

            new Thread(new ThreadStart(new Action(() =>
            {
                Thread.Sleep(700);
                Dispatcher.Invoke(() =>
                {
                    if (APP.W_MinToolbar != null)
                    {
                        APP.W_MinToolbar.Hide();
                    }
                });
            }))).Start();
            Hide();
        }

        /// <summary>
        /// 修改笔状态
        /// </summary>
        public void ModifyState()
        {
            BtnPenBlue.Visibility = Visibility.Visible;
            BtnPenRed.Visibility = Visibility.Visible;
            BtnPenBlue_CL.Visibility = Visibility.Collapsed;
            BtnPenRed_CL.Visibility = Visibility.Collapsed;
        }

        private void gridToobarTwo_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            //if (BtnRecordingScreen.ToolTip.ToString().Equals("暂停") && (gridToobar.Visibility == Visibility.Visible || BorderBlack.Visibility == Visibility.Visible))
            if (BtnRecordingScreenPause.Visibility == Visibility.Visible)
            {
                if (APP.IsHideSRTool)
                {
                    if (APP.W_MinToolbar == null)
                    {
                        APP.W_MinToolbar = new MinToolbar();
                    }
                    APP.W_MinToolbar.Topmost = true;
                    double MinToolTop = Top;

                    new Thread(new ThreadStart(new Action(() =>
                    {
                        Thread.Sleep(500);
                        Dispatcher.Invoke(() =>
                        {
                            MouseEventCommon.GetCursorPos(out MouseEventCommon.POINT pointRecord);
                            if (pointRecord.X >= this.Left && pointRecord.X < this.Left + this.ActualWidth && pointRecord.Y >= this.Top && pointRecord.Y < this.Top + this.ActualHeight)
                            {
                                //LblMessage.Content = "在区域内：("+ pointRecord.X+","+pointRecord.Y+") ("+ Left + ","+Top+")";
                            }
                            else
                            {
                                //LblMessage.Content = "不在区域内：(" + pointRecord.X + "," + pointRecord.Y + ") (" + Left + "," + Top + ")";
                                APP.W_MinToolbar.Initialize(MinToolTop, ActualHeight);
                                GridSrToobar.Visibility = Visibility.Hidden;
                                APP.W_MinToolbar.Show();
                            }
                        });
                    }))).Start();
                }
            }
        }
    }
}