windows使用消息进行控制台进程间通信

        windows进程间通信的方式很多,通过获取窗口句柄,就可以用消息机制进行进程间的通信。

        控制台程序不使用窗口,但可以通过创建不可见的窗口来使用消息机制进行进程间通信。

        需要接受消息的进程,使用CreateWindow创建一个不可见的窗口,比如

         HWND hWnd = CreateWindow(_T("STATIC"), _T("receiver"), 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);

        然后就可以悠然自得的WaitMessage了。

        需要发送消息的进程,使用FindWindow来找接受消息进程创建的窗口: HWND hWndFind = FindWindow(_T("STATIC"), _T("receiver"));  —— 不同的进程需要用不同的窗口名称,如果重复,窗口都可以创建,但是用FindWindow就只能找到最近创建的一个(关闭后,找次近创建的一个)

        然后再获取创建窗口的线程id: DWORD threadid = GetWindowThreadProcessId(hWndFind, NULL);

        就可以发送消息了:::PostThreadMessage(threadid, 0, NULL, NULL);
                                            ::PostThreadMessage(threadid, 10, NULL, NULL);
                                            ::PostThreadMessage(threadid, 30, NULL, NULL);
                                            ::PostThreadMessage(threadid, WM_QUIT, NULL, NULL);

       通过线程id,只能用PostThreadMessage,处理是异步的。

       虽然也有窗口句柄,可以通过SendMessage来进行同步处理,但这样的话,接收进程中创建的窗口还需要处理消息,这就不是想要的了。

      

 

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值