http://delphi.about.com/od/delphitips2007/qt/is_win_admin.htm
建立一個 unit
- unit WindowsUser;
- interface
- uses Windows;
- // 檢查目前登入的使用者的系統管理員時, 則傳回 true
- function IsWindowsAdmin: Boolean;
- implementation
- const
- SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)) ;
- const
- SECURITY_BUILTIN_DOMAIN_RID = $00000020;
- DOMAIN_ALIAS_RID_ADMINS = $00000220;
- function IsWindowsAdmin: Boolean;
- var
- hAccessToken: THandle;
- ptgGroups: PTokenGroups;
- dwInfoBufferSize: DWORD;
- psidAdministrators: PSID;
- g: Integer;
- bSuccess: BOOL;
- begin
- Result := False;
- bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken) ;
- if not bSuccess then
- begin
- if GetLastError = ERROR_NO_TOKEN then
- bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken) ;
- end;
- if bSuccess then
- begin
- GetMem(ptgGroups, 1024) ;
- bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize) ;
- CloseHandle(hAccessToken) ;
- if bSuccess then
- begin
- AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators) ;
- for g := 0 to ptgGroups.GroupCount - 1 do
- if EqualSid(psidAdministrators, ptgGroups.Groups[g].Sid) then
- begin
- Result := True;
- Break;
- end;
- FreeSid(psidAdministrators) ;
- end;
- FreeMem(ptgGroups) ;
- end;
- end;
- end.
然後在自己的專案中 use 這個 unit, 就可使用這個函式了
- if IsWindowsAdmin then
- Showmessage('系統管理者')
- else
- Showmessage('一般使用者');
沒有留言:
張貼留言