Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Sistemas operativos > Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2007
Avatar de yarielrs
yarielrs yarielrs is offline
Miembro
 
Registrado: mar 2007
Ubicación: Cienfuegos, Cuba
Posts: 16
Poder: 0
yarielrs Va por buen camino
Question Atributos de usuario

Hola a todos:

Necesito saber como desde mi programa Delphi puedo saber cual es el atributo (me refiero a lo de si es administrado, usuario, usuario avanzado, etc.) del usuario activo o de un determinado usuario. Si alguien sabe como hacerlo o donde puedo encontrar información sobre el tema hágamelo saber.


Gracias de antemano...
Responder Con Cita
  #2  
Antiguo 04-04-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Hola yarielrs, bienvenido
Aquí seguro lo que encuentras.

PD: Lee las normas del foro.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 04-04-2007
Avatar de yarielrs
yarielrs yarielrs is offline
Miembro
 
Registrado: mar 2007
Ubicación: Cienfuegos, Cuba
Posts: 16
Poder: 0
yarielrs Va por buen camino
Cita:
Empezado por ArdiIIa
Hola yarielrs, bienvenido
Aquí seguro lo que encuentras.

PD: Lee las normas del foro.
Hola ArdiIIa:
Gracias por tu mensaje pero todo lo que sale es sobre la API GetUserName, lo que me devuelve es el nombre del usuario pero lo que yo busco es que cuando yo ejecute mi aplicación esta sepa si se esta ejecutando en un usuario con privilegios de administrador o no, en otra palabras, que me diga si el usuario activo pertenece o no al grupo de usuario administradores esto corriedo mi programa en WinXP...
Responder Con Cita
  #4  
Antiguo 04-04-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por yarielrs
Hola ArdiIIa:
lo que yo busco es que cuando yo ejecute mi aplicación esta sepa si se esta ejecutando en un usuario con privilegios de administrador o no, en otra palabras, que me diga si el usuario activo pertenece o no al grupo de usuario administradores esto corriedo mi programa en WinXP...

Te recomendé primero buscar, pensando que alguno de los genios que tenemos en el foro ya habían puesto su pedazo de código, pero lo cierto es que he buscado sobre el asunto y no he visto nada, así que lo pongo yo....
Código Delphi [-]
var
  Form1: TForm1;
  hShell32: HMODULE;
 _IsUserAnAdmin: function(): BOOL; stdcall;

implementation

{$R *.dfm}


function IsUserAnAdmin: Boolean;
const
ModName = 'shell32.dll';
begin
  if Assigned(_IsUserAnAdmin) then
    Result := _IsUserAnAdmin()
  else
  begin
    Result := True;
    if hShell32 = 0 then
      hShell32 := LoadLibrary(ModName);
    if hShell32 <> 0 then
    begin
      _IsUserAnAdmin := GetProcAddress(hShell32, 'IsUserAnAdmin'); 
      if Assigned(_IsUserAnAdmin) then
        Result := _IsUserAnAdmin();
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if isUserAnAdmin then
  ShowMessage('Administrador')
  Else
  ShowMessage('Usuario normal');


end;

Espero que te sea de utilidad.
Fuente CodeGear
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 04-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
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
  #6  
Antiguo 04-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
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
  #7  
Antiguo 05-04-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
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
  #8  
Antiguo 05-04-2007
Avatar de yarielrs
yarielrs yarielrs is offline
Miembro
 
Registrado: mar 2007
Ubicación: Cienfuegos, Cuba
Posts: 16
Poder: 0
yarielrs Va por buen camino
Hola ArdiIIa, ya probé tu código y me funciona a las mil maravillas, por lo que te doy las gracias a ti y dec que también puso su granito de arena.
Responder Con Cita
Respuesta



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 11:03:56.


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