1,649
社区成员
发帖
与我相关
我的任务
分享
LPMYLVITEM CRemoteListCtrlDlg::RemoteLVGetItem(int index,HWND hLvWnd)
{//
m_hHdWnd=ListView_GetHeader(m_hLvWnd);
int nColumn=::SendMessage(m_hHdWnd,HDM_GETITEMCOUNT,0,0);
// Get hProcess
DWORD pid;
GetWindowThreadProcessId(m_hLvWnd,&pid);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
//
LPMYLVITEM pRemoteItem = (LPMYLVITEM)VirtualAllocEx(hProcess, NULL, nColumn*sizeof(MYLVITEM), MEM_COMMIT, PAGE_READWRITE);
if (!pRemoteItem)
{
::MessageBox(NULL, "无法分配内存!", "错误!", NULL);
CloseHandle(hProcess);
return 0;
}
// local
LPMYLVITEM pLocalItem=new MYLVITEM[nColumn];
memset(pLocalItem,0,nColumn*sizeof(MYLVITEM));
for(int i=0; i<nColumn; i++)
{
pLocalItem[i].oldItem.mask=LVIF_TEXT | LVIF_STATE;//
pLocalItem[i].oldItem.iItem=index;//
pLocalItem[i].oldItem.iSubItem=i; //
pLocalItem[i].oldItem.cchTextMax=80;
pLocalItem[i].oldItem.pszText=pRemoteItem[i].text;// not pLocalItem[i].text
if(!WriteProcessMemory(hProcess, &pRemoteItem[i], &pLocalItem[i], sizeof(MYLVITEM), NULL))
{
::MessageBox(NULL, "WriteProcessMemory!", "错误!", NULL);
CloseHandle(hProcess);
return 0;
}
ListView_GetItem(m_hLvWnd,&pRemoteItem[i]);
// ::SendMessage(m_hLvWnd, LVM_GETITEM, (WPARAM)i, (LPARAM)&pRemoteItem[i]);
if(!ReadProcessMemory(hProcess, &pRemoteItem[i], &pLocalItem[i], sizeof(MYLVITEM), NULL))
{
::MessageBox(NULL, "ReadProcessMemory!", "错误!", NULL);
CloseHandle(hProcess);
return 0;
}
// !!!
pLocalItem[i].oldItem.pszText=pLocalItem[i].text;
// afxDump << pLocalItem[i].text << "\n";
}
//释放内存
CloseHandle(hProcess);
VirtualFreeEx(hProcess, pRemoteItem , 0, MEM_RELEASE);
return pLocalItem;
}