Как создать пункт меню с UAC-щитом в C ++? - PullRequest
0 голосов
/ 14 января 2019

Я хочу создать пункт меню для действия, которое потребует повышения прав.

В рекомендациях по пользовательскому интерфейсу Windows указано, что для таких действий рядом с ними должен отображаться экран UAC.

Как я могу сделать это, используя простой Windows API и C ++?

1 Ответ

0 голосов
/ 14 января 2019

Оболочка Windows предоставляет различные значки по умолчанию, среди которых также значок щита UAC.

Загрузка иконки

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) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...