code

#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include "RepProc.h"

typedef struct _WND_INFO
{
	HWND hWnd;
	DWORD dwProcessId;
}WNDINFO, *LPWNDINFO;


void log(const char* format, ...);

HWND GetProcessMainWnd();
BOOL CALLBACK MyEnumWndProc(HWND hWnd,LPARAM lParam);

void BeginHack();


typedef LRESULT (CALLBACK* PWndProc)(HWND hWnd,
									 UINT message,
									 WPARAM wParam,
									 LPARAM lParam);

LRESULT CALLBACK MyWndProc(HWND,UINT,WPARAM,LPARAM);



#define LOGON 1
#if LOGON
#define Log log
#else
#define Log //
#endif

static WNDPROC g_wpFather;

#define  LOGPOS Log("%d@%s", __LINE__, __FUNCTION__)





BOOLEAN 
WINAPI 
DllMain(
		IN HINSTANCE hDllHandle, 
		IN DWORD     nReason,    
		IN LPVOID    Reserved    
		)
{
	switch ( nReason )
	{
	case DLL_PROCESS_ATTACH:
		
		log("DLL_PROCESS_ATTACH");
		BeginHack();
	
		break;

	case DLL_PROCESS_DETACH:

		break;
	}

	return TRUE;

}



BOOL CALLBACK MyEnumWndProc(HWND hWnd,LPARAM lParam)
{
	DWORD dwProcessId;
	GetWindowThreadProcessId(hWnd, &dwProcessId);
	LPWNDINFO pInfo = (LPWNDINFO)lParam;
	if(dwProcessId == pInfo->dwProcessId)
	{
		BOOL isWindowVisible = IsWindowVisible(hWnd);
		if(isWindowVisible == TRUE)
		{
			//Indicate Stop  Walk	
			pInfo->hWnd = hWnd;
			return FALSE;
		}

	}
	//Indicate Continue  Walk
	return TRUE;
}

HWND GetProcessMainWnd()
{
	WNDINFO wi;
	wi.dwProcessId = GetCurrentProcessId();
	wi.hWnd = NULL;
	EnumWindows(MyEnumWndProc,(LPARAM)&wi);
	return wi.hWnd;
}

void log(const char* format, ...)
{
	char Buf[1024];

	va_list vList;
	va_start(vList, format); 
	vsprintf(Buf, format, vList);
	va_end(vList);

	OutputDebugStringA(Buf);

}


LRESULT CALLBACK MyWndProc(  HWND hWnd,
						   UINT message,
						   WPARAM wParam,
						   LPARAM lParam);
void BeginHack()
{
	CHAR Buf[32];
	sprintf(Buf, "Hwnd : %x", (DWORD)0); 
	MessageBoxA(NULL,  Buf,"Infor" , MB_OK);

	HWND hQQ = GetProcessMainWnd();

	sprintf(Buf, "Hwnd : %x", (DWORD)hQQ); 
	MessageBoxA(NULL,  Buf,"Infor" , MB_OK);

	

	g_wpFather = (WNDPROC)GetWindowLongA(hQQ, GWL_WNDPROC);
	
	SetWindowLong(hQQ, GWL_WNDPROC, (LPARAM)MyWndProc);
}

LRESULT CALLBACK MyWndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
	switch(Msg)
	{
	case WM_LBUTTONDBLCLK:
	case WM_LBUTTONDOWN:
	case WM_LBUTTONUP:

		 return 0; 
	default:
		

		return CallWindowProcA(g_wpFather, hWnd, Msg,wParam, lParam);
	}
}

  

posted on 2013-04-01 07:37  All IN  阅读(255)  评论(0)    收藏  举报

导航