我想通知用户我的应用程序想要使用标准 MessageBox
启动提升的进程。有没有办法在不重新实现 MessageBox
的情况下实现这一目标?
例如,对于标准按钮,您可以发送 BCM_SETSHIELD
消息。消息框有类似的东西吗?
最佳答案
为了让盾牌图标出现在系统提供的消息对话框的按钮上,您需要处理来自对话框的回调。
例如,我将用 TaskDialogIndirect()
来说明Vista 中引入的 API。
基本对话框允许您指定主图标,但不能指定对话框按钮的盾牌图标。为此,您需要提供 callback function响应 TDN_CREATED
通知。
该回调可能如下所示:
HRESULT CALLBACK TaskDialogCallbackProc(
HWND hwnd,
UINT uNotification,
WPARAM wParam,
LPARAM lParam,
LONG_PTR dwRefData
)
{
if (TDN_CREATED == uNotification)
{
SendMessage(
hwnd,
TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE,
ID_FOR_MY_BUTTON_SPECIFIED_IN_TASKDIALOGCONFIG_STRUCT,
1
);
}
return S_OK;
}
魔法包含在 TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE
中消息。
据我所知,这是您旨在实现所需效果的方式。
关于windows - 如何将 UAC 盾牌图标添加到标准消息框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350721/