Надстройка Outlook 2010, как отменить событие закрытия, свернуть окно?(С #) - PullRequest
1 голос
/ 06 марта 2012

После нескольких часов экспериментов и поисков в Google я, наконец, пришел к концу, что я могу понять сам, поэтому вот что у меня сейчас:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Application.Startup += new
        Outlook.ApplicationEvents_11_StartupEventHandler(
        ApplicationObject_Startup);
    ((Outlook.ApplicationEvents_11_Event)Application).Quit += new
        Outlook.ApplicationEvents_11_QuitEventHandler(
        ApplicationObject_Quit);
}
void ApplicationObject_Startup()
{
    MessageBox.Show("Startup Event");
    ((Outlook.ExplorerEvents_10_Event)Application.ActiveExplorer()).Close += new
        Outlook.ExplorerEvents_10_CloseEventHandler(
        ExplorerObject_Close);
}

void ApplicationObject_Quit()
{
    MessageBox.Show("Quit Event");
}

void ExplorerObject_Close()
{
    MessageBox.Show("Explorer Close Event");
}

Все это работает, и когда я закрываю outlook, я вижу, что проводник закрывает событие и выходит из окна сообщения о событии по порядку. Однако на данный момент перспективы, похоже, уже закрылись, и я понятия не имею, как отменить эти события (для некоторых других событий передается bool Cancel, в котором вы можете установить значение false, но не для этих событий?) Или отправить событие минимизации (я вообще не смог этого понять).

Если у кого-нибудь есть какие-либо предложения, я буду очень признателен. У меня было немного свободного времени на работе, и я подумал, что постараюсь научиться кое-чему дополнению и одновременно решить действительно раздражающую часть перспективы!

РЕДАКТИРОВАТЬ: Я также пытался:

Application.ActiveExplorer().WindowState = Outlook.OlWindowState.olMinimized;

при запуске, чтобы сразу же свернуть окно. Это сводит к минимуму перспективы, но не к системному лотку, а только к панели (что забавно и, вероятно, фактически является ошибкой, поскольку минимизация настроена так, чтобы минимизировать до лотка ...) Тем не менее, если бы я мог просто избавиться от закрытия / quit event (s) Я мог бы, по крайней мере, просто свернуть окно на панель задач.

1 Ответ

2 голосов
/ 01 сентября 2012
private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        try
        {
            // Assign startup and quit events
            Application.Startup += new Outlook.ApplicationEvents_11_StartupEventHandler(ApplicationObject_Startup);
            ((Outlook.ApplicationEvents_11_Event)Application).Quit += new Outlook.ApplicationEvents_11_QuitEventHandler(ApplicationObject_Quit);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        try
        {
            // Remove the startup and quit events
            Application.Startup -= new Outlook.ApplicationEvents_11_StartupEventHandler(ApplicationObject_Startup);
            ((Outlook.ApplicationEvents_11_Event)Application).Quit -= new Outlook.ApplicationEvents_11_QuitEventHandler(ApplicationObject_Quit);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    void ApplicationObject_Startup()
    {
        try
        {
            // Minimize to taskbar
            Application.ActiveExplorer().WindowState = Outlook.OlWindowState.olMinimized;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    void ApplicationObject_Quit()
    {
        try
        {
            // Restart outlook minimized
            ProcessStartInfo psiOutlook = new ProcessStartInfo("OUTLOOK.EXE", "/recycle");
            psiOutlook.WindowStyle = ProcessWindowStyle.Minimized;
            Process.Start(psiOutlook);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

Это не очень чисто, но у меня это сработало.Он просто запускает новый экземпляр Outlook при его закрытии и всегда минимизирует Outlook при запуске.Главный недостаток, конечно, заключается в том, что вы не можете больше закрывать Outlook, предварительно не отключив надстройку или не убив "outlook.exe" в диспетчере задач.Не лучшее решение, но оно гарантирует, что вы никогда не пропустите электронное письмо или напоминание календаря, потому что вы случайно закрыли Outlook.

РЕДАКТИРОВАТЬ (10/02/12): я обновилперезапуск Outlook часть кода.Теперь он запускает outlook.exe с ключом / recycle.Это пытается перезагрузить Outlook в существующем окне.Это также перезапускает внешний вид, используя свернутый стиль окна.Это предотвращает появление окна загрузки внешнего вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...