remove an add-in from MS Word

219 篇文章 ¥19.90 ¥99.00
这篇博客探讨了如何编程方式从MS Word中删除加载项。即使已删除注册表条目,按钮仍然保留在加载项选项卡中。文章通过使用COM接口和CoCreateInstance方法,展示了遍历命令栏和控件,查找并删除指定标题的按钮的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

I need to programmatically remove an add-in from MS Word. I have deleted the registry entry corresponding to it, and the button is now disabled (nothing happens when you click it) and the add-in no longer appears on the list of COM Add-ins.

The button, however, remains in the Add-ins ribbon menu. How can I remove that programmatically?

 

========================================================================

 

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();

 

http://stackoverflow.com/questions/909314/how-can-i-remove-a-ms-word-add-in-button

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值