Существует несколько способов определить разницу.
Вариант 1 (лучший)
Application.WordBasic.IsAutosaveEvent
Вариант 2 (что я делал до нахождения варианта 1)
Перехватить команду FileSave (и FileSaveAs) с ленты:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<commands>
<command idMso="FileSave" onAction="SaveIntercept" />
</commands>
</customUI>
Установите флаг в методе SaveIntercept и задайте для CancelDefault значение false, чтобы сохранение продолжалось.
public void SaveIntercept(IRibbonControl control, ref bool CancelDefault)
{
logger.Info("Intercepted Manual Save");
ManualSave = true;
CancelDefault = false;
}
Также реализуйте BeforeDocument_BeforeSave и проверьте флаг там. Если флаг был установлен, он был ручным, в противном случае это автосохранение (или потенциально происходит из другой надстройки; не уверен, работает ли это).
bool quit = !customizations.ManualSave;
if (quit)
{
logger.Info("Autosave. Allowing Word to handle this save.");
e.Cancel = false;
return;
}
else
{
logger.Info("Manual save. Proceeding.");
customizations.ManualSave = false;
}
Это касается сохранения с помощью кнопок за кулисами, кнопок панели быстрого доступа и ярлыка сохранения (даже если они переопределяют сочетание клавиш)
Интересно, что после сохранения также есть способ узнать, как описано здесь ( обновленная версия здесь ).