2009-05-26 15 views
0

Ich muss ein Add-In programmgesteuert aus MS Word entfernen. Ich habe den entsprechenden Registrierungseintrag gelöscht, und die Schaltfläche ist nun deaktiviert (es passiert nichts, wenn Sie darauf klicken) und das Add-In wird nicht mehr in der Liste der COM-Add-Ins angezeigt.Wie kann ich eine MS Word-Add-In-Schaltfläche entfernen?

Die Schaltfläche bleibt jedoch im Menüband der Add-Ins. Wie kann ich das programmatisch entfernen?

Antwort

1

Keine Antworten nach einer Woche. Du kannst ihm eine faule Frage stellen, oder?

Ich verwende derzeit eine Lösung von CodeProject. Mein Code scheint zu funktionieren, aber wurde noch nicht richtig getestet.

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

Hoffe das hilft anderen mit einem ähnlichen Problem.

Verwandte Themen