Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   A ver si ah alguien le sirve y lo mejora... (https://www.clubdelphi.com/foros/showthread.php?t=24611)

DarkDrakon 27-08-2005 01:22:19

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....:confused:

vtdeleon 27-08-2005 01:35:33

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:rolleyes:

dec 27-08-2005 05:18:56

Hola,

Cita:

Empezado por DarkDrakon
Solo ke un posee ciertas dificultades que ya veran....:confused:

¿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? ;)

Crandel 27-08-2005 06:21:32

Que dificil es seguir el código sin identación !!!

pero no veo donde estan las dificultades?? :confused: :confused: :confused:

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 :rolleyes:

Crandel 27-08-2005 06:24:07

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.

vtdeleon 27-08-2005 06:43:51

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...');


La franja horaria es GMT +2. Ahora son las 09:36:48.

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