之前講的Windows 7兼容性Webcast中我做了一個Shield Icon的Demo,這個圖標就是表示點擊該按鈕後執行的是一個要求提升權限的操作,借此寫一下它的主要實現過程以及把Webcast中的Demo放出來。
其實主要實現是調用了user32.dll中的方法給現有按鈕控件貼上一個小圖標,可以使用下面方法來實現:
[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));
}
然後直接將按鈕傳入該方法就可以實現效果:
EnableElevateIcon_BCM_SETSHIELD(button2);
實現效果如下:
注意:這個圖標不能將要運行的程序提升權限運行,僅僅是個樣子貨,呵呵。
Windows 7 兼容性Webcast Demo 下載
然後是icacls這個工具,使用Vista的用戶可以下載下來用用看,測試命令如下:
icacls c:\windows
然後得到如下結果:
C:\Users\WilsonWu>icacls c:\windows
c:\windows NT SERVICE\TrustedInstaller:(F)
NT SERVICE\TrustedInstaller:(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(M)
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
BUILTIN\Administrators:(M)
BUILTIN\Administrators:(OI)(CI)(IO)(F)
BUILTIN\Users:(RX)
BUILTIN\Users:(OI)(CI)(IO)(GR,GE)
CREATOR OWNER:(OI)(CI)(IO)(F)
Successfully processed 1 files; Failed processing 0 files
icacls 工具下載
本文配套源碼