ITsiRegExportItem.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using BluePointLilac.Methods;
  2. using ContextMenuManager.Methods;
  3. using System;
  4. using System.IO;
  5. using System.Windows.Forms;
  6. namespace ContextMenuManager.Controls.Interfaces
  7. {
  8. interface ITsiRegExportItem
  9. {
  10. string Text { get; set; }
  11. string RegPath { get; }
  12. ContextMenuStrip ContextMenuStrip { get; set; }
  13. RegExportMenuItem TsiRegExport { get; set; }
  14. }
  15. sealed class RegExportMenuItem : ToolStripMenuItem
  16. {
  17. public RegExportMenuItem(ITsiRegExportItem item) : base(AppString.Menu.ExportRegistry)
  18. {
  19. item.ContextMenuStrip.Opening += (sender, e) =>
  20. {
  21. using(var key = RegistryEx.GetRegistryKey(item.RegPath))
  22. this.Visible = key != null;
  23. };
  24. this.Click += (sender, e) =>
  25. {
  26. using(SaveFileDialog dlg = new SaveFileDialog())
  27. {
  28. string date = DateTime.Today.ToString("yyyy-MM-dd");
  29. string time = DateTime.Now.ToString("HH.mm.ss");
  30. string filePath = $@"{AppConfig.BackupDir}\{date}\{item.Text} - {time}.reg";
  31. string dirPath = Path.GetDirectoryName(filePath);
  32. string fileName = Path.GetFileName(filePath);
  33. Directory.CreateDirectory(dirPath);
  34. dlg.FileName = fileName;
  35. dlg.InitialDirectory = dirPath;
  36. dlg.Filter = $"{AppString.Dialog.RegistryFile}|*.reg";
  37. if(dlg.ShowDialog() == DialogResult.OK)
  38. {
  39. ExternalProgram.ExportRegistry(item.RegPath, dlg.FileName);
  40. }
  41. if(Directory.GetFileSystemEntries(dirPath).Length == 0)
  42. {
  43. Directory.Delete(dirPath);
  44. }
  45. }
  46. };
  47. }
  48. }
  49. }