void CMySMSDlg:: QQSendMessage()
{
 CString str;
 CWnd* pMainWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST); 
 while (pMainWnd) 
 { 
  HWND hWnd,hNext;
  hWnd = pMainWnd->m_hWnd;
  pMainWnd->GetWindowText(str);
  if(str.Find ("聊天")>-1){//找到聊天主窗口Begin
   //找RichEdit
   hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"#32770",NULL);
   pMainWnd = CWnd::FromHandle(hWnd); 
   hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"AfxWnd42",NULL);   //Unhandled exception in QQSMS.exe: 0xC0000005: Access Violation
   CWnd* pChildWnd=CWnd::FromHandle(hWnd);
   int nLen = str.GetLength ();
   hNext = FindWindowEx(pChildWnd->m_hWnd,NULL,"RICHEDIT",NULL);
   if(hNext){//找到消息填写控件
    CRichEditCtrl* pRich=(CRichEditCtrl*)(CWnd::FromHandle(hNext));
    pRich->GetWindowText (str);
    pRich->SetSel (nLen,nLen);
    pRich->ReplaceSel ("成都外国语学校");//填上将要发送的内容
   }else return;
   //找消息发送按钮
   hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,NULL,NULL);
   while (hWnd) {
    pChildWnd=CWnd::FromHandle(hWnd); 
    pChildWnd->GetWindowText(str);
    if(str.Find ("发送")>-1){
     pChildWnd->SendMessage (BM_CLICK);//发送
     return;// 退出
    }
    hWnd=FindWindowEx(pMainWnd->m_hWnd,hWnd,NULL,NULL);
   }
   return;
  }//找到聊天主窗口End
  else pMainWnd = pMainWnd->GetWindow(GW_HWNDNEXT); //继续找
 }//While
}run 到:
hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"AfxWnd42",NULL);
就停了
---------------------------
Microsoft Visual C++
---------------------------
Unhandled exception in QQSMS.exe: 0xC0000005: Access Violation.
---------------------------
确定   
---------------------------请问该如何解决?

解决方案 »

  1.   

    hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"#32770",NULL);
    的返回值是?
      

  2.   

    是不是FindWindowEx返回null了?所以后面会出现指针异常
      

  3.   

    pMainWnd = CWnd::FromHandle(hWnd); 
       hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"AfxWnd42",NULL);   //Unhandled exception in QQSMS.exe: 0xC0000005: Access Violation你都等到了hWnd,为什么还要CWnd::FromHandle(hWnd); 下面的hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"AfxWnd42",NULL); 里又用pMainWnd->m_hWnd??
      

  4.   

    hWnd=FindWindowEx(pMainWnd->m_hWnd,NULL,"#32770",NULL); 
    这一句上面的代码有问题。
    pMainWnd不包含一个#32770类的子窗口。