Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de 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 18-08-2016
cozina cozina is offline
Miembro
 
Registrado: Mar 2008
Posts: 18
Poder: 0
cozina Va por buen camino
¿Cómo saber si se ejecuta programa en modo administrador?

Hola a todos, quisiera saber si hay alguna forma de conseguir saber si mi programa se está ejecutando en modo administrador o como usuario normal. ¿Es posible?
Teniendo en cuenta que puede ejecutarse en distintas versiones de windows.
Muchas gracias.
Responder Con Cita
  #2  
Antiguo 18-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.567
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Hace tiempo que ocupo el siguiente código, a ver si te sirve a ti también:

Código Delphi [-]

uses
  Windows;

const
 SECURITY_NT_AUTHORITY : TSIDIdentifierAuthority = ( Value : ( 0, 0, 0, 0, 0, 5 ) );
 SECURITY_BUILTIN_DOMAIN_RID = $00000020;
 DOMAIN_ALIAS_RID_ADMINS = $00000220;
 DOMAIN_ALIAS_RID_USERS = $00000221;
 DOMAIN_ALIAS_RID_GUESTS = $00000222;
 DOMAIN_ALIAS_RID_POWER_USERS = $00000223;

function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID; var IsMember: BOOL): BOOL; stdcall; external advapi32;

// http://stackoverflow.com/questions/6...dministrator-r
function IsUserAdmin : Boolean;
var
  b: BOOL;
  AdministratorsGroup: PSID;
begin
  {
    This function returns true if you are currently running with admin privileges.
    In Vista and later, if you are non-elevated, this function will return false 
    (you are not running with administrative privileges).
    If you *are* running elevated, then IsUserAdmin will return true, as you are 
    running with admin privileges.

    Windows provides this similar function in Shell32.IsUserAnAdmin. 
    But the function is deprecated, and this code is lifted
    from the docs for CheckTokenMembership:
      http://msdn.microsoft.com/en-us/library/aa376389.aspx
  }

  {
    Routine Description: This routine returns TRUE if the callers
    process is a member of the Administrators local group. Caller is NOT
    expected to be impersonating anyone and is expected to be able to
    open its own process and process token.
      Arguments: None.
      Return Value:
        TRUE - Caller has Administrators local group.
        FALSE - Caller does not have Administrators local group.
  }
  b := AllocateAndInitializeSid(
      SECURITY_NT_AUTHORITY,
      2, //2 sub-authorities
      SECURITY_BUILTIN_DOMAIN_RID,  //sub-authority 0
      DOMAIN_ALIAS_RID_ADMINS,      //sub-authority 1
      0, 0, 0, 0, 0, 0,             //sub-authorities 2-7 not passed
      AdministratorsGroup);
  if (b) then
  begin
    if not CheckTokenMembership(0, AdministratorsGroup, b) then
      b := False;
      FreeSid(AdministratorsGroup);
  end;

  Result := b;
end;

Ejemplo de uso:

Código Delphi [-]
if IsUserAdmin() then
begin
  // Whatever
end;

En el hilo de Stackoverflow donde lo encontré puedes acaso obtener más información.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 18-08-2016
cozina cozina is offline
Miembro
 
Registrado: Mar 2008
Posts: 18
Poder: 0
cozina Va por buen camino
Hola, funciona perfectamente, muchísimas gracias. Ustedes sí que saben.

No me sale nada para poder darle una puntuación o un gracias virtual, seguramente no tengo permisos.
Responder Con Cita
  #4  
Antiguo 18-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.567
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Cita:
Empezado por cozina Ver Mensaje
Hola, funciona perfectamente, muchísimas gracias. Ustedes sí que saben.

No me sale nada para poder darle una puntuación o un gracias virtual, seguramente no tengo permisos.
Bueno. Vaya el mérito en este caso a quien respondió a la questión en StackOverflow: esta vez sí que me limité a copiar y pegar, prácticamente...
__________________
David Esperalta
www.davidesperalta.com
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
Saber lo que se ejecuta en Windows elrayo76 Varios 4 08-01-2015 17:09:57
abrir aplicacion delphi modo administrador en win7 darkbits Varios 1 28-08-2012 02:34:10
Saber cuando se ejecuta EXPLORER.EXE marceloalegre Varios 5 06-06-2005 17:58:07
No se ejecuta el programa torito Varios 2 19-05-2005 19:16:57
Como Saber Si Una Tabla Esta Bloqueado En Modo Escritura RMHTECTH Tablas planas 1 18-10-2004 20:13:00


La franja horaria es GMT +2. Ahora son las 03:01:20.


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