首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除MS Word加载项按钮?

如何删除MS Word加载项按钮?
EN

Stack Overflow用户
提问于 2009-05-26 07:10:38
回答 1查看 573关注 0票数 0

我需要以编程方式从MS Word中删除一个插件。我已经删除了与之对应的注册表项,并且该按钮现在已被禁用(单击它时没有任何反应),并且该外接程序不再出现在COM外接程序列表中。

但是,该按钮仍保留在附加模块功能区菜单中。我怎样才能以编程方式删除它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-02 10:38:53

一周后没有答案。你可以说这是一个懒惰的问题,不是吗?

我目前使用的是CodeProject的一个解决方案。我的代码似乎可以工作,但它还没有经过测试。

代码语言:javascript
复制
CoInitialize(NULL);
CLSID clsid;
IDispatch *pWApp, *pCommandBars, *pCommandBar, *pCommandBarControls, *pCommandBarControl;
VARIANT v;
HRESULT hr;

hr = CLSIDFromProgID(L"Word.Application", &clsid);
if (SUCCEEDED(hr))
{

    hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pWApp);
    if (SUCCEEDED(hr))
    {
        VariantInit(&v);
        hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pWApp, L"Commandbars", 0);
        pCommandBars = v.pdispVal;

        VariantInit(&v);
        hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pCommandBars, L"Count", 0);
        INT NumCommBars = v.intVal;

        for (INT i = 1; i <= NumCommBars; i++)
        {
            COleVariant CommandBarIndex((BYTE)i);
            VariantInit(&v);
            hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pCommandBars, L"Item", 1, CommandBarIndex);
            if (FAILED(hr)) continue;
            pCommandBar = v.pdispVal;

            VariantInit(&v);
            hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pCommandBar, L"Controls", 0);
            if (FAILED(hr)) continue;
            pCommandBarControls = v.pdispVal;

            VariantInit(&v);
            hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pCommandBarControls, L"Count", 0);
            if (FAILED(hr)) continue;
            INT NumControls = v.intVal;

            for (INT j = 1; j <= NumControls; j++)
            {
                COleVariant CommandBarControlIndex((BYTE)j);
                VariantInit(&v);
                hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pCommandBarControls, L"Item", 1, CommandBarControlIndex);
                if (FAILED(hr)) continue;
                pCommandBarControl = v.pdispVal;

                VariantInit(&v);
                hr = OLEMethod(DISPATCH_PROPERTYGET, &v, pCommandBarControl, L"Caption", 0);
                if (FAILED(hr)) continue;

                CString ControlCaption(v.bstrVal);

                if (ControlCaption.Find("MyCaption") != -1)
                {
                    OLEMethod(DISPATCH_METHOD, NULL, pCommandBarControl, L"Delete", 0);
                }

                pCommandBarControl->Release();
            }

            pCommandBar->Release();
            pCommandBarControls->Release();
        }

        OLEMethod(DISPATCH_METHOD, NULL, pWApp, L"Quit", 0);
        pCommandBars->Release();
        pWApp->Release();
    }
}

CoUninitialize();

希望这对其他有类似问题的人有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/909314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档