HWND hwnd1=::FindWindow(NULL,"haofang");
NMITEMACTIVATE data;
ZeroMemory(&data, sizeof(data));
data.hdr.code = NM_CLICK;
data.hdr.hwndFrom = ::GetDlgItem(hwnd1,IDC_LIST1);
data.hdr.idFrom = IDC_LIST1;
data.iItem = 0;::SetForegroundWindow(hwnd1);
::ShowWindow(hwnd1,SW_SHOWNORMAL);
::SendMessage(hwnd1,WM_NOTIFY,  (WPARAM)IDC_LIST1, (LPARAM) &data  ); 我的代码是这样的,但没有任何反应,如果把
 ::SendMessage(hwnd1,WM_NOTIFY,  (WPARAM)IDC_LIST1, (LPARAM) &data  ); 
改成
::SendMessage(GetsafeHwnd(),WM_NOTIFY,  (WPARAM)IDC_LIST1, (LPARAM) &data  ); 
却可以,也就是说,这个消息,对同一个进程,有效,对外部进程无效?? 不知道是那天没考虑完全!

解决方案 »

  1.   

    外部进程是无法给CommControl发送消息的,因为不在同一地址空间内。方法是使用钩子WH_GETMESSAGE.
      

  2.   

    LPARAM) &data对应的数据在目标进程不认识,所以无法正确的响应
      

  3.   

    谢谢两位高手指点啊!
     我也想过用钩子的,那样肯定能行的! 当时没多思考一下,其实想想data是传一个地址类型,就应该知道不能在外部进程访问了,我还以为有什么办法直接发送消息呢! 很多消息,能跨进程,不过是对那种传统的控件而已,为了保留16位的兼容性,系统才允许吧!