Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-08-2005
Avatar de DarkDrakon
DarkDrakon DarkDrakon is offline
Miembro
 
Registrado: abr 2005
Ubicación: Tacna - Peru
Posts: 46
Poder: 0
DarkDrakon Va por buen camino
Talking A ver si ah alguien le sirve y lo mejora...

Lo que hace este componente es que el programa que quiera se ejecute al iniciar Windows, haciendo una llamada al "Programa de Configuracion del Sistema" y dandole una clave...

Código Delphi [-]
unit ExecWin;
interface
uses
Windows, Messages, SysUtils, Classes, Registry;
type
TExecWin = class(tcomponent)
private
NombreClave : String;
NombreExec : String;
ProximaVez : Boolean;
Usuario : Boolean;
protected
public
Constructor Create(AOwner: TComponent); override;
Function AppInReg : Boolean;
Function AddAppReg : Boolean;
Function DelAppReg : Boolean;
published
Property NombrePrograma : String Read NombreClave Write NombreClave;
Property NombreEjecutable : String Read NombreExec Write NombreExec;
Property SoloUnaVez : Boolean Read ProximaVez Write ProximaVez;
Property SoloUsuario : Boolean Read Usuario Write Usuario;
end;
procedure Register;
implementation
Constructor TExecWin.Create(AOwner: TComponent);
Begin
Inherited;
AddAppReg;
End;
Function TExecWin.AppInReg : Boolean;
Var
Reg : TRegistry;
RegInfo : TRegDataInfo;
Clave : String;
Valores : TStringList;
I : Integer;
Begin
Result:=False;//No está en el Registro
Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
If ProximaVez Then Clave := Clave+'Once';
Reg:=TRegistry.Create;
If Not(Usuario) Then Reg.RootKey := HKEY_LOCAL_MACHINE;
If Not(Reg.KeyExists(Clave)) Then//comprobar prexistencia de clave
Begin
Reg.Free;
Exit;
End;
Reg.OpenKey(Clave,False);//existe, por tanto podemos abrirla.
Valores := TStringList.Create;
Reg.GetValueNames(Valores);//Obtenemos una lista de los Nombres de los valores de la clave
For I:=0 To (Valores.Count-1) Do
Begin
If Reg.GetDataInfo( Valores[i], RegInfo) Then
Begin
If (RegInfo.RegData = rdString) Then
Begin
If Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) Then
Begin
Result:=True;
Break;
End;
End;
End
Else
Valores[i]:='';
End;//For
Valores.Free;
Reg.Free;
End;
Function TExecWin.AddAppReg : Boolean;
Var
Reg : TRegistry;
Clave : string;
Begin
Result:=False;
If (NombreClave='') Or (NombreExec='') Then
Exit;
If AppInReg Then
Exit;
Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
If ProximaVez Then Clave := Clave+'Once';
Reg:=TRegistry.Create;
If Not(Usuario) Then Reg.RootKey := HKEY_LOCAL_MACHINE;
If Not(Reg.KeyExists(Clave)) Then
Begin
Reg.Free;
Exit;
End;
Reg.OpenKey(Clave,False);
Reg.WriteString(NombreClave,NombreExec);
Reg.Free;
Result:=True;
End;
Function TExecWin.DelAppReg : Boolean;
Var
Reg : TRegistry;
RegInfo : TRegDataInfo;
Clave : string;
Valores : TStringList;
I : integer;
Begin
Result:=False;
If Not(AppInReg) Then
Exit;
If (NombreClave='') Or (NombreExec='') Then
Exit;
Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
If ProximaVez Then Clave := Clave+'Once';
Reg:=TRegistry.Create;
If Not(Usuario) Then Reg.RootKey := HKEY_LOCAL_MACHINE;
If Not(Reg.KeyExists(Clave)) Then
Begin
Reg.Free;
Exit;
End;
Reg.OpenKey(Clave,False);
Valores := TStringList.Create;
Reg.GetValueNames(Valores);//Obtenemos una lista de los Nombres de los valores de la clave
For I:=0 To (Valores.Count-1) Do
Begin
If Reg.GetDataInfo( Valores[i], RegInfo) Then
Begin
If (RegInfo.RegData = rdString) Then
Begin
If Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) Then
Begin
Reg.DeleteValue( Valores[i] );
Result:=True;
End;
End;
End;
End;
Valores.Free;
Reg.Free;
End;
procedure Register;
begin
RegisterComponents('drakon', [TExecWin]);
end;
end.

su uso es sencillo ::

{PARA SABER SI ESTA INSTALADO ALGUN PROGRAMA}
Código Delphi [-]
ExecWi1.NombreEjecutable:='Notepad.exe';
If ExecWin1.AppInReg Them
ShowMessage('SI')
Else
ShowMessage('NO');
{PARA INSTALAR UN PROGRAMA}
ExecWin1.NombrePrograma:='Block de Notas';//Como quiere que se visualice
ExecWin1.NombreEjecutable:='C:\windows\Notepad.exe';//Direccion donde se encuentra el Ejecutable
ExecWin1.SoloUnaVez:=False;{queremos que se ejecute siempre}
ExecWin1.SoloUsuario:=False;{que se ejecute con cualquier usuario}
If ExecWin1.AddAppReg Then
ShowMessage('Ok, se ha instalado correctamente')
Else
ShowMessage('NO, Error en la instalación, posiblemente ya esté instalado...');
{PARA DESINSTALAR UN PROGRAMA}
ExecWin1.NombreEjecutable:='Notepad.exe';//Como esta siendo Visualizado
If ExecWin1.DelAppReg Then
ShowMessage('Ok, se ha Desinstalado correctamente')
Else
ShowMessage('NO, Error en la Desinstalación, posiblemente ya fuese desinstalado...');
Solo ke un posee ciertas dificultades que ya veran....
__________________
Dark Drakon::


"Ego sum Draco dormiens ... Aut insanit Draco, aut Versus facit..."

Responder Con Cita
  #2  
Antiguo 27-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Etiqueta por favor, esta dificil de leer. Como es codigo delphi , en vez de usar [code] usa [delphi]*
=====
*Deberia haber un ejemplo con etiqueta delphi
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 27-08-2005 a las 01:41:15. Razón: Sugerencia Moderadores
Responder Con Cita
  #3  
Antiguo 27-08-2005
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,

Cita:
Empezado por DarkDrakon
Solo ke un posee ciertas dificultades que ya veran....
¿A qué te refieres? ¿Es necesario que probemos el componente? ¿No podrías adelantarnos qué te hace concluir que posee ciertas dificultades lo que tratas de llevar a cabo? ¿Se trata de una adivinanza?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 27-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Que dificil es seguir el código sin identación !!!

pero no veo donde estan las dificultades??

es un programa simple que busca, agrega y borra una clave en el registro.

Esta muy bien y puede ser muy util para la muchos, pero no veo la dificultad.

Para que sea más facil su uso, podrías agregarle que tome el nombre del programa automáticamente Application.ExeName, aunque no se como se va a comportar en tiempo de diseño
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 27-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Releyendo el hilo, me parecio como que lo podias tomar que te estamos tirando pálidas , espero que no lo tomes a mal, todo lo contrario esta muy bueno que sigas aportando cosas asi.
__________________
[Crandel]
Responder Con Cita
  #6  
Antiguo 27-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Disculpa el Plagio, pero se me hace un poco dificil de leer
Código Delphi [-]
 unit ExecWin;
 interface
uses
  Windows, Messages, SysUtils, Classes, Registry;
type
  TExecWin = class(tcomponent)
private
  NombreClave : String;
  NombreExec : String;
  ProximaVez : Boolean;
  Usuario : Boolean;
public
  Constructor Create(AOwner: TComponent); override;
  Function AppInReg : Boolean;
  Function AddAppReg : Boolean;
  Function DelAppReg : Boolean;
published
  Property NombrePrograma : String Read NombreClave Write NombreClave;
  Property NombreEjecutable : String Read NombreExec Write NombreExec;
  Property SoloUnaVez : Boolean Read ProximaVez Write ProximaVez;
  Property SoloUsuario : Boolean Read Usuario Write Usuario;
end;
  procedure Register;
implementation

Constructor TExecWin.Create(AOwner: TComponent);
Begin
  Inherited;
  AddAppReg;
End;
Function TExecWin.AppInReg : Boolean;
Var
  Reg : TRegistry;
  RegInfo : TRegDataInfo;
  Clave : String;
  Valores : TStringList;
  I : Integer;
Begin
  Result:=False;//No está en el Registro
  Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
  If ProximaVez Then Clave := Clave+'Once';
  Reg:=TRegistry.Create;
  If Not(Usuario) Then Reg.RootKey := HKEY_LOCAL_MACHINE;
  If Not(Reg.KeyExists(Clave)) Then//comprobar prexistencia de clave
  Begin
    Reg.Free;
    Exit;
  End;
  Reg.OpenKey(Clave,False);//existe, por tanto podemos abrirla.
  Valores := TStringList.Create;
  Reg.GetValueNames(Valores);//Obtenemos una lista de los Nombres de los valores de la clave
  For I:=0 To (Valores.Count-1) Do
  Begin
    If Reg.GetDataInfo( Valores[i], RegInfo) Then
    Begin
      If (RegInfo.RegData = rdString) Then
      Begin
        If Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) Then
        Begin
          Result:=True;
          Break;
        End;
      End;
    End
    Else
      Valores[i]:='';
  End;//For
  Valores.Free;
  Reg.Free;
End;
Function TExecWin.AddAppReg : Boolean;
Var
  Reg : TRegistry;
  Clave : string;
Begin
  Result:=False;
  If (NombreClave='') Or (NombreExec='') Then
    Exit;
  If AppInReg Then
    Exit;
  Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
  If ProximaVez Then Clave := Clave+'Once';
  Reg:=TRegistry.Create;
  If Not(Usuario) Then Reg.RootKey := HKEY_LOCAL_MACHINE;
  If Not(Reg.KeyExists(Clave)) Then
  Begin
    Reg.Free;
    Exit;
  End;
  Reg.OpenKey(Clave,False);
  Reg.WriteString(NombreClave,NombreExec);
  Reg.Free;
  Result:=True;
End;
Function TExecWin.DelAppReg : Boolean;
Var
  Reg : TRegistry;
  RegInfo : TRegDataInfo;
  Clave : string;
  Valores : TStringList;
  I : integer;
Begin
  Result:=False;
  If Not(AppInReg) Then
    Exit;
  If (NombreClave='') Or (NombreExec='') Then
    Exit;
  Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
  If ProximaVez Then Clave := Clave+'Once';
  Reg:=TRegistry.Create;
  If Not(Usuario) Then Reg.RootKey := HKEY_LOCAL_MACHINE;
  If Not(Reg.KeyExists(Clave)) Then
  Begin
    Reg.Free;
    Exit;
  End;
  Reg.OpenKey(Clave,False);
  Valores := TStringList.Create;
  Reg.GetValueNames(Valores);//Obtenemos una lista de los Nombres de los valores de la clave
  For I:=0 To (Valores.Count-1) Do
  Begin
    If Reg.GetDataInfo( Valores[i], RegInfo) Then
    Begin
      If (RegInfo.RegData = rdString) Then
      Begin
        If Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) Then
        Begin
          Reg.DeleteValue( Valores[i] );
          Result:=True;
        End;
      End;
    End;
  End;
  Valores.Free;
  Reg.Free;
End;
procedure Register;
begin
  RegisterComponents('drakon', [TExecWin]);
end;
end.

2da parte
Código Delphi [-]
ExecWi1.NombreEjecutable:='Notepad.exe';
If ExecWin1.AppInReg Them
  ShowMessage('SI')
Else
  ShowMessage('NO');
{PARA INSTALAR UN PROGRAMA}
ExecWin1.NombrePrograma:='Block de Notas';//Como quiere que se visualice
ExecWin1.NombreEjecutable:='C:\windows\Notepad.exe';//Direccion donde se encuentra el Ejecutable
ExecWin1.SoloUnaVez:=False;{queremos que se ejecute siempre}
ExecWin1.SoloUsuario:=False;{que se ejecute con cualquier usuario}
If ExecWin1.AddAppReg Then
  ShowMessage('Ok, se ha instalado correctamente')
Else
  ShowMessage('NO, Error en la instalación, posiblemente ya esté instalado...');
{PARA DESINSTALAR UN PROGRAMA}
ExecWin1.NombreEjecutable:='Notepad.exe';//Como esta siendo Visualizado
If ExecWin1.DelAppReg Then
  ShowMessage('Ok, se ha Desinstalado correctamente')
Else
  ShowMessage('NO, Error en la Desinstalación, posiblemente ya fuese desinstalado...');
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
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


La franja horaria es GMT +2. Ahora son las 23:59:57.


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