目前,我已经继承了一个自定义保存过程的Word / Excel插件项目。该项目在VS2010和Excel / Word 2007中
在addin这个词中,以下xml被传递回GetCustomUI调用,定义了我们的自定义功能
<commands>
<command idMso="FileOpen" onAction="WordAddinOpen" />
<command idMso="FileSave" onAction="WordAddinSave" />
<command idMso="FileSaveAs" onAction="WordAddinSaveAs" />
</commands>
当我在WordAddinSave函数中放置一个断点,然后单击保存图标或按Control-S时,代码将在我的断点处停止。如果我在我的打开功能中设置断点并按Control-O
,也会发生同样的情况在Excel插件中,我有类似的xml被传回
<commands>
<command idMso="FileOpen" onAction="ExcelAddinOpen" />
<command idMso="FileSave" onAction="ExcelAddinSave" />
<command idMso="FileSaveAs" onAction="ExcelAddinSaveAs" />
</commands>
但是,如果我在ExcelAddinSave函数中放置断点,则只有在单击保存图标而不是键盘快捷键时代码才会停止。如果我按下Control-S或Control-O,则会发生保存/打开文件的默认Excel行为,而不是我的自定义功能。
ExcelAddinSave / ExcelAddinOpen在继承BaseRibbon并实现Office.IRibbonExtensibility的类中定义,如下所示:
[ComVisible(true)]
public class CExcelRibbon : BaseRibbon, Office.IRibbonExtensibility
{
public CExcelRibbon()
{
}
public string GetCustomUI(string ribbonID)
{
Assembly asm = Assembly.GetExecutingAssembly();
return GetResourceText(asm, "CExcelRibbon.xml"); //defines custom functionality
}
public void ExcelAddinOpen(Office.IRibbonControl control, bool cancel)
{
//custom open functionality snipped
}
public void ExcelAddinSave(Office.IRibbonControl control, bool cancel)
{
//custom save functionality snipped
}
//remaining class functionality snipped
}
因为我继承了这个项目,我不是Office Addins的专家,但为什么excel不会在键盘上调用我的Excel插件功能快捷键Control-S / Control-O?
注意:
当前功能是设置SetWindowsHookEx键盘挂钩以预览Control-S / Control-O的所有按键。但是,由于我们的环境,这看起来像是一个问题,因为看起来Windows 7正在断开我们的按键挂钩,因为它花了太长时间。我用以下的reg键设置测试了它,它保持不变。但是,从长远来看,我想找到一个更优化的解决方案
HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout