我做的功能很简单:
就是在一个程序里对另一个程序发送一个按纽的消息,但是它就是不响应,郁闷
下面是程序:高手帮我解释一下!谢谢(ComMM.EXE的“开始”按纽为什么不动做啊)
HWND h_Main;
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main == NULL)
{
     ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
     h_Main =::FindWindow(NULL,"ComMM");
     if(h_Main != NULL)
     {
h_AUTO = FindWindowEx(h_Main,NULL,"Button","开始");
::SendMessage(h_AUTO,BM_CLICK,0,0);  //BM_CLICK 单击按纽
     }
}

解决方案 »

  1.   

    你应该等到apppath可以响应消息的时候才发。
    即用WaitForInputIdle等,然后再FindWindow。
      

  2.   

    h_AUTO==NULL
    ::SendMessage(h_AUTO,WM_LBUTTONDOWN,0,0);  
    ::SendMessage(h_AUTO,WM_LBUTTONUP,0,0);
      

  3.   

    晕,你把消息发送给BUTTON窗口干什么?要发送给此按纽控件的Dlg窗口处理才行啊。
      

  4.   

    SendMessage(h_Main,BM_CLICK,0,0);试试
      

  5.   

    你的方法应该是可以的,我试了一下可以响应,或者用我的方法
    HWND h_Main;
    h_Main =::FindWindow(NULL,"ComMM");
    if(h_Main == NULL)
    {
      ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
      Sleep(1000);
      h_Main =::FindWindow(NULL,"ComMM");
      if(h_Main != NULL)
      {
         h_AUTO =::GetDlgItem(h_Main,nButtonID);//nButtonID要改为"开始"按钮ID
         if(h_AUTO)
         {
           if(::SetForegroundWindow(h_Main ))
              ::SendMessage(h_AUTO,BM_CLICK,0,0); 
         }
         else AfxMessageBox("没找到开始按钮");
      }
    }
      

  6.   

    1.应该向按钮所在的窗口发送BM_CLICK,将按钮ID作为参数
    2.进程之间最好通过WM_COPYDATA,SendMessage对于很多少消息都不能正确跨进程(主要是用到字符串等类型的参数),Windows只对一些简单的控制(Button,Edit之类的)作了跨进程边界的处理。对于ListView,TreeCtrl之类,SendMessage可能无法达到你的目的。
      

  7.   

    如何向一个按钮发送单击消息?//知道ID时:
    SendMessage(WM_COMMAND,((WPARAM)BN_CLICKED)<<8|(WPARAM)IDC_BUTTON,0L);
    ::PostMessage(m_hWnd,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),0);
    ::SendMessage(m_hWnd,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),0);//知道HWND的值pwnd
    ::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
    ::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONUP,0,0);
      

  8.   

    你向它发送 WM_COMMAND不就得了
    h_Main =::FindWindow(NULL,"ComMM");
    if(h_Main == NULL)
    {
         ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
         h_Main =::FindWindow(NULL,"ComMM");
         if(h_Main != NULL)
         {
    ::SendMessage(h_Main ,WM_COMMAND,0x2,0);  //WM_COMMAND 命令消息
         }
    }
      

  9.   

    ::SendMessage(h_Main ,WM_COMMAND,0x2,0);  //WM_COMMAND 命令消息 第三个参数,按钮ID是固定的,你如果要是不知道的话,可以用SPY++查看一下就知道了
      

  10.   

    你的方法应该是可以的,我试了一下可以响应,或者用我的方法
    HWND h_Main;
    h_Main =::FindWindow(NULL,"ComMM");
    if(h_Main == NULL)
    {
      ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
      Sleep(1000);
      h_Main =::FindWindow(NULL,"ComMM");
      if(h_Main != NULL)
      {
         h_AUTO =::GetDlgItem(h_Main,nButtonID);//nButtonID要改为"开始"按钮ID
         if(h_AUTO)
         {
           if(::SetForegroundWindow(h_Main ))
              ::SendMessage(h_AUTO,BM_CLICK,0,0); 
         }
         else AfxMessageBox("没找到开始按钮");
      }
    }