Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Sistemas operativos > Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Mis dos céntimos, como suele decirse:

Código Delphi [-]
function IsUserAnAdmin(): boolean;
var
  hShell32: HMODULE;
  _IsUserAnAdmin: function(): bool; stdcall;
begin
  result := false;
  hShell32 := LoadLibrary('shell32.dll');
  if (hShell32 <> 0) then
  begin
    try
      _IsUserAnAdmin := GetProcAddress(hShell32, 'IsUserAnAdmin');
      if Assigned(_IsUserAnAdmin) then result := _IsUserAnAdmin();
    finally
      FreeLibrary(hShell32);
    end;
  end;
end;

La idea principal es que la función retorne "false" en lugar de "true" si no consigue cargar la librería o al cabo no consigue obtener un puntero a la función que nos interesa de la librería. También, como puede verse, liberamos en la propia función la librería que previamente cargamos. Y, como también puede verse, todo queda reducido a una función, sin necesidad de variables globales.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 04-04-2007 a las 23:52:49.
Responder Con Cita
  #2  
Antiguo 04-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Por cierto,... revisando la ayuda de la función IsUserAnAdmin() puede verse que sólo está disponible a partir de Windows XP con el Service Pack 2.

Cita:
Note This function is available through Microsoft Windows XP Service Pack 2 (SP2) and Windows Server 2003. It might be altered or unavailable in subsequent versions of Windows.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 05-04-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
Código Delphi [-]
function IsAdmin: Boolean;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
    (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;
var
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  x: 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);
      {$R-}
      for x := 0 to ptgGroups.GroupCount - 1 do
        if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
        begin
          Result := True;
          Break;
        end;
      {$R+}
      FreeSid(psidAdministrators);
    end;
    FreeMem(ptgGroups);
  end;
end;


procedure TForm1.Button4Click(Sender: TObject);
begin
   if isAdmin then
    ShowMessage('Es Administrador');
end;
Adicionalmente, tenemos este otro procedimiento en el que hemos omitido las variables globales, y seguramente no necesitemos el SP2.

Fuente Torry's
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Atributos del QRRichText rafita Impresión 4 13-04-2009 19:37:11
Atributos css Io HTML, Javascript y otros 3 13-02-2007 18:14:35
atributos diniremix API de Windows 4 21-05-2006 01:48:26
Cambiar atributos de archivos Gabriel2 Varios 2 21-11-2005 17:28:59
Atributos RichEdit jefamo Varios 2 08-07-2003 14:38:58


La franja horaria es GMT +2. Ahora son las 21:06:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi