windows - 如何将 UAC 盾牌图标添加到标准消息框?

标签 windows winapi visual-c++ windows-xp

我想通知用户我的应用程序想要使用标准 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/

相关文章:

c++ - boost::function 参数定义不起作用

c++ - 重载 const 和非 const 转换运算符返回数组类型时出现 MSVC 错误 C2593

java - Minecraft 在 Windows 上如何具有 .exe 扩展名

c++ - 使用 CreateProcess 函数创建 "dir"命令失败,错误代码为 2

c# - 在哪里可以找到 Win32 API 中 ManagementObjectSearcher 中使用的所有表

c++ - 使用 EncodePointer/DecodePointer 的好处

c++ - C/C++ 编译器如何为某些 C 函数调用自动推断数组长度?

Windows Powershell 中的 Linux Bash Shell 命令

c - 具有多个参数的 shellexecuteEx

windows - 转到 : Raw winsock