//我要实现的是:用程序来实现向另外一个程序("KJ90数据传输终端")中的一个按钮(“开始服务”)发送单击消息。(("KJ90数据传输终端")是用c#编写)
//我能找到他们的句柄也能发送消息,但是另外一个程序("KJ90数据传输终端")好象没有收到消息,("KJ90数据传输终端")没有反映。请高人帮忙看看! HWND m_hwnd,m_hwnd1;

//查找另外一个程序的句柄
m_hwnd1=::FindWindow(NULL,"KJ90数据传输终端"); if(m_hwnd1!=NULL)
{//如果找到("KJ90数据传输终端")程序句柄,继续找其中的按纽的句柄
HWND  hChild = ::FindWindowEx(m_hwnd1,NULL,"WindowsForms10.BUTTON.app3",NULL);
//向找到的按纽句柄发送单击消息
::SendMessage(hChild,BN_CLICKED,0,0);

}
//以上所有代码都能正确执行,但是对应的程序没有反映。实际上不是这样的。

解决方案 »

  1.   

    在if(m_hwnd1!=NULL)设个断点看看m_hwnd1是否为空
      

  2.   

    SendMessage()的第一个参数应当是消息的接收方,而不是发送方
      

  3.   

    你用spy++监视一下那个按钮的消息,看你的代码执行后按钮是否收到消息.
      

  4.   

    spy++是VC自动的工具,使用很简单的
      

  5.   

    COPYDATASTRUCT
    This structure contains data to be passed to another application by the WM_COPYDATA message.typedef struct tagCOPYDATASTRUCT {
    DWORD dwData; 
    DWORD cbData; 
    PVOID lpData; 
    } COPYDATASTRUCT; 
    Members
    dwData 
    Specifies up to 32 bits of data to be passed to the receiving application. 
    cbData 
    Specifies the size, in bytes, of the data pointed to by the lpData member. 
    lpData 
    Long pointer to data to be passed to the receiving application. This member can be NULL. 
      

  6.   

    ::SendMessage(hChild,BN_CLICKED,0,0);
    改为
    ::PostMessage(hChild, WM_LBUTTONDOWN, 0, 0);
    ::PostMessage(hChild, WM_LBUTTONUP, 0, 0);
    试试
      

  7.   

    ::SendMessageg(hChild,WM_COMMAND,MAKEWPARAM(IDC_BUTTON1,BN_CLICKED),(long)::GetDlgItem(hChild,IDC_BUTTON1));