我有一个程序仍然必须针对 Windows XP (_WIN32_WINNT 0x501),因为我们的大多数客户仍在使用 XP。但是,我们已经推出 Vista 有一段时间了,现在正在插入 Windows 7 升级。为了使软件在较新的操作系统上正常工作,有几个操作需要 UAC 提升。我有提升代码工作,但希望在启动 UAC 进程的按钮上显示 UAC 图标。不幸的是,Microsoft's UAC UI document 中定义的所有选项需要 _WIN32_WINNT 0x600 或更新版本。
有没有办法让适当的 UAC 图标(Vista 和 7 使用不同的图标)显示在按钮上,同时仍然能够以 XP 为目标(不会显示图标)?我正在使用 C++,但也许能够适应 .NET 解决方案。
最佳答案
使用 Button_SetElevationRequiredState 并添加如下内容:
#if ! defined(BCM_FIRST)
#define BCM_FIRST 0x1600
#define BCM_SETSHIELD (BCM_FIRST + 0x000C)
#define Button_SetElevationRequiredState(hwnd, fRequired) \
(LRESULT)SNDMSG((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired)
#endif // #if ! defined(BCM_FIRST)
这将在 XP 和 Vista 上运行,并且可以为所有目标系统正常编译。
关于windows-7 - 如何将 UAC 盾牌图标添加到仍然必须以 XP 为目标的程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480912/