我想为需要提升的操作创建菜单项。
Windows UI 指南指出,此类操作应在其旁边显示 UAC 盾牌。
我如何使用普通的 Windows API 和 C++ 来做到这一点?
最佳答案
Windows shell 确实提供了各种默认图标,其中也包括 UAC-shield 图标。
加载图标
SHSTOCKICONINFO ssii = {};
ssii.cbSize = sizeof(ssii);
SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_SMALLICON, &ssii);
这为您提供了一个 HICON
,但是 SetMenuItemBitmaps
需要一个 HBITMAP
,因此需要转换 HICON
:
ICONINFOEX iconInfo = {};
iconInfo.cbSize = sizeof(iconInfo);
GetIconInfoEx(ssii.hIcon, &iconInfo);
auto bitmap = (HBITMAP)CopyImage(iconInfo.hbmColor, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
最后,设置图标:
SetMenuItemBitmaps(hMenu, YOUR_MENU_ITEM_COMMAND, MF_BYCOMMAND, bitmap, bitmap);
清理:
DestroyIcon(ssii.hIcon);
bitmap
需要在菜单被销毁后销毁(使用 DeleteObject(bitmap);
),或者在应用程序关闭时被清除,如中所述CopyImage(MSDN)和 SetMenuItemBitmaps(MSDN) .
关于c++ - 如何在 C++ 中使用 UAC-shield 创建菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54178446/