Ver Mensaje Individual
  #2  
Antiguo 27-11-2009
Avatar de bosster_018
bosster_018 bosster_018 is offline
Miembro
 
Registrado: nov 2009
Ubicación: Bolivia
Posts: 127
Reputación: 15
bosster_018 Va por buen camino
Debes utilizar el Registro de Windows (Regedit)

Todos los cambios que se pueden realizar en Windows puede ser tratado desde el Registro de Windows (Regedit).
Sólo debes "Googlear" en poco para investigar como cambiar algunas opciones desde el Registro para luego aplicarlo en Delphi.

Por ejemplo buscando "Bloquear Panel de control" me lleva al Registro de Windows:

Desde la Web "batiburrillo.net/adivina/adivina_sop26.php":

Cita:
Este truco funciona perfectamente en Windows Me / 2000 y XP. Aplicándolo podemos impedir que, personas no autorizadas, entren en Panel de Control y cambien opciones que no queremos cambiar.

* Vamos a Inicio \ Ejecutar y escribimos regedit para utilizar el Editor del registro.
* Abrir sucesivamente las ramas según la secuencia:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer.

* Crear o modificar la variable (Edición \ Nuevo \ Valor DWORD) con el nombre NoControlPanel y darle el valor 1.
* Repetir el mismo apartado anterior siguiendo las ramas:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer.

Luego salir del registro y Reiniciar la computadora
Sabiendo esto... Te puedo dar un ejemplo:
En tu formulario agregas un boton y en la caption del botón escribes "Desbloqueado".
Luego en el boton escribes esto:

Antes que nada en las Uses de tu formulario debes agregar:

Código Delphi [-]
Uses
  Registry, ShellApi;

En el botón escribe:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
    Registro:TRegistry;
    Registro2:TRegistry;
begin
  Registro:=TRegistry.create;  //Se crea el primer registro
  Registro2:=TRegistry.create; //Se crea el segundo registro
  Registro.RootKey:=HKEY_CURRENT_USER;  //Se asigna la rama principal
  Registro2.RootKey:=HKEY_LOCAL_MACHINE;  // Se asigna la otra rama principal

  if Button1.Caption='Desbloqueado' then
  begin
    //Aquí se bloquea el panel de control
    Button1.Caption:= 'Bloqueado';
    if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\',FALSE) then
       Registro.WriteString('NoControlPanel',(IntToStr(1)));
    if Registro2.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\',FALSE) then
       Registro2.WriteString('NoControlPanel',(IntToStr(1)));
  end
  else
  begin
    //Aquí se desbloquea el panel de control
    Button1.Caption:= 'Desbloqueado';
    if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\',FALSE) then
       Registro.DeleteValue('NoControlPanel');
    if Registro2.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\',FALSE) then
       Registro2.DeleteValue('NoControlPanel');
  end;
  //Se libera el registro
  Registro.Free;

  {Para que el cambio se vea de inmediato...
  Se debe terminar o reiniciar el proceso "Explorer.exe"}

  //Termina el proceso explorer.exe
  ShellExecute(Handle, nil, 'tskill', 'explorer', nil, sw_hide);
  //Se inicia de nuevo el explorer.exe
  ShellExecute(Handle, nil, 'explorer.exe', '', '', SW_HIDE);

  {Nota.- Si alquien sabe como hacer que se vea el cambio de
   inmediato sin cerrar el "explorer.exe", que hable ahora o calle para siempre}
end;

Esto lo acabo de hacer así que puede que falte algo o también sobre código
Responder Con Cita