您的位置:首页 > 其它

remove an add-in from MS Word

2011-11-16 16:08 369 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐