Ver Mensaje Individual
  #1  
Antiguo 27-08-2005
Avatar de DarkDrakon
DarkDrakon DarkDrakon is offline
Miembro
 
Registrado: abr 2005
Ubicación: Tacna - Peru
Posts: 46
Reputación: 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