Por asterion, hace 11 años y 3 meses

Serie admin / Programando con APIS en Delphi

Leido 5936 veces

Advertisements

Cuando milite en el grupo [aRC] programe una serie de pequeñas aplicaciones a manera de ejercicio para mostrar a newbies el manejo del Registro de Windows.
La llame serie «admin». Todas fueron programadas en Delphi 6 y usando las Apis de Windows por lo cual mis ejecutables empacados ocupan tan solo 54 Kb la mayoría de ellos.
La manera de crear programas en delphi sin hacer uso del entorno visual (me refiero a crear ventanas y botones por código) esta explicada a grosso modo en mis anteriores post llamados:

Programando con APIS en Delphi cap. 01
Programando con APIS en Delphi cap. 02

Ok, ahora hablaremos del admin1 que es el que nos ocupa en esta ocasión.
Se trata de una sencilla aplicación que nos permite bloquear o desbloquear la opción de editar el registro de Windows (el famoso Regedit), tan usado por administradores de sistemas que coactando nuestra libertad nos muestran el famoso cuadrito:

El administrador ha bloqueado la modificación del Registro

Les pondré el código en delphi (prácticamente pascal) y el ejecutable para que lo usen para los fines que consideren convenientes. Yo lo programe con fines educativos y solo de esa manera lo he usado.
Ok sin más preámbulo veamos el código:

program admin1;

{Código fuente: a573r10n [aRC]
Compilador : Delphi 6
Funcion : Activa o desactiva la edición del regedit
Nombre : admin1}

uses
Windows,
Messages,
SysUtils,
registry;

{$R *.RES}

var
WinClass: TWndClassA;
Inst, Handle, Button1, Button2, Label1: Integer;
Msg: TMsg;
hFont: Integer;

//******************************************************************
procedure activa;
var
Ole: OleVariant;
reg:tregistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('00');
reg.WriteInteger('DisableRegistryTools',ole);
reg.RootKey:=HKEY_local_machine ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('00');
reg.WriteInteger('DisableRegistryTools',ole);
reg.Free;
end;
//******************************************************************
Procedure desactiva;
var
Ole: OleVariant;
reg:tregistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('01');
reg.WriteInteger('DisableRegistryTools',ole);
reg.RootKey:=HKEY_local_machine ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('01');
reg.WriteInteger('DisableRegistryTools',ole);
reg.Free;
end;
//******************************************************************
{ funcion WindowProc }
function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
{ mensajes }
if (lParam = Button1) and (uMsg = WM_COMMAND) then
activa;
if (lParam = Button2) and (uMsg = WM_COMMAND) then
desactiva;
if uMsg = WM_DESTROY then
Halt;
end;
//******************************************************************
////////////////////////////// Comienzo //////////////////////////////////
begin

//******************************************************************
Inst := hInstance;
with WinClass do
begin
hIcon := LoadIcon(Inst,'MAINICON');
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := Inst;
hbrBackground := color_btnface + 1;
lpszClassname := 'AG_TESTWINDOW';
hCursor := LoadCursor(0, IDC_ARROW);
end;
RegisterClass(WinClass);

//******************************************************************

{ ** Creamos la ventana principal ** }
Handle := CreateWindowEx(WS_EX_WINDOWEDGE, 'AG_TESTWINDOW', ' aRC - admin1',
WS_VISIBLE or WS_CAPTION or WS_SYSMENU,
(GetSystemMetrics(SM_CXSCREEN) div 2)-195,
(GetSystemMetrics(SM_CYSCREEN) div 2)-55,
235, 95, 0, 0, Inst, nil);
{ ** Creamos el primer boton ** }
Button1 := CreateWindow('Button', 'Activar regedit', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
8, 8, 115, 25, handle, 0, Inst, nil);
{ ** Creamos el texto1 (estatico) ** }
Label1 := Createwindow('Static', '', WS_VISIBLE or WS_DISABLED or WS_CHILD or SS_LEFT,
140, 50, 76, 13, Handle, 0, Inst, nil);

{ ** Fuentes ** }
hFont := CreateFont(-11, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');

{ ** Creamos el segundo boton ** }
Button2 := CreateWindow('Button', 'Desactivar regedit', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
8, 40, 115, 25, handle, 0, Inst, nil);

//******************************************************************
{ Fuentes }
if hFont <> 0 then
begin
SendMessage(Button1, WM_SETFONT, hFont, 0);
SendMessage(Label1, WM_SETFONT, hFont, 0);
SendMessage(Button2, WM_SETFONT, hFont, 0);
end;

SetWindowText(Label1, 'a573r10n [aRC]');
UpdateWindow(Handle);

while(GetMessage(Msg, Handle, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

end.

Si quieren bajar el ejecutable lo pueden hacer desde aquí.

admin1.zip

Saludos a todos y espero sus comentarios acerca del código y posibles mejoras al mismo.

1 comentario

Gravatar #1. mikrosurfer
hace 10 años y 7 meses

Hola amigo asterion ya probe tu programa y realmente es bueno!!!. Me gustaria saber como se pueden cambiar las obciones de gpedit.msc que viene en xp sp2 desde delphi. y si es posible con codigo.
desde ahora muchas gracias.

mikrosurfer

Escribir un comentario

Si quieres añadir tu comentario a esta entrada, simplemente rellena el siguiente formulario:





* Campos requeridos

Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>.

No hay trackbacks

Para notificar de una mención en tu blog a esta entrada, habilita la notificación automática (Opciones > Discusión en WordPress) o especifica esta url de trackback: http://​asterion.almadark.com/​2007/​06/​22/​serie-admin-programando-con-apis-en-delphi/​trackback/