#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);
}
}