Ver Mensaje Individual
  #6  
Antiguo 27-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Reputación: 23
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