Secondo le linee guida della UAC, se in un programma un pulsante determina l'esecuzione di attivà che richiedono i privilegi di amministratore, esso deve contenere l'icona di uno scudo:
Per inserire quest'icona nei pulsanti di un programma .NET ci sono due possibilità: utilizzare un'immagine bitmap dello scudo oppure, più elegantemente, creare un controllo che estende la classe Button e utilizza l'API di Windows Vista per mostrare l'icona in questione:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace System.Windows.Forms
{
public class ShieldButton : Button
{
private const uint BCM_SETSHIELD = 0x0000160C;
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg,
IntPtr wParam, IntPtr lParam);
public ShieldButton()
: base()
{
this.FlatStyle = FlatStyle.System;
this.ShowShield = true;
}
private bool _showShield;
public bool ShowShield
{
get { return _showShield; }
set
{
_showShield = value;
SendMessage(new HandleRef(this, this.Handle), BCM_SETSHIELD,
IntPtr.Zero, new IntPtr(_showShield ? 1 : 0));
}
}
}
}
Il passo successivo è fare in modo che, alla pressione del pulsante, appaia la schermata della UAC che chiede conferma prima di proseguire con l'operazione... Ma di questo mi occuperò in un altro post...