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;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)) ThenBegin
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.
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');
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...');
Solo ke un posee ciertas dificultades que ya veran....