Пример #1
0
        /// <summary>
        /// Removes all ressources such as menus, handles and forms from KeePass.
        /// </summary>
        public override void Terminate()
        {
            //Destroy Help Form.
            if (HelpForm.Visible)
            {
                HelpForm.Close();
            }
            else
            {
                HelpForm.Dispose();
            }

            //Unregister internal events.
            m_host.MainWindow.Shown -= MainWindow_Shown;

            //Remove Tools Menus.
            m_host.MainWindow.ToolsMenu.DropDownItems.Remove(toMenuTrayTOTP);
            toMenuTrayTOTP.Dispose();
            m_host.MainWindow.ToolsMenu.DropDownItems.Remove(toSubMenuSettings);
            toSubMenuSettings.Dispose();
            m_host.MainWindow.ToolsMenu.DropDownItems.Remove(toSubMenuSeperator1);
            toSubMenuSeperator1.Dispose();
            m_host.MainWindow.ToolsMenu.DropDownItems.Remove(toSubMenuAbout);
            toSubMenuAbout.Dispose();

            //Remove Notify Icon menus.
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Opening -= OnNotifyMenuOpening;
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Remove(niMenuTitle);
            niMenuTitle.Dispose();
            foreach (var Menu in niMenuList)
            {
                m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Remove(Menu);
                Menu.Dispose();
            }
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Remove(niMenuSeperator);
            niMenuSeperator.Dispose();

            //Remove Context menus.
            m_host.MainWindow.EntryContextMenu.Opening -= OnEntryMenuOpening;
            m_host.MainWindow.EntryContextMenu.Items.Remove(enMenuCopyTOTP);
            enMenuCopyTOTP.Dispose();

            //Unregister auto-type function.
            if (SprEngine.FilterPlaceholderHints.Contains(m_host.CustomConfig.GetString(setname_string_AutoType_FieldName, setdef_string_AutoType_FieldName).ExtWithBrackets()))
            {
                SprEngine.FilterCompile -= SprEngine_FilterCompile;
                SprEngine.FilterPlaceholderHints.Remove(m_host.CustomConfig.GetString(setname_string_AutoType_FieldName, setdef_string_AutoType_FieldName).ExtWithBrackets());
            }

            //Remove Column provider.
            m_host.ColumnProviderPool.Remove(liColumnTOTP);
            liColumnTOTP = null;

            //Remove Timer.
            liRefreshTimer.Tick -= OnTimerTick;
            liRefreshTimer.Dispose();
        }
Пример #2
0
        /// <summary>
        /// Initialization of the plugin, adding menus, handlers and forms.
        /// </summary>
        /// <param name="host">Plugin host for access to KeePass functions.</param>
        /// <returns>Successful loading of the plugin, if not the plugin is removed.</returns>
        public override bool Initialize(IPluginHost host)
        {
            //Internalise Host Handle.
            if (host == null) return false;
            m_host = host;

            //Instanciate Help Form.
            HelpForm = new FormHelp(this);

            //Register form events.
            m_host.MainWindow.Shown += MainWindow_Shown;

            //Tools Menus.
            toMenuTrayTOTP = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strTrayTOTPPlugin);
            toMenuTrayTOTP.Image = Properties.Resources.TOTP;
            m_host.MainWindow.ToolsMenu.DropDownItems.Add(toMenuTrayTOTP);
            toSubMenuSettings = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strSettings);
            toSubMenuSettings.Image = Properties.Resources.TOTP_Settings;
            toSubMenuSettings.Click += OnMenuSettingsClick;
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuSettings);
            toSubMenuSeperator1 = new ToolStripSeparator();
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuSeperator1);
            toSubMenuHelp = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strHelp);
            toSubMenuHelp.Image = Properties.Resources.TOTP_Help;
            toSubMenuHelp.Click += OnMenuHelpClick;
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuHelp);
            toSubMenuAbout = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strAbout + "...");
            toSubMenuAbout.Image = Properties.Resources.TOTP_Info;
            toSubMenuAbout.Click += OnMenuAboutClick;
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuAbout);

            //Entry Context Menus.
            m_host.MainWindow.EntryContextMenu.Opening += OnEntryMenuOpening;
            enMenuCopyTOTP = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strCopyTOTP);
            enMenuCopyTOTP.Image = Properties.Resources.TOTP;
            enMenuCopyTOTP.ShortcutKeys = (Keys)Shortcut.CtrlT;
            enMenuCopyTOTP.Click += OnEntryMenuTOTPClick;
            m_host.MainWindow.EntryContextMenu.Items.Insert(m_host.MainWindow.EntryContextMenu.Items.IndexOfKey(keeobj_string_EntryContextMenuCopyPassword_Name) + 1, enMenuCopyTOTP);
            enMenuSetupTOTP = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strSetupTOTP);
            enMenuSetupTOTP.Image = Properties.Resources.TOTP_Setup;
            enMenuSetupTOTP.ShortcutKeys = (Keys)Shortcut.CtrlShiftI;
            enMenuSetupTOTP.Click += OnEntryMenuSetupClick;
            var ContextMenu = (ToolStripMenuItem)m_host.MainWindow.EntryContextMenu.Items.Find(keeobj_string_EntryContextMenuEntriesSubMenu_Name, true)[0];
            ContextMenu.DropDownItems.Insert(ContextMenu.DropDownItems.IndexOfKey(keeobj_string_EntryContextMenuEntriesSubMenuSeperator1_Name) + 1, enMenuSetupTOTP);
            enMenuSeperator = new ToolStripSeparator();
            ContextMenu.DropDownItems.Insert(ContextMenu.DropDownItems.IndexOf(enMenuSetupTOTP) + 1, enMenuSeperator);

            //Notify Icon Context Menus.
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Opening += OnNotifyMenuOpening;
            niMenuTitle = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strTrayTOTPPlugin);
            niMenuTitle.Image = Properties.Resources.TOTP;
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Insert(0, niMenuTitle);
            niMenuSeperator = new ToolStripSeparator();
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Insert(1, niMenuSeperator);

            //Register auto-type function.
            if (m_host.CustomConfig.GetBool(setname_bool_AutoType_Enable, true))
            {
                SprEngine.FilterCompile += SprEngine_FilterCompile;
                SprEngine.FilterPlaceholderHints.Add(m_host.CustomConfig.GetString(setname_string_AutoType_FieldName, setdef_string_AutoType_FieldName).ExtWithBrackets());
            }

            //List Column TOTP.
            liColumnTOTP = new TrayTOTP_CustomColumn(this);
            m_host.ColumnProviderPool.Add(liColumnTOTP);

            //Refresh Timer.
            liRefreshTimer.Interval = setstat_int_EntryList_RefreshRate;
            liRefreshTimer.Enabled = true;
            liRefreshTimer.Tick += OnTimerTick;

            //Time Correction.
            TimeCorrections = new TimeCorrectionCollection(m_host.CustomConfig.GetBool(setname_bool_TimeCorrection_Enable, false));
            TimeCorrectionProvider.Interval = Convert.ToInt16(m_host.CustomConfig.GetULong(KeeTrayTOTPExt.setname_ulong_TimeCorrection_RefreshTime, KeeTrayTOTPExt.setdef_ulong_TimeCorrection_RefreshTime));
            TimeCorrections.AddRangeFromList(m_host.CustomConfig.GetString(setname_string_TimeCorrection_List, string.Empty).Split(';').ToList());

            return true;
        }