Подтвердить что ты не робот

IContextMenu:: QueryContextMenu возвращает не соответствующее меню

Ярлык сетевого подключения (Ethernet, Wi-Fi и т.д.) имеет различные контекстные меню в зависимости от состояния подключения (подключен/отключен). Я использую следующий код (Delphi) для извлечения и отображения этого меню.

var pidl, child: PItemIdList;
    pFolder: IShellFolder;
    pMenu: IContextMenu;
    menu: HMENU;
begin
  SHParseDisplayName(PChar('%USERPROFILE%\Desktop\eth0.lnk'), nil, pidl, 0, PDWORD(nil)^);
  SHBindToParent(pidl, IID_IShellFolder, Pointer(pFolder), child);
  CoTaskMemFree(pidl);
  pFolder.GetUIObjectOf(0, 1, child, IID_IContextMenu, nil, pMenu);
  menu := CreatePopupMenu;
  pMenu.QueryContextMenu(menu, 0, 0, $7fff, CMF_NORMAL);
  TrackPopupMenuEx(menu, TPM_LEFTBUTTON, 0, 0, Handle, nil);
  DestroyMenu(menu);
end;

Но после изменения состояния подключения я продолжаю получать старое меню. И после перезагрузки моего приложения тоже. Иногда после перезагрузки моего приложения я получаю правильное меню.

Почему это происходит и как его исправить?

ОС: обе 32- и 64-разрядные Windows 7/8/10

Код С++:

PIDLIST_ABSOLUTE pidl;
if SUCCEEDED(SHParseDisplayName(L"%USERPROFILE%\\Desktop\\eth0.lnk", NULL, &pidl, 0, NULL))
{
  PCUITEMID_CHILD child;
  CComQIPtr<IShellFolder> pFolder;
  if SUCCEEDED(SHBindToParent(pidl, IID_IShellFolder, (void**)&pFolder, &child))
  {
    CComQIPtr<IContextMenu> pMenu;
    if SUCCEEDED(pFolder->GetUIObjectOf(0, 1, &child, IID_IContextMenu, NULL, (void**)&pMenu))
    {
      HMENU menu = CreatePopupMenu();
      if SUCCEEDED(pMenu->QueryContextMenu(menu, 0, 0, 0x7fff, CMF_NORMAL))
        TrackPopupMenuEx(menu, TPM_LEFTBUTTON, 0, 0, hWnd, NULL);
      DestroyMenu(menu);
    }
  }
  CoTaskMemFree(pidl);
}

добавить: Возможно, это ошибка Windows. Любые примеры из Интернета и файловых менеджеров, таких как Explorer (XYPlorer, Explorer ++ и т.д.), Имеют одинаковую проблему. Теперь я вижу ту же проблему в Windows 10 Explorer. Если вы нажмете ярлык "Drag & Drop" на сетевое подключение "Панель управления\Все элементы панели управления\Центр управления сетью и общим доступом\Изменить настройки адаптера\имя_компьютера" на рабочем столе, вы увидите ту же проблему.

4b9b3361