windows-7 - 如何将 UAC 盾牌图标添加到仍然必须以 XP 为目标的程序中?

标签 windows-7 windows-vista windows-xp icons uac

我有一个程序仍然必须针对 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/

相关文章:

windows-7 - 在Windows OS上递归搜索一个字符串

c# - WPF 程序 - 程序无效 win32

matlab - 使用 MATLAB 的绘图功能作为 Fortran 程序的交互部分

c++ - 以编程方式禁用/启用网络接口(interface)

Java 小程序在 IE9 中不工作

java - 与 "Address in use: JVM_Bind"相关的一些问题

.net - .NET 的哪些部分需要管理权限才能执行?

c# - 捕获所有 Windows 7 触摸事件,而不仅仅是在我的窗体具有焦点时捕获

windows-7 - Python 3 - "ImportError: No module named …"

c# - 服务可以写入注册表 [HKLM]