可以给Vista/7程序中的按钮添加一个“盾牌图标”,以表示点击这个按钮后它所做的操作需要“提权”。 “盾牌图标” :
需要在“程序清单”中指出程序使用的是Vista/7的“控件样式”,否则它不会显示“盾牌图标”因为以前的Windows版本没有UAC这个概念。
程序的头文件中添加
// Add support for Vistaenabled common-controls
#ifdef_UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0'processorArchitecture='x86' publicKeyToken='6595b64144ccf1df'language='*'\"")
#elif defined _M_IA64
#pragmacomment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64'publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragmacomment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0'processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'language='*'\"")
#else
#pragmacomment(linker,"/manifestdependency:\"type='win32'name='Microsoft.Windows.Common-Controls' version='6.0.0.0'processorArchitecture='*' publicKeyToken='6595b64144ccf1df'language='*'\"")
#endif
#endif
或者在程序的“程序清单”资源中添加
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
指定好了Vista/7的控件样式以后就能够在程序中显示“盾牌图标”了。
有两种方法:
1. 调用Button_SetElevationRequiredState宏
它有两个参数:第一个是窗口句柄(一般是按钮的窗口句柄)第二个是一个BOOL值(TRUE为显示“盾牌图标”FALSE为不显示)
2. 向窗口发送BCM_SETSHIELD消息
实际上Button_SetElevationRequiredState就是通过发送BCM_SETSHIELD消息来控制的。
它的wParam参数留空,lParam参数为BOOL(TRUE为显示“盾牌图标”FALSE为不显示)
还有可以使用一个函数来得到“盾牌图标” 来自己进行绘制。它就是SHGetStockIconInfo它的原型为:
HRESULT SHGetStockIconInfo( SHSTOCKICONID siid, UINT uFlags, __inout SHSTOCKICONINFO *psii);