优化大师全新一代!   魔方3系!
当前位置:首页 >> Vista应用 >> Vista开发

Vista编程:软件按钮中加入管理员权限运行盾牌图标


2010年6月24日 编辑:Vista之家 - vista123.com 人气: 评论:0

Vista之家www.vista123.com):Vista编程:软件按钮中加入管理员权限运行盾牌图标

下文分两部分,第一,如何实现软件本身运行时申请管理员权限,第二,如何在软件窗体内的按钮上面加入盾牌图标(意味着本功能需要管理员权限执行)。

一、软件自身运行时的管理员权限申请机制

在开启UAC的时候,在Win7(Windows Server 2008 R2)或者Vista(Windows Server 2008)中执行程序默认是以一种权限较低的方式执行的,但是在这种方式下,我们有些操作会失败(比如修改注册表,监听端口,往系统目录写入文件等),要实现这些操作,就需要我们以管理员权限执行程序了。

当然,只有在程序上右键,选择“以管理员执行”就可以,不过如何让程序自己自动以管理员权限来运行呢,这就需要Manifest了。

首先我们来新建个项目(懒得改名字了,就叫WindowsFormsApplication1吧)



按F5执行下(恩,貌似没有啥问题[空文档,有问题才怪... ])



然后我们添加Manifest(中文版叫“应用程序清单文件”)



下面我们看下Manifest的内容——

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="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">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC 清单选项
            如果希望更改 Windows 用户帐户控制级别,请用以下节点之一替换 
            requestedExecutionLevel 节点。
        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

          如果您希望利用文件和注册表虚拟化提供
            向后兼容性,请删除 requestedExecutionLevel 节点。
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

内容里的说明够详细了吧,只要把 asInvoker替换成requireAdministrator,我们的程序就会默认要求管理员权限运行了,该下执行试试效果。

恩,窗口弹出来了。 看下程序图标:

大功告成...

二、下面再说下怎么给程序的按钮上也加上小盾牌图标吧

这我们就需要调用Win32 API了,要调用API么,要先引用命名空间——

using System.Runtime.InteropServices;

然后调用API

[DllImport("user32.dll")]
        private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

        ///////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Enables the elevated shield icon on the given button control
        /// </summary>
        /// <param name="ThisButton">
        ///     Button control to enable the elevated shield icon on.
        /// </param>
        ///////////////////////////////////////////////////////////////////////
        private void EnableElevateIcon_BCM_SETSHIELD(Button ThisButton)
        {
            // Input validation, validate that ThisControl is not null
            if (ThisButton == null)
            {
                return;
            }

            // Define BCM_SETSHIELD locally, declared originally in Commctrl.h
            uint BCM_SETSHIELD = 0x0000160C;

            // Set button style to the system style
            ThisButton.FlatStyle = FlatStyle.System;

            // Send the BCM_SETSHIELD message to the button control
            SendMessage(new HandleRef(ThisButton, ThisButton.Handle), BCM_SETSHIELD, new IntPtr(0), new IntPtr(1));
        }

在Form上拖个Button,拖大一点哦,小了图标看不清

 

然后在Form1_Load里,用API把图标加到Button1上

private void Form1_Load(object sender, EventArgs e)
        {
            EnableElevateIcon_BCM_SETSHIELD(button1);
        }
最后执行看下效果吧!
 
 
恩?盾牌为啥有点不一样呢,上面那个图标是Windows Server 2008或者Vista上的,Win7和Windows Server 2008 R2上应该是下面这样:
有错误的地方欢迎指证喔。

Vista之家www.vista123.com),爱上网,爱上Vista123.com

      
发表评论(最新评论将在5分钟内出现
昵称:
内容:
(按Control+Enter直接提交)   点击一下,Vista问题有问必答
Vista优化大师
闪游 - 最快最强最安全的网络浏览器
windows7 优化大师
酷点,酷点桌面

Windows 下用什么杀毒软件最好最安全?
Windows 系统上网更加可靠
把您的Windows系统打造成一个铜墙铁壁之完全攻略

新手玩转Windows系统速成大法
从入门到精通,Windows听我指挥
做Windows 高手并不难,怎么学?

最便宜的装Win7的名牌电脑多少钱?
预装Win7的品牌机大PK
联想、戴尔、索尼等笔记本大促销

如何免费升级到 Windows 7?
戴尔推出免费教程教你升级Win7
安装升级Windows 7,其实就这么简单!

索尼 Win7 笔记本电脑1999元特价热销
七天免费试用?免费升级内存硬盘?
更有超多礼物发送中,不抢白不抢

Win7系统出现问题怎么办?
电脑有故障,“医生”来帮忙
我有电脑医生,修复电脑简单轻松!

热门文章
软媒旗下软件闪游,最好用的浏览器 | 魔方优化大师 | 酷点,美美的桌面 | Windows7优化大师 | Windows8优化大师 | Vista优化大师 | Vista一键还原 | 魔法IE
软媒旗下网站6655网址之家 | 9955网址大全 | IT之家 | Win8之家 | Win7之家 | Vista之家 | 乐购网 | Win8/Win7论坛