如何禁用默认的双击和右键单击PowerPoint事件功能

本文关键字:单击 PowerPoint 事件 功能 右键 何禁用 默认 双击 | 更新日期: 2023-09-27 18:01:57

在我使用VSTO的PowerPoint插件中,我正在实现一个Application-level Mouse Hook来捕获鼠标事件,如双击,右键单击,鼠标over等,通过使用从Codeplex下载的MouseKeyboardActivityMonitor.dll。我这样做的原因是因为PowerPoint没有鼠标相关的事件可听,并且它给出的事件在PowerPoint的编辑模式下不会触发。

在我的插件中,当用户单击图表时,会出现一个菜单,允许用户在图表上执行各种功能。一切正常。我已经捕获了鼠标事件并显示了自定义菜单,但是当菜单在执行某些操作后关闭时出现了问题,屏幕上出现了PowerPoint的默认菜单。

示例:当用户双击图表时,我像这样显示表单菜单。

//Listening to the MouseDoubleClick event
MyMouseHookListener.MouseDoubleClick += MyMouseHookListener_MouseDoubleClick;
//MouseDoubleClickEvent
void MyMouseHookListener_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
    FormMenu.ShowDialog(); //Displaying menu
}

这可以正常工作,但是当用户关闭表单时,会出现默认的PowerPoint Charts双击菜单。其他鼠标事件也存在同样的问题。

如何禁用PowerPoint的事件菜单?

更新:

有一个名为Cancelbool属性是由PowerPoint的WindowBeforeDoubleClickWindowBeforeRightClick事件提供的。如果设置为true,则取消事件触发时PowerPoint执行的默认动作。我怎么能访问这个属性在我的MouseHook事件?

如何禁用默认的双击和右键单击PowerPoint事件功能

MouseKeyboardActivityMonitor有几个可用的事件。对于鼠标下移事件,您可以选择收听MouseDownMouseDownExt。后者在MouseEventExtArgs参数中为您提供了一些额外的选项,例如Handled属性。如果将此设置为true,则事件将不会进一步传播。

对于MouseDoubleClick事件,没有扩展事件可用。因此,我建议您通过使用MouseDownExt侦听器并计算已发生的单击次数来实现自己的双击侦听器。

public void Initialize() {
    // Initialize your listener and set up event listeners
    MyMouseHookListener = new MouseHookListener(new AppHooker()) {Enabled = true};
    MyMouseHookListener.MouseDownExt += MyMouseHookListenerOnMouseDownExt;
    // UNDONE Delete when testing is done; included to show that the listener is never called
    MyMouseHookListener.MouseDoubleClick += MyMouseHookListenerOnMouseDoubleClick;
}
private static void MyMouseHookListenerOnMouseDoubleClick(object sender, MouseEventArgs mouseEventArgs)
{
    // NOTE: This listener should never be called
    Debug.Print("Mouse double-click!");
}
private static void MyMouseHookListenerOnMouseDownExt(object sender, MouseEventExtArgs mouseEventExtArgs)
{
    Debug.Print("Mouse down. Number of clicks: {0}", mouseEventExtArgs.Clicks);
    if (mouseEventExtArgs.Clicks == 2)
    {
        // TODO Insert your double-click code here
        mouseEventExtArgs.Handled = true;
    }
}

为了详尽起见,您可能还应该测试它是已被单击的左按钮还是右按钮,您可以通过检查MouseEventExtArgs.Button属性来确定。右双击现在将被视为双击,但是,据我所知,这类似于最初的MouseDoubleClick事件。