martes, 6 de abril de 2010

Manejo de claves del editor de registro de windows en C#

Como primer entrada mostrare un ejemplo de como manipular las claves de registro del regedit,como sabemos existen 5 nombres de claves dentro del registro, estas son: HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
las cuales para un mejor manejo de informacion las llamaremos claves root.
Para manipular los valores contenidos dentro de las claves .net nos provee clases para esto,un par de estas muy importantes son "Registry" y "RegistryKey".
La clase Registry provee objetos RegistryKey que representan los nombres de las claves root y métodos estáticos para acceder al valor de alguna clave.
Ahora bien, antes de empezar con el código necesitamos importar un namespace:
using Microsoft.Win32;
el cual contiene las clases a utilizar.
La clase registry también contiene métodos estáticos gets y sets para los valores de las claves,estas abren y cierran claves de registro cada vez que son usadas,estas no tienen un buen desempeño como sus métodos análogos descritos en la clase RegistryKey.
Métodos de la clase RegistryKey:
Nota: solo se mencionan los mas útiles para el ejemplo.
Para mayor información visita:
http://msdn.microsoft.com/es-es/library/microsoft.win32.registrykey_members(v=VS.80).aspx
CreateSubKey: Crea una nueva subclave o abre una subclave existente.
DeleteSubKey: Elimina la subclave especificada.
DeleteValue: Elimina el valor especificado de esta clave.
GetValue: Recupera el valor asociado al nombre especificado.
OpenSubKey: Recupera la subclave especificada.
SetValue: Establece el valor de un par nombre/valor de la clave del Registro.
Ahora bien, después de conocer algunos método necesitamos instanciar objetos de acuerdo a nuestras necesidades, para manejar claves root debemos instanciar un objeto indicando el tipo de clave root que utilizaremos:
RegistryKey key = Registry.ClassesRoot;
RegistryKey key = Registry.CurrentUser;
RegistryKey key = Registry.LocalMachine;
RegistryKey key = Registry.Users;
RegistryKey key = Registry.CurrentConfig;

Después de tener nuestro objeto instanciado pasamos a ejemplificar sus métodos.
Crear Subclaves:
key.CreateSubKey("Psched");
Eliminar Subclaves:
key.DeleteSubKey("Explorer");
Eliminar valores:
key.DeleteValue("Explorer");
Obtener valores:
key.GetValue("NonBestEffortLimit");
Abrir Subclaves:
key.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced");
Se abre una clave de solo lectura.
key.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",true );
2° parametro indica el tipo de acceso al valor de las subclaves.true:permite el acceso para escribir.
Escribir valores:
keyReg.SetValue("NonBestEffortLimit", 0);
Pongo un ejemplo en el cual se modifica un valor de registro para acelerar el apagado del pc.

RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
string value = Convert.ToString(key.GetValue("WaitToKillAppTimeout"));
if (value == "20000") //Hecho
{
key.SetValue("WaitToKillAppTimeout",4000);
try
{
RegistryKey key2 = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control", true);
key2.SetValue("WaitToKillServiceTimeout", 4000);
//se crea un objeto proceso para matar el proceso del explorer y asi poder hacer una actualizacion del sistema sin reiniciar el pc.
Process[] proceso = Process.GetProcessesByName("Explorer");
proceso[0].Kill();//se mata proceso
proceso[0].Close();
}
catch (Exception exp){
key.SetValue("WaitToKillAppTimeout", 20000);
MessageBox.Show("Error de proceso: /r" + exp.Message);
}
}
else // ya hecho
{
MessageBox.Show("Ya esta modificada la entrada del registro");
}

Matta neeee¡¡¡

No hay comentarios:

Publicar un comentario

CoMeNtArIoS y MaS...