/// <summary>
 /// 添加代理
 /// </summary>
 public void addHandler <T>(T handler)
 {
     if (handler == null)
     {
         return;
     }
     if (typeof(T) == typeof(onBegin))
     {
         beginHandler += handler as onBegin;
     }
     else if (typeof(T) == typeof(onDrag))
     {
         dragHandler += handler as onDrag;
     }
     else if (typeof(T) == typeof(onEnd))
     {
         endHandler += handler as onEnd;
     }
 }
예제 #2
0
        public static bool GetPasswordAndDecryptFile(Form1.OpenFileDialogContext context, out FileInfo fi, out byte[] bt, bool AcceptEmptyPassword = false, bool noMsg = false, bool keyFromFile = false, onEnd ended = null)
        {
            fi = new FileInfo(context.dialog.FileName);

            int countOfTryes = -1;

            bt = null;

            DoublePasswordForm pwdForm1, pwdForm2 = null;

            do
            {
                countOfTryes++;

                pwdForm1 = new DoublePasswordForm(1, fi.Name);
                pwdForm1.ShowDialog();

                if (pwdForm1.resultText == null)
                {
                    return(false);
                }

                if (pwdForm1.fromFile)
                {
                    break;
                }

                if (AcceptEmptyPassword && pwdForm1.resultText.Length == 0)
                {
                    return(true);
                }

                if (!AcceptEmptyPassword && pwdForm1.resultText.Length < 6)
                {
                    MessageBox.Show("Извините, но введённый текст настолько мал, что не может являться паролем", "Шифрование", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    continue;
                }

                if (fi.Length > 1024 * 1024 || countOfTryes > 1)
                {
                    pwdForm2 = new DoublePasswordForm(2, fi.Name, true);
                    pwdForm2.ShowDialog();

                    if (pwdForm2.cancel)
                    {
                        pwdForm1.clearResultText();
                        return(false);
                    }

                    if (!String.IsNullOrEmpty(pwdForm2.resultText) && pwdForm1.resultText != pwdForm2.resultText)
                    {
                        pwdForm1.clearResultText();
                        pwdForm2.clearResultText();
                        if (MessageBox.Show("Введённые пароли не равны друг другу\r\nХотите попробовать ещё раз?", "Шифрование", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes)
                        {
                            return(false);
                        }

                        continue;
                    }

                    pwdForm2.clearResultText();
                }

                break;
            }while (true);

            GC.Collect();

            if (ended == null)
            {
                GetPasswordAndDecryptFile(fi, out bt, pwdForm1);

                if (bt == null)
                {
                    if (!noMsg)
                    {
                        if (MessageBox.Show("Расшифровка файла '" + fi.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop) == System.Windows.Forms.DialogResult.Retry)
                        {
                            return(false);   // continue;
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }

                return(true);
            }
            else
            {
                var fif = fi;
                #if forLinux
                {
                    byte[] bd;
                    GetPasswordAndDecryptFile(fif, out bd, pwdForm1);

                    ended(fif, bd);

                    if (bd == null)
                    {
                        if (!noMsg)
                        {
                            MessageBox.Show("Расшифровка файла '" + fif.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // == System.Windows.Forms.DialogResult.Retry
                        }
                    }
                }
                #else
                ThreadPool.QueueUserWorkItem
                    (delegate
                {
                    byte[] bd;
                    GetPasswordAndDecryptFile(fif, out bd, pwdForm1);

                    ended(fif, bd);

                    if (bd == null)
                    {
                        if (!noMsg)
                        {
                            MessageBox.Show("Расшифровка файла '" + fif.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // == System.Windows.Forms.DialogResult.Retry
                        }
                    }
                }
                    );
                #endif
                return(true);
            }
        }