Code: Select all
for (cItem = 0; cItem < pMenu->cItems; cItem++) {
...
}
Nevěřím, že by TrackPopupMenu bylo ve WinXP implementováno nějak výrazně odlišně, takže se bojím, že zde nic nevykoumáme

Na druhou stranu GetMenuItemInfo s fByPosition == true funguje čistě na způsob pMenu->cItems[uItem];
Je divné, že GetMenuItemInfo vrátí ERROR_INVALID_MENU_HANDLE, protože toto je možné vrátit jen pro hMenu jako takové a pokud předchozí položky fungovaly, tak hMenu je stále platné (neplatná kombinace hMenu a uItem vrací ERROR_MENU_ITEM_NOT_FOUND).
Pokud jsem to pochopil špatně a GetMenuItemInfo vrací ERROR_INVALID_MENU_HANDLE až pro hMenu LiveMeshího submenu, pak je pravda, že jedna z kontrol platnosti hMenu je nějaká kontrola práv...
Mimochodem: Je zajímavé, kolik je ve zdrojáku poznámek ve stylu "Kvůli programu ABC je třeba zachovat tenhle bug, protože to jinak nebude fungovat." spojeno jen s menu.