Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
A ver BuRtOn, por algo digo que leas la ayuda sobre TRegistry.

Tienes la clave de registro

HEY_CURRENT_USER\Desktop\MenuShowDelay

Bueno, empecemos a desarmar esta clave para que comprendas el porqué de cada método que ves en el código.

HEY_CURRENT_USER corresponde al ROOT. El directorio principal de la clave.

Luego le siguen los subdirectorios de la clave. En este caso es uno sólo: Desktop.

Y por último viene la variable, MenuShowDelay.

Cuando uno desea modificar una clave del registro debe abrir primero dicha clave. Esto se consigue con los siguientes pasos:

1. Establecer el root.

Código Delphi [-]
Reg.Rootkey := ....;

2. Abrir el/los directorio/s.

Aqui hay dos maneras, Si el subdirectorio tiene muchos subdirectorios debemos ir abriendolos uno por uno, o directamente los abrimos todos de una vez.

Por ejemplo,
Código Delphi [-]
Reg.OpenKey('software',True);
Reg.OpenKey('Microsoft',True);
Reg.OpenKey('Windows',True);

es equivalente a hacer:

Código Delphi [-]
Reg.OpenKey('software\Microsoft\Windows',True);

El segundo parámetro, que corresponde a un tipo boolean, es para indicar si debe crear el directorio en caso de no existir dicho directorio.

Una vez que todos los directorios han sido abiertos, ya podemos modificar la clave o variable que buscamos. Aqui dependerá si lo que guarda es string, integer, etc. Por ejemplo, supongamos que se guarda un string:

Código Delphi [-]
Reg.WriteString('DisableTaskMgr','1');

En el ejemplo, se cambia la variable DisableTaskMgr con el valor 1 pero en string.

Una vez hecho los cambios, hay que cerrar la clave.

Código Delphi [-]
Reg.CloseKey;

¿Se entiende ahora?

Es necesario que conozcas el registro de Windows. Al menos, lo que vas a modificar y/o leer.

Con respecto a cuando y donde hacer esto, dependerá de lo que se necesite. Puede ser en la primera vez que se va a usar el programa, y de allí en mas no debería hacer falta volver a hacerlo. Dije debería puesto que si se cambia el registro, en forma externa a tu aplicativo ya suenan las sirenas.

Puede ser ante la pulsación de un botón, en el evento OnCreate del form principal... esto ya es una cuestión de requisitos, de diseño del sistema y/o de implementación.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 15-08-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Código Delphi [-]
procedure DisableTaskMgr(bTF: Boolean);
  var reg: TRegistry;
begin  
  reg := TRegistry.Create;  
  reg.RootKey := HKEY_CURRENT_USER;  
  reg.OpenKey('Desktop', True);  
  reg.OpenKey('MenuShowDelay ', True);    
  if bTF = True then  begin    
    reg.WriteXXX(En las XXX va Int osea quedaria WriteInt)
    ('DisableTaskMgr', 1);  
  end else if bTF = False then begin    
    reg.DeleteValue('DisableTaskMgr');  
  end;  
  reg.CloseKey;end;

que pena, aki esta el codigo es que me salio a lo Ancho...

Última edición por dec fecha: 15-08-2008 a las 05:05:57.
Responder Con Cita
  #3  
Antiguo 15-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Hola BuRtOn,

Tengo para ti cuatro observaciones:
1. En el segundo OpenKey, estás pasando el texto con un espacio al final. Deberías quitar ese espacio.
2. Dudo que encuentres el directorio Desktop en HKEY_CURRENT_USER. Yo más bien diría que es HKEY_CURRENT_USER\Control Panel\Desktop.
3. El valor que se almacena en MenuShowDelay es un string.
4. ¿Tiene algún significado para ti el parámetro BTF? ¿Sabes lo que hace DeleteValue?

Esto te lo pregunto porque se me hace que copiaste código sin entender el porqué y de donde sale el parámetro BTF. Ese parámetro que ves en el procedimiento está para controlar alguna acción dentro del procedimiento del cual copiaste. Ahora, para ti, ¿que es ese BTF? Te sirve de algo? Porque si haces esto:

Código Delphi [-]
DisableTaskMgr(False);

Lo que conseguirás es eliminar dicha clave del registro (si existiese). ¿Deseas brindar la posibilidad de que se elimine y/o se escriba en el registro con un parámetro?

BuRtOn, Al menos hubieras dado un nombre adecuado al procedimiento, Para que no sea tan evidente que copiaste y solo lo editaste según lo que yo te dije.

Antes te pregunté si comprendías lo que es un parámetro. Di por entendido de que así era y que comprenderías que ese parámetro sólo es de interés para el que ha diseñado ese código. Que quieres te diga... a mi me huele a un simple Copy-Paste.

¿Leiste un poco la ayuda sobre el TRegistry? ¿Te fijaste si la clave en el registro está y de que tipo es? ¿O simplemente porque es un "número" intuías que verdaderamente se almacena un número?

Si ejecutaras el código que expusiste, conseguirías crear una clave DisableTaskMgr (en el caso de que BTF sea True) en HKEY_CURRENT_USER\Desktop\MenuShowDelay \ con un valor entero (si tu WriteXXX fuera WriteInteger) y no estarías modificando la clave adecuada.

Menos mal que antes te dije que conocieras la parte del registro con la que vas a trabajar

En definitiva:

1. Establecer el root correcto.
2. Abrir el directorio Control Panel
3. Abrir el directorio Desktop
4. Escribir en MenuShowDelay el valor '0' (o el que se desee. ¡Poner antención al tipo por favor!)
5. Cerrar

Ahora si, espero que se entienda.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 15-08-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Hola delphius, Bueno como primer punto, no tengo por que disimular que copie el codigo, por que si no te diste cuenta yo recalque al principio de este hilo que el codigo me lo habia pasado un amigo, para que analisara las cosas, algo muy diferente a que me pusiera a mentir de que el codigo lo habia hecho yo.

Como segundo punto, no sabia a un 100% como se comportaria ese codigo en el Regedit de windows, por algo pregunte.

Tercer punto: Lamentablemente no tengo mucho tiempo que si diga para leer las cosas que a mi me interesan y deseo aprender, por mi estudio, y no solo eso, ahora nos enfocan a visual Basic 5.0, y tambien me toca estudiar.

Cuarto punto: Estudio Delphi aun por que me gusta y lo aprecio mucho, pero aveces no me queda tiempo.

Quinto punto: De igual forma te agradesco que me allas ayudado, va ser muy util tu ayuda, pero enserio, ya relajate un poco delphius y no me condenes a cadena perpetua sin antes leer bien lo que yo expongo en mis hilos, lo digo en cuanto a lo que dijiste que ubira disimulado que el codigo es copiado, a mi me gusta decir las cosas como son, no puedo aparentar que ese codigo es mio, por que por algo estoy preguntndo, no es apenas obvio ???..

Bueno Gracias, voy a intentar lo que me dijiste delphius, y sin broncas, gracias.
Responder Con Cita
  #5  
Antiguo 15-08-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Saludos, Ok delphius gracias tus aportes fueron de gran ayuda, repase bien el codigo y pude lograr lo que queria, aqui esta el codigo como lo hice:

Código Delphi [-]
unit ufrmAumentarVelocidadMenu;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;
begin
  reg:= TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.OpenKey('Control Panel\Desktop\', True);
  reg.WriteString('MenuShowDelay','0');
  reg.CloseKey;
  MessageDlg('Su Menu Ha Sido Optimizado',mtInformation,[mbOK],0);
 end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;
end.

Espero que a alguien le sea util...Bueno delphius ahora va esta pregunta, como hago el condicional, para que me haga lo siguiente:

* Por ejemplo voy a ejecutar la aplicacion para que me aumente la velocidad de mi menu de inicio de windows, que es basicamente cambiar el valor de 400 a 0, como esta en mi codigo, pero si alguien ejecuta mi aplicacion y ya han modificado el registro, osea ya no esta en 400 si no en 0, en pocas palabras necesito que me determine si el menu ya ha sido optimizado oh no, osea al ejecutar mi aplicacion que me determine si el valor 400 ya ha sido modificado a 0, para enviar un mensaje que me diga: "su equipo ya habia sido optimizado", espero que me puedas colaborar, y grcias ante mano.
Responder Con Cita
  #6  
Antiguo 15-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Cita:
Empezado por BuRtOn Ver Mensaje
Saludos, Ok delphius gracias tus aportes fueron de gran ayuda, repase bien el codigo y pude lograr lo que queria, aqui esta el codigo como lo hice:

Código Delphi [-]unit ufrmAumentarVelocidadMenu; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Registry, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var reg: TRegistry; begin reg:= TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey('Control Panel\Desktop\', True); reg.WriteString('MenuShowDelay','0'); reg.CloseKey; MessageDlg('Su Menu Ha Sido Optimizado',mtInformation,[mbOK],0); end; procedure TForm1.Button2Click(Sender: TObject); begin Application.Terminate; end; end.


Espero que a alguien le sea util...Bueno delphius ahora va esta pregunta, como hago el condicional, para que me haga lo siguiente:

* Por ejemplo voy a ejecutar la aplicacion para que me aumente la velocidad de mi menu de inicio de windows, que es basicamente cambiar el valor de 400 a 0, como esta en mi codigo, pero si alguien ejecuta mi aplicacion y ya han modificado el registro, osea ya no esta en 400 si no en 0, en pocas palabras necesito que me determine si el menu ya ha sido optimizado oh no, osea al ejecutar mi aplicacion que me determine si el valor 400 ya ha sido modificado a 0, para enviar un mensaje que me diga: "su equipo ya habia sido optimizado", espero que me puedas colaborar, y grcias ante mano.
Una manera de hacerlo es leyendo dicha clave. Para eso en vez de WriteString, debes emplear ReadString. Tu aplición entonces, lo que puede hacer es el OnCreate de tu forma principal, leer el valor del registro y si no es igual a 400, lo cambia.

TRegistry cuenta con los métodos necesarios para leer, guardar, eliminar claves, para saber si existe alguna clave en particular o no... En estos momentos no tengo Delphi a mano, pero estoy seguro de que para leer el valor es ReadString.

El procedimiento es el mismo:
1. Establecer el root
2. Abrir directorios
3. Leer clave
4. Si el valor de clave leida es distinto a '0'
4.1. escribir en clave el valor '0'

Una vez que el TRegistry se ubica en una clave, se puede trabajar con ella. De modo que con solo abrir los directorios para leerlos ya no te haría falta volver a abrirlos para modificarlo. ¿Se entiende?

Sugiero que leas la ayuda sobre TRegistry. En serio, es preferible tomarse unos minutos para leer un poco y comprender mejor que intentar a ciegas.
Recuerda que el registro de Windows es un tanto sencible, una metedita de pata y ¡PUM! estallan pantallitas azules.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 15-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Tendrias que preguntar por el valor de la clave,

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;
begin
  reg:= TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.OpenKey('Control Panel\Desktop\', True);
  if reg.ReadString('MenuShowDelay') = '400' then begin
     reg.WriteString('MenuShowDelay','0');
     MessageDlg('Su Menu ha sido optimizado',mtInformation,[mbOK],0);
  end
  else MessageDlg('Su Menu ya estaba optimizado',mtInformation,[mbOK],0);
  reg.CloseKey;
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 15-08-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Saludos, ok entendi, pero ahora tengo un problema, jejeje, como se si mi registro es string o binary, o lo que sea es que no puedo editar esta clave:

[FONT='Book Antiqua','serif']HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \SessionManager\MemoryManagement\PrefetchParameters[/font][FONT='Book Antiqua','serif'].
Una vez alli aumentaremos el contenido del valor EnablePrefetcher del predeterminado "3" al recomendado "5".[/font]



[FONT='Book Antiqua','serif']Gracias por su ayuda...muy amables.[/font]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Editar componente por defecto de Delphi 6 kapullok_2006 OOP 3 05-08-2008 15:04:57
Como editar una imagen con delphi 7 kurono Varios 6 02-01-2008 22:23:12
Regedit REHome Windows 6 06-08-2007 18:55:00
Editar imagen en Delphi feico Gráficos 1 03-04-2007 14:36:06
leer una veriable del Regedit de windows con Delphi afarenas Varios 8 26-09-2006 02:01:30


La franja horaria es GMT +2. Ahora son las 12:28:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi