By using IDynamicMenu and kSetMenuCustomizationPrefsCmdBoss, I was able to change the right-click menu layout depending on whether the Shift key is pressed or not.
// SDK Sample DynMnu.
//DynMnu.fr
// Placeholder for dynamic menu entries
kDynMnuPlaceholderActionID, // ActionID (kInvalidActionID for positional entries)
"RtMouseDefault", // Menu Path.
0, // Menu Position placeholder.
kSDKDefIsDynamicMenuFlag, // Flag for dynamic menu
kDynMnuStaticMenuActionID,
"RtMouseDefault",
0,
kSDKDefIsNotDynamicMenuFlag,
// DynMnuDynamicMenu.cpp
// DynMnuDynamicMenu::RebuildMenu
InterfacePtr<ICommand> iCommand(CmdUtils::CreateCommand(kSetMenuCustomizationPrefsCmdBoss));
InterfacePtr<IMenuCustomizationData> iMenuCustomizationData(iCommand, UseDefaultIID());
if (IsShiftKeyPressed() == kTrue) // #include "KeyStates.h
{
if (iMenuCustomizationData->IsMenuActionHidden(kDynMnuStaticMenuActionID) == kTrue)
{
iMenuCustomizationData->ShowMenuAction(kDynMnuStaticMenuActionID);
}
}
else
{
if (iMenuCustomizationData->IsMenuActionHidden(kDynMnuStaticMenuActionID) == kFalse)
{
iMenuCustomizationData->HideMenuAction(kDynMnuStaticMenuActionID);
}
}
CmdUtils::ProcessCommand(iCommand);
By setting kDynMnuStaticMenuActionID as the script's action ID, you can also register the script.