0

我很幸运地找到了一个名为globalmousekeyhook的项目,通过它我可以设置我的 PPT VSTO 插件的快捷方式。
核心部分代码如下。
当我按下定义的快捷方式时,我的插件功能和 PPT 的内部命令都会被执行。
这有一个副作用,即我的插件触发的窗口不会被聚焦。
我尝试添加frm.activate()or frm.focus,但它们都不起作用。
我该怎么做才能只执行我的插件功能?任何意见将不胜感激。

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Gma.System.MouseKeyHook;
namespace PowerPointAddIn1
{
    public partial class ThisAddIn
    {
        public static PowerPoint.Application PPTApp;
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        { 
            var QRun = Combination.FromString("Alt+E");
            Action actionQRun = ShowQRunWin;
            var assignment = new Dictionary<Combination, Action>
            {
                {QRun, actionQRun}
            };
            Hook.AppEvents().OnCombination(assignment);
        }

        public void ShowQRunWin()
        {            
            CMDForm frm = new CMDForm();
            frm.FormBorderStyle = FormBorderStyle.FixedSingle;   //set it un-resizeable       
            frm.MaximizeBox = false;  //remove maximize button
            frm.MinimizeBox = false;  //remove minimize button                
            frm.Show();
            frm.Activate();
            frm.Focus();           
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
        protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new RibbonUI();
        }
    }
}
4

1 回答 1

0

您所指的项目允许通过设置KeyPressEventArgs.Handled属性来取消任何进一步的操作,该属性设置一个指示事件是否已处理的值 -true绕过控件的默认处理;否则,false也将事件传递给默认控制处理程序。

另一种方法是重新利用相应的(如果有的话)功能区按钮。在这种情况下,也涵盖了键盘快捷键。在 Office Fluent Ribbon 上的临时重新调整命令用途一文中阅读有关此内容的更多信息。

于 2021-05-12T20:21:45.080 回答