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;
}