发送消息的方式只限定于窗口进程,没有窗口即HWND是不行的

解决方案 »

  1.   

    1:B启动后广播一个消息,把B的句柄放到参数里发过来
    2:启动B时把A的句柄作为命令行参数传入,然后B给A发个消息并把自己句柄作为参数发过来
    3:试下EnumWindows
    4:枚举进程的所有线程及其内的窗口句柄
    http://www.codesky.net/article/200412/50490.html
      

  2.   

    我不太清楚,这里的A和B进程是不是LZ自己的,如果是自己的话,你可以给你的B进程中的主窗口设定一个特别的“窗口类”(如果不设置的话,大部分基于Dialog的程序,窗口类都是Dialog32770)或者设置一个特别的窗口标题,这样FindWindow就可以找到了。当然,如果不是楼主自己的,那就麻烦了,就算找到了B进程中的窗体,你的B程序也无法处理你的消息。
      

  3.   

    父子进程之间的通信很方便,即便限制了只能使用消息通信也可以实现。看起来核心问题是子进程有窗口,父进程找不到的问题。法1,父进程创建子进程的时候传入一个父进程的窗口作为参数,子进程启动后将自己的窗口句柄作为消息的参数发给父进程的制定窗口法2,子进程创建后在指定注册表位置写入窗口句柄,父进程去读法3,如果子进程不是自己写的,那么以上里应外合的方法都无效。还是需要设法找到子进程的窗口。方法:枚举进程,得进程id;枚举线程,找到进程对应的所有线程;枚举线程窗口(EnumThreadWindows),找到所有线程对应的所有窗口。总有一个是你想要的窗口
      

  4.   

    通过WM_COPYDATA消息实现进程间通信
      

  5.   


    我的B程序调用静态库对话框,在任务管理起重的应用程序找不到,所以用FindWindow获取不了他的句柄。
      

  6.   

    通过WM_COPYDATA消息实现进程间通信
    不知道对面句柄怎么发消息?
      

  7.   

    用共享内存 创建一个事件 发送方SetEvent 接收方开一个线程WaitForsingleObject 仅供参考
      

  8.   


    我的B程序调用静态库对话框,在任务管理起重的应用程序找不到,所以用FindWindow获取不了他的句柄。除了WPF的子窗口外,只要是窗口,就有句柄,这是肯定的。
    你可以给你的窗口设置一个唯一的类名称或者标题名称,肯定能找到。