Win7编程:在按钮中加入管理员权限运行盾牌图标--转载
2012-03-27 08:44
363 查看
下文分两部分,第一,如何实现软件本身运行时申请管理员权限,第二,如何在软件窗体内的按钮上面加入盾牌图标(意味着本功能需要管理员权限执行)。
一、软件自身运行时的管理员权限申请机制
在开启UAC的时候,在Win7(WindowsServer2008R2)或者Vista(WindowsServer2008)中执行程序默认是以一种权限较低的方式执行的,但是在这种方式下,我们有些操作会失败(比如修改注册表,监听端口,往系统目录写入文件等),要实现这些操作,就需要我们以管理员权限执行程序了。当然,只有在程序上右键,选择“以管理员执行”就可以,不过如何让程序自己自动以管理员权限来运行呢,这就需要Manifest了。首先我们来新建个项目(懒得改名字了,就叫WindowsFormsApplication1吧)
按F5执行下(恩,貌似没有啥问题[空文档,有问题才怪...])
然后我们添加Manifest(中文版叫“应用程序清单文件”)
下面我们看下Manifest的内容——
内容里的说明够详细了吧,只要把asInvoker替换成requireAdministrator,我们的程序就会默认要求管理员权限运行了,该下执行试试效果。
恩,窗口弹出来了。看下程序图标:
大功告成...二、下面再说下怎么给程序的按钮上也加上小盾牌图标吧这我们就需要调用Win32API了,要调用API么,要先引用命名空间——
然后调用API
在Form上拖个Button,拖大一点哦,小了图标看不清
然后在Form1_Load里,用API把图标加到Button1上
一、软件自身运行时的管理员权限申请机制
在开启UAC的时候,在
按F5执行下(恩,貌似没有啥问题[空文档,有问题才怪...])
然后我们添加Manifest(中文版叫“应用程序清单文件”)
下面我们看下Manifest的内容——
<?xmlversion="1.0"encoding="utf-8"?> <asmv1:assemblymanifestVersion="1.0"xmlns="urn:schemas-microsoft-com:asm.v1"xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentityversion="1.0.0.0"name="MyApplication.app"/> <trustInfoxmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivilegesxmlns="urn:schemas-microsoft-com:asm.v3"> <!--UAC清单选项 如果希望更改Windows用户帐户控制级别,请用以下节点之一替换 requestedExecutionLevel节点。 <requestedExecutionLevellevel="asInvoker"uiAccess="false"/> <requestedExecutionLevellevel="requireAdministrator"uiAccess="false"/> <requestedExecutionLevellevel="highestAvailable"uiAccess="false"/> 如果您希望利用文件和注册表虚拟化提供 向后兼容性,请删除requestedExecutionLevel节点。 --> <requestedExecutionLevellevel="asInvoker"uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </asmv1:assembly>
内容里的说明够详细了吧,只要把asInvoker替换成requireAdministrator,我们的程序就会默认要求管理员权限运行了,该下执行试试效果。
恩,窗口弹出来了。看下程序图标:
大功告成...二、下面再说下怎么给程序的按钮上也加上小盾牌图标吧这我们就需要调用Win32API了,要调用API么,要先引用命名空间——
usingSystem.Runtime.InteropServices;
然后调用API
[DllImport("user32.dll")]
privatestaticexternIntPtrSendMessage(HandleRefhWnd,uintMsg,IntPtrwParam,IntPtrlParam); /////////////////////////////////////////////////////////////////////// ///<summary> ///Enablestheelevatedshieldicononthegivenbuttoncontrol ///</summary> ///<paramname="ThisButton"> ///Buttoncontroltoenabletheelevatedshieldiconon. ///</param> /////////////////////////////////////////////////////////////////////// privatevoidEnableElevateIcon_BCM_SETSHIELD(ButtonThisButton) { //Inputvalidation,validatethatThisControlisnotnull if(ThisButton==null) { return; } //DefineBCM_SETSHIELDlocally,declaredoriginallyinCommctrl.h uintBCM_SETSHIELD=0x0000160C; //Setbuttonstyletothesystemstyle ThisButton.FlatStyle=FlatStyle.System; //SendtheBCM_SETSHIELDmessagetothebuttoncontrol SendMessage(newHandleRef(ThisButton,ThisButton.Handle),BCM_SETSHIELD,newIntPtr(0),newIntPtr(1)); }
在Form上拖个Button,拖大一点哦,小了图标看不清
然后在Form1_Load里,用API把图标加到Button1上
privatevoidForm1_Load(objectsender,EventArgse) { EnableElevateIcon_BCM_SETSHIELD(button1); }
最后执行看下效果吧!
恩?盾牌为啥有点不一样呢,上面那个图标是WindowsServer2008或者Vista上的, Win7和WindowsServer2008R2上应该是下面这样:
有错误的地方欢迎指证喔。
相关文章推荐
- Win7编程:在按钮中加入管理员权限运行盾牌图标教程
- Win7编程:在按钮中加入管理员权限运行
- c++中应用程序获得管理员权限运行(图标带盾牌)
- 转载:编写C#程序让其在Win7 下以管理员权限运行
- C++中应用程序获得管理员权限运行(图标带盾牌)
- vc++MCF/C++/C中怎样让应用程序获得或以管理员权限运行 ,ShellExecuteEX编程 --- 获取管理员权限
- 在WIN7或者VISTA下自动使用管理员权限运行
- win 7 桌面右键加入“用管理员权限运行命令行”DOS“
- 给编译好的exe插入manifest,用于让exe在win7等需要管理员权限的系统下运行
- 将exe程序在Win7下以管理员权限运行的方法
- win7始终以管理员权限运行软件
- VC 编写 Vista 或 win7 下需要管理员权限运行的程序
- [转]exe在Vista或Win7下以管理员权限运行——C#与Delphi解决方案
- win7 Vista下让程序默认以管理员权限运行
- vc++MCF/C++/C中怎样让应用程序获得或以管理员权限运行 ,ShellExecuteEX编程 --- 获取管理员权限
- 【转载】c# winform 怎么给程序的按钮上也加上小盾牌图标
- VC编写vista或win7下需要管理员权限运行的程序
- 利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序。win7会有UAC弹窗
- 编译完成的工程在WIN7或者VISTA下自动使用管理员权限运行
- Win7下要求以管理员权限运行程序