vsto PPT插件开发,往右键菜单添加自定义按钮,出现兼容问题,我在自己的电脑上开发,没有出现错误异常,在客户电脑上出现这个错

发布于 2022-09-11 17:55:49 字数 104 浏览 32 评论 0

我使用vsto技术开发一个PPT的com加载项,
其中有一个需求是往右键菜单中添加自定义菜单按钮,
我在自己的电脑上写完了,没有出现问题,
但是在客户的电脑上运行出现了这个错误

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心如狂蝶 2022-09-18 17:55:49

你好,这个问题解决了吗,ppt自定义添加右键菜单怎么弄的?我也遇到这个问题了,困扰了我好久。

冬天旳寂寞 2022-09-18 17:55:49

已解决,没有整理,直接贴上实现的代码:

using Application.BaseData;
using Application.Config;

using Common.Logging;

using Infrastructure;

using Microsoft.Office.Core;

using stdole;

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Util.Controls.WinForm;

using Utilities.Converter;

using VarEnum;

using WpfUi.View.MaterialSet;
using WpfUi.ViewModel.MaterialSet;
using WpfUi.ViewModel.MaterialSet.Model;

namespace PowerPointAddIn.Vstor
{
    /// <summary>
    /// 操作扩展
    /// </summary>
    public class ContextMenuEx
    {
        private static readonly ILog _log = LogManager.GetLogger("ContextMenuEx");

        readonly CommandBars cmdBars;
        readonly CommandBar cmdThumbnailsBar;

        CommandBarButton insertResourceBtn = null;

        public ContextMenuEx()
        {
            try
            {
                cmdBars = ThisAddIn.application.CommandBars;
                cmdThumbnailsBar = cmdBars[ThisAddIn.officeType == OfficeType.Office ? "Thumbnails" : "Slide Miniature Popup Menu"];
                cmdThumbnailsBar.Reset();

                SetInsertResource();
            }
            catch (Exception err)
            {
                _log.Error(err);
            }
        }
        /// <summary>
        ///  设置素材插入
        /// </summary>
        public void SetInsertResource()
        {
            CommandBarControls commandBarControls = cmdThumbnailsBar.Controls;

            foreach (CommandBarControl cmdBarCtrl in commandBarControls)
                if (cmdBarCtrl.Tag == "InsertResource")
                    cmdBarCtrl?.Delete();

            string icon_stem = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, @"Resources\icon-sucai32.png");
            IPictureDisp pictureInsertResource = AxHostConverter.GetIPictureDisp(icon_stem);

            Globals.ThisAddIn.Dispatcher.Invoke(() =>
            {
                insertResourceBtn = (CommandBarButton)commandBarControls.Add(MsoControlType.msoControlButton);
                insertResourceBtn.BeginGroup = true;
                insertResourceBtn.Tag = "InsertResource";
                insertResourceBtn.Caption = "从云端插入";
                insertResourceBtn.Picture = pictureInsertResource;
                insertResourceBtn.Click += InsertResourceBtn_Click;
                insertResourceBtn.Visible = true;
            });
        }

        /// <summary>
        /// 切换素材插入
        /// </summary>
        /// <param name="state">切换状态</param>
        public void SwitchInsertResource(bool state)
        {
            if (insertResourceBtn == null) return;
            try
            {
                insertResourceBtn.Visible = state;
            }
            catch (Exception err)
            {
                _log.Error(err);
            }
        }

        private void InsertResourceBtn_Click(CommandBarButton Ctrl, ref bool CancelDefault)
        {
            try
            {
                if (string.IsNullOrEmpty(Config.UserInfo?.UserId))
                    throw new Exception("请先登录")
                    {
                        Source = Envirment.ErrUiSource
                    };

                var viewMode = new MaterialSetViewModel(new BaseDataApplication(), Config.UserInfo.UserId, Config.SchoolCode);
                viewMode.InsertElement2Slide += InsertElement2Slide;
                viewMode.SetWindow(new MaterialSetView());
                ThisAddIn.Show(viewMode.Window);
            }
            catch (Exception err)
            {
                Ex.GlobalUnCatchError(err);
            }
        }


        void InsertElement2Slide(List<Material> ChooseMaterials)
        {
            if (ChooseMaterials?.Count < 1)
                return;

            PptHelp pptHelp = new PptHelp();
            try
            {
                ChooseMaterials.ForEach(p =>
                {
                    if (!InternetHelp.IsFileOrExt(p.MaterialUrl, out string ext))
                    {
                        ThisAddIn.ShowDialog(new Resource.Control.AlertWin.alertWindow(new
                        {
                            message = "不是有效的文件[" + p.Name + "],导入失败",
                        }));
                        return;
                    }

                    if (p.MaterialType == MaterialType.图片)
                    {
                        pptHelp.AddImg(p.MaterialUrl);
                    }
                    else if (p.MaterialType == MaterialType.音频 || p.MaterialType == MaterialType.视频)
                    {
                        if (string.IsNullOrEmpty(ext))
                        {
                            ThisAddIn.ShowDialog(new Resource.Control.AlertWin.alertWindow(new
                            {
                                message = "不能识别此文件[" + p.Name + "]的格式,导入失败",
                            }));
                            return;
                        }

                        string fileName = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Path.GetRandomFileName(), ext));

                        FormDownload formDownload = new FormDownload(new Uri(p.MaterialUrl), fileName);
                        formDownload.ShowDialog();

                        pptHelp.AddMedia(fileName);

                        Task.Run(() =>
                        {
                            try
                            {
                                if (File.Exists(fileName))
                                {
                                    File.Delete(fileName);
                                }
                            }
                            catch { }
                        });

                    }
                });
            }
            catch (Exception ex)
            {
                ThisAddIn.ShowDialog(new Resource.Control.AlertWin.alertWindow(new
                {
                    message = ex.Message,
                }));
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文