//открыть новые скрипты private void OpenScripts_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog() { DefaultExt = ".dll", Filter = "DLL Files (.dll)|*.dll" }; //диалог открытия файла if (ofd.ShowDialog().Value) //если открыли { LoadFuncsRunScripts.LoadScripts(ofd.FileName); } }
static HashSet <Key> hs = new HashSet <Key>(); //словарь нажатых клавиш static void KeyDown(object sender, GlobalHook.MyEventArgs e) //любая кнопка нажата { if (!hs.Contains(e.e.Key)) //если такая кнопка не нажата, то записываем её и продолжаем { hs.Add(e.e.Key); } else//если кнопка уже была нажата - выходим { return; } var bnds = MainWindow.Binds.Where(b => b.Keys.Contains(e.e.Key == Key.System?e.e.SystemKey:e.e.Key)); //ищем бинды, где кнопка соответствует foreach (var b in bnds) //береьираем эти бинды { //если нажаты все необходимые кнопки if (b.Enable && b.Keys.All(k => hs.Contains(k))) { try { string scr = ""; if (b.IsToggle) //Если это бинд переключатель { scr = b.TogglePos ? b.Script1 : b.Script2; //выбираем скрипт b.TogglePos = !b.TogglePos; //переключаем b.UpdateBacks(); //обновляем задний фон для его скриптов } else//обычный бинд { scr = b.Script1; //просто берём и выполняем } int code = LoadFuncsRunScripts.ExecScript(scr); //выполняем скрипт switch (code) { case 1: //1 - эксклюзивный бинд e.Handled = true; break; } } catch (Exception ex)//логгер ошибок { string crashLog = string.Join(null, Enumerable.Repeat(Environment.NewLine, 5)); crashLog += DateTime.Now.ToString() + Environment.NewLine + ex.ToString(); File.AppendAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Binder\crashLogs.txt", crashLog); MessageBox.Show("Во время выполнения произошла ошибка, откройте файл лога для большей информации", "Ошибка"); } } } }
//тут все ссылочные переменные, на которые надо поставить игнор //public Border bind = null;//основной элемент бинда //public Canvas can = null;//канвас, где все элементы бинда //public DockPanel NameDock = null;//док, где имя и кнопка редактирования имени //public Label nameLab = null;//лейбел имени бинда //public Label script1Lab = null;//лейбел для скрипта 1 бинда //public Label script2Lab = null;//лейбел для скрипта 2 бинда //public Button EnableButton = null;//кнопка включения/выключения бинда //public CheckBox IsToggleCheck = null;//комбобокс с выбором модификатора бинда //public DockPanel ChooseBindDock = null;//док, для хранения бинда //public TextBlock keyText = null;//текстблок для кнопки бинда //public ComboBox comboModifier1 = null;//комбобокс с выбором модификатора бинда1 //public ComboBox comboModifier2 = null;//комбобокс с выбором модификатора бинда2 public MainWindow()//конструктор этого окна { //подготавливаем сериализер для биндов { var overrides = new XmlAttributeOverrides(); var ignore = new XmlAttributes { XmlIgnore = true }; overrides.Add <Bind>(m => m.bind, ignore); overrides.Add <Bind>(m => m.can, ignore); overrides.Add <Bind>(m => m.ChooseBindDock, ignore); overrides.Add <Bind>(m => m.comboModifier1, ignore); overrides.Add <Bind>(m => m.comboModifier2, ignore); overrides.Add <Bind>(m => m.EnableButton, ignore); overrides.Add <Bind>(m => m.IsToggleCheck, ignore); overrides.Add <Bind>(m => m.keyText, ignore); overrides.Add <Bind>(m => m.NameDock, ignore); overrides.Add <Bind>(m => m.nameLab, ignore); overrides.Add <Bind>(m => m.script1Lab, ignore); overrides.Add <Bind>(m => m.script2Lab, ignore); Type t = typeof(Bind[]); xsBinds = new XmlSerializer(t, overrides); } if (Application.ResourceAssembly.Location.Split('\\').Last() != "Binder.exe")//возвращаем наше имя { File.Move(Application.ResourceAssembly.Location, Application.ResourceAssembly.Location.Replace(Application.ResourceAssembly.Location.Split('\\').Last(), "Binder.exe")); } if (Process.GetProcessesByName("Binder").Length > 1) { Application.Current.Shutdown(); } InitializeComponent(); OpenOrCreateSets();//загружаем настройки //применяем настройки if (sets.haveDefaultBindsPath) { try { OpenInPath(sets.defaultBindsPath); } catch//если не удалось открыть или найти файл сохранки то убираем это { MessageBox.Show("Файл " + sets.defaultBindsPath + " не найден!"); sets.defaultBindsPath = ""; sets.haveDefaultBindsPath = false; } } SettingClass.UnRegisterAutoRun(); if (sets.autoRun) { SettingClass.RegisterAutoRun(); } Hook.SetHook();//запускаем хукер ShowWindow(); Show(); if (sets.AutoRunHided) { HideWindow(); } LoadFuncsRunScripts.LoadScripts(); main = this; MouseHook.MouseMove += MousePos;//ставим обработчик //MouseHook.LocalHook = false; }