+ -
当前位置:首页 → 问答吧 → 发送的SendMessage一多就卡死怎么办

发送的SendMessage一多就卡死怎么办

时间:2011-11-30

来源:互联网


我这边写了2个函数封装成DLL,在使用的时候下面这一段获取列表总元素这段不管发送多少次都不会出错 


long CQMPlugin::GetAllElementCount(long hwnds) 
{
  HWND hwnd;
  hwnd=(HWND)hwnds;
  long iItem=0;

  iItem=::SendMessage(hwnd,LVM_GETITEMCOUNT,0,0); //获取所有元素的总数  
return iItem;
}



下面这段是发送确认选择 到列表元素,可以正确执行,但是执行一多就卡死了,烦恼了好久不知道怎么解决。
用PostMesaage得不到结果,没有发送确认。
用SendMessageTimeout,不知道具体的该怎么写,运行了就出错。


void CQMPlugin::SendCheck(long hwnds, long row) 
{  
HWND hwnd;
  hwnd=(HWND)hwnds;
int iItem=0;
LVITEM lvitem, *plvitem;
  DWORD PID;
HANDLE hProcess;
GetWindowThreadProcessId(hwnd, &PID);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM),MEM_COMMIT, PAGE_READWRITE);

  iItem=row;
  lvitem.state=LVIS_SELECTED|LVIS_FOCUSED; 
  lvitem.stateMask=LVIS_SELECTED |LVIS_FOCUSED;


  WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
  SendMessage(hwnd, LVM_SETITEMSTATE, (WPARAM)iItem, (LPARAM)plvitem);
  CloseHandle(hwnd);
  CloseHandle(hProcess);
  VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);

}




或者是不是向目标进程请求分配内存空间VirtualAllocEx这个函数造成的?
但是我有释放啊 请问各位大侠如何是好?

作者: llx1990   发布时间: 2011-11-30

在VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
后面加个
Sleep(100);
试试

作者: keiy   发布时间: 2011-11-30