2009-05-26 20 views
0

プログラムでMS Wordからアドインを削除する必要があります。私はそれに対応するレジストリエントリを削除し、ボタンが無効になり(クリックすると何も起きません)、アドインはCOMアドインのリストに表示されなくなります。MS Wordアドインボタンを削除するにはどうしたらいいですか?

ただし、ボタンはアドインリボンメニューに残ります。プログラムでそれを削除するにはどうすればよいですか?

答えて

1

1週間後に回答がありません。怠惰な質問をすることはできますか?

私は現在、CodeProjectの解決策を使用しています。私のコードはうまくいくようですが、はまだテストされていません

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

これは、同様の問題を持つ他の人に役立つことを願っています。

関連する問題