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; 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); 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; 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); 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');
ExecWin1.NombrePrograma:='Block de Notas';ExecWin1.NombreEjecutable:='C:\windows\Notepad.exe';ExecWin1.SoloUnaVez:=False;
ExecWin1.SoloUsuario:=False;
If ExecWin1.AddAppReg Then
ShowMessage('Ok, se ha instalado correctamente')
Else
ShowMessage('NO, Error en la instalación, posiblemente ya esté instalado...');
ExecWin1.NombreEjecutable:='Notepad.exe';If ExecWin1.DelAppReg Then
ShowMessage('Ok, se ha Desinstalado correctamente')
Else
ShowMessage('NO, Error en la Desinstalación, posiblemente ya fuese desinstalado...');