為Delphi程序增加UAC功能(管理員身份運行exe)
相關資料:http://bbs.csdn.net/topics/320071356#
操作方法:
在Source\VCL目錄下應該有這樣兩個文件sample.manifest和WindowsXP.rc,可以通過如下方法處理:
1.sample.manifest處理
①打開“sample.manifest”
②修改sample.manifest把其中的
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
改為
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
③另存為requireAdmin.manifest
2.WindowsXP.rc處理
①打開WindowsXP.rc
②將內容編輯成
1 24 "requireAdmin.manifest"
③並另存為requireAdmin.rc
3.編譯資源文件
①新建一個文件夾
②復制brcc32.exe、rw32core.dll、requireAdmin.manifest、requireAdmin.rc到文件夾中。
③新建一個TXT,寫入“brcc32 requireAdmin.rc”,保存后改名為“requireAdmin.bat”
④雙擊requireAdmin.bat
4.放置資源文件
①復制“requireAdmin.res”
②放到“$(BDS)\lib”目錄下
5.設置主題
①打開工程
②打開Project菜單下的Options...菜單項,將Application下面的"Enable runtime themes"的勾選去掉.
6.引用資源
①打開Project菜單下的View Source菜單項
②
{$R *.res}
下面添加一行
{$R requireAdmin.res}
7.重新編譯即可。
另一種方法:
相關資科:
http://bbs.csdn.net/topics/190003519
http://www.cppblog.com/SpringSnow/archive/2009/04/22/80719.html
//以管理員身份運行
procedure RunAsAdmin(hWnd: HWND; aFile: string; aParameters: string);
var
sei: TShellExecuteInfoA;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize := SizeOf(sei);
sei.Wnd := hWnd;
sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
sei.lpVerb := 'runas';
sei.lpFile := PChar(aFile);
sei.lpParameters := PChar(aParameters);
sei.nShow := SW_SHOWNORMAL;
if not ShellExecuteEx(@sei) then
RaiseLastOSError;
end
//把按鈕設置成需要管理員運行樣式,也就是加個圖標到按鈕上
procedure SetElevationRequireState(aControl: TWinControl; Requiered: Boolean);
const
BCM_FIRST = $1600;//Button control messages
BCM_SETSHILED = BCM_FIRST + $000C;
var
lRequired: Integer;
begin
lRequired := Integer(Requiered);
SendMessage(aControl.Handle, BCM_SETSHIELD, 0, lRequired);
end;