For starters, your DoListboxProcess function would probably be similiar to this:
Code:
BOOL CALLBACK DoListboxProcess(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hwnd;
DWORD pid;
HANDLE process;
int x, y, z;
DWORD iAddress = 0x4BD7AFD0;
DWORD dummy = 0;
unsigned char value[200];
char outvalue[22];
switch (message) {
case WM_INITDIALOG:
hwnd=FindWindow(NULL, "Halo");
SendDlgItemMessage(hDlg, IDC_PLAYERLIST, LB_RESETCONTENT, 0, 0);
GetWindowThreadProcessId(hwnd, &pid);
process = OpenProcess(PROCESS_VM_READ
|PROCESS_VM_WRITE|
PROCESS_VM_OPERATION
|PROCESS_QUERY_INFORMATION,
FALSE, pid);
for(x = 0; x < 16;x++)
{
ReadProcessMemory(process // handle to the process
,(void*) iAddress, // address to start reading
(void*) &value, // address of buffer to place read data
sizeof(value) // number of bytes to read
,&dummy); // number of bytes read
z = 0;
for(y = 10; y < 22; y+=2)
{
outvalue[z++] = value[y];
}
outvalue[11] = '\0';
SendDlgItemMessage(hDlg, IDC_PLAYERLIST, LB_ADDSTRING, 0, (LPARAM)outvalue);
iAddress += sizeof value;
}
return (TRUE);
case WM_COMMAND:
if (LOWORD(wParam) == IDOK ||LOWORD(wParam)== IDCANCEL ) {
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return FALSE;
}
Be absolutely sure that 0x4BD7AFD0 is the correct address of the remote variables that you wish to access. If it isn't correct, you'll end up with garbage.
The listbox refresh is just a matter of using a timer.
I haven't tested this snippet. That's up to you.
Good luck!