HRESULT CExplorerCommandStateHandler_RegisterUnRegister()

in Docs-ContextMenuSample/ExplorerCommandVerb/ExplorerCommandStateHandler.cpp [113:149]


HRESULT CExplorerCommandStateHandler_RegisterUnRegister(bool fRegister)
{
    HRESULT hr;
    if (fRegister)
    {
        // register a create process based verb. this could also be a delegate execute
        // or drop target verb
        CRegisterExtension registerCreateProcess(CLSID_NULL);
        hr = registerCreateProcess.RegisterCreateProcessVerb(c_szProgID, c_szVerbName, L"notepad.exe %1", c_szVerbDisplayName);
        if (SUCCEEDED(hr))
        {
            hr = registerCreateProcess.RegisterVerbAttribute(c_szProgID, c_szVerbName, L"NeverDefault");
            if (SUCCEEDED(hr))
            {
                // now register the command state handler, this computes if this verb is enabled or not

                CRegisterExtension re(__uuidof(CExplorerCommandStateHandler));

                hr = re.RegisterInProcServer(c_szVerbDisplayName, L"Apartment");
                if (SUCCEEDED(hr))
                {
                    hr = re.RegisterExplorerCommandStateHandler(c_szProgID, c_szVerbName);
                }
            }
        }
    }
    else
    {
        // best effort
        CRegisterExtension registerCreateProcess(CLSID_NULL);
        hr = registerCreateProcess.UnRegisterVerb(c_szProgID, c_szVerbName);

        CRegisterExtension re(__uuidof(CExplorerCommandStateHandler));
        hr = re.UnRegisterObject();
    }
    return hr;
}