[6]显示获取的数据
1.首先在初始化的时候创建一个线程来循环调用寻找人物信息的函数
BOOL InitDialog(HWND hwnd) { //注册快捷键 F1 RegisterHotKey(hwnd, 1, 0, VK_F1); //注意这里填写的热键标识符1,判断的时候也是判断标识符 //存储读到的数据 g_pPlayerBuffer = (PTCHAR)VirtualAlloc(NULL, 0X1000, MEM_COMMIT, PAGE_READWRITE); //设置的全局变量缓冲区
InitListView(hwnd); //初始化ListView
return FALSE; }
2.在点击透视按钮的时候调用线程。
case IDC_BUTTON_VIEW: //创建一个ThreadProcGetDate的线程,循环显示人物信息,参数暂时没有就设置个局部变量 if (!GetThreadId(g_hReadThread)) { g_hReadThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProcGetDate, (PDWORD)&dwParam, 0, NULL); }//运行前看看是否线程有效,如果没有则创建,如有有则跳过,防止用户一直按 break;
3.填写创建读取线程的函数
/************************************************************************/ /* 读取线程函数 */ /************************************************************************/ VOID WINAPI ThreadProcGetDate(DWORD dwParam) { ZeroMemory(g_pPlayerBuffer, sizeof stPlayerInfo * 33); //清零一块内存 while (true)//通过循环调用来不停刷新人物信息 { FindPlayer(g_ProcessInfo.m_hProcess, g_ProcessInfo.m_dwBaseAddress, g_pPlayerBuffer);//调用人物查找函数 } }
4.将读取出的信息显示到控件上,首先初始化控件环境
/************************************************************************/ /* ListView初始化 */ /************************************************************************/ VOID InitListView(HWND hWnd) { //获得对话框句柄 HWND hListViewCT = GetDlgItem(hWnd, IDC_LIST1);//获取主窗口上的某个空间 HWND hListViewT = GetDlgItem(hWnd, IDC_LIST2); //列表名称 PTCHAR ListName[] = { TEXT("序号"),TEXT("状态"),TEXT("血量"),TEXT("x"),TEXT("y"),TEXT("z") }; //列表信息 LVCOLUMN listInf = { NULL }; listInf.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT; listInf.fmt = LVCFMT_LEFT; //列上标题向左对齐 listInf.cx = 60; //每一列的宽度 //添加列 for (int i =0;i<6;i++) { listInf.pszText = ListName[i]; ListView_InsertColumn(hListViewCT, i, &listInf); //宏,往指定的控件,添加列的标头 ListView_InsertColumn(hListViewT, i, &listInf); } //设置双缓冲 DWORD dwSty = ListView_GetExtendedListViewStyle(hListViewCT);//获取控件当前风格 ListView_SetExtendedListViewStyle(hListViewCT, dwStym | LVS_EX_DOUBLEBUFFER);//设置新的风格 dwSty = ListView_GetExtendedListViewStyle(hListViewT); ListView_SetExtendedListViewStyle(hListViewT, dwStym | LVS_EX_DOUBLEBUFFER);//设置新的 //设置图像 }
5.显示到控件上
/*********************************************** ** ListView显示数据 ***********************************************/ VOID ListViewPlayerInfo(HWND hWnd, PCHAR pPlayerBufferMemory) { //全局任务信息 stPlayerInfo* pstPlayerBuffer = (stPlayerInfo*)pPlayerBufferMemory; //获得对话框句柄 HWND hListViewCT = GetDlgItem(hWnd, IDC_LIST_VIEW_CT); HWND hListViewT = GetDlgItem(hWnd, IDC_LIST_VIEW_T); //定义项目 LVITEM ListObj = { NULL }; ListObj.mask = LVIF_TEXT; //刷新 清空 ListView_DeleteAllItems(hListViewCT); ListView_DeleteAllItems(hListViewT); //文本缓存 TCHAR Buffer[20] = { 0 }; for (DWORD i = 0; i < 32; i++) { if (pstPlayerBuffer[i].x == 0 && pstPlayerBuffer[i].y == 0 && pstPlayerBuffer[i].z == 0) { continue; } if (pstPlayerBuffer[i].dwCT == 3) //3=CT阵营 2=T阵营 { swprintf_s(Buffer, 20, TEXT("%d"), i); ListObj.iSubItem = 0; ListObj.pszText = Buffer; ListView_InsertItem(hListViewCT, &ListObj); //设置序号 if (pstPlayerBuffer[i].dwHp == 1 || pstPlayerBuffer[i].dwState == 23) swprintf_s(Buffer, 20, TEXT("×")); else swprintf_s(Buffer, 20, TEXT("√")); ListObj.iSubItem = 1; ListObj.pszText = Buffer; ListView_SetItem(hListViewCT, &ListObj); //设置死活状态 swprintf_s(Buffer, 20, TEXT("%d"), pstPlayerBuffer[i].dwHp); ListObj.iSubItem = 2; ListObj.pszText = Buffer; ListView_SetItem(hListViewCT, &ListObj); //设置血量 swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].x); ListObj.iSubItem = 3; ListObj.pszText = Buffer; ListView_SetItem(hListViewCT, &ListObj); //设置x swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].y); ListObj.iSubItem = 4; ListObj.pszText = Buffer; ListView_SetItem(hListViewCT, &ListObj); //设置y swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].z); ListObj.iSubItem = 5; ListObj.pszText = Buffer; ListView_SetItem(hListViewCT, &ListObj); //设置z } else { swprintf_s(Buffer, 20, TEXT("%d"), i); ListObj.iSubItem = 0; ListObj.pszText = Buffer; ListView_InsertItem(hListViewT, &ListObj); //设置序号 if (pstPlayerBuffer[i].dwHp == 1 || pstPlayerBuffer[i].dwState == 23) swprintf_s(Buffer, 20, TEXT("×")); else swprintf_s(Buffer, 20, TEXT("√")); ListObj.iSubItem = 1; ListObj.pszText = Buffer; ListView_SetItem(hListViewT, &ListObj); //设置死活状态 swprintf_s(Buffer, 20, TEXT("%d"), pstPlayerBuffer[i].dwHp); ListObj.iSubItem = 2; ListObj.pszText = Buffer; ListView_SetItem(hListViewT, &ListObj); //设置血量 swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].x); ListObj.iSubItem = 3; ListObj.pszText = Buffer; ListView_SetItem(hListViewT, &ListObj); //设置x swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].y); ListObj.iSubItem = 4; ListObj.pszText = Buffer; ListView_SetItem(hListViewT, &ListObj); //设置y swprintf_s(Buffer, 20, TEXT("%.2f"), pstPlayerBuffer[i].z); ListObj.iSubItem = 5; ListObj.pszText = Buffer; ListView_SetItem(hListViewT, &ListObj); //设置z } } }
原创学习随笔心得,请勿转载!