win7下怎么实现service向程序主窗口PostMessage消息

win7下怎么实现service向程序主窗口PostMessage消息,第1张

解决方案1:

win7里,service在seeeion

0,桌面程序在〉0的session,发消息行不通的。

方法很多,可以翻阅MSDN进程通信一节。

内存映射文件

命名管道

socket

mailslot

...。

解决方案2:

用全局信号,Service设置信号SetEvent,桌面程序用WaitForSingleObject等待信号,当有信号后读取状态,可通过共享内存保存状态等交换数据。

在MFC中使用PostMessage和SendMessage函数

BOOL PostThreadMessage( UINT message , WPARAM wParam, LPARAM lParam )

Called to post a user-defined message to another CWinThread object

使用这个函数可以向一个CwinThread类型的类发送消息(即包括从CWindThrea中继承而来的类),使用方法如下:

CWinThread *pUIThread = AfxBeginThread(RUNTIME_CLASS(CProgress))//CProgress是从CWindThead中继承而来的类

CProgress *pUIThrd = (CProgress *)(pView->pUIThread)//pView是一个视类的实例,pUIThread是它的一个成员

pUIThrd->PostThreadMessage(WM_PROS,NULL,NULL)//向CProgress类发送WM_PROS消息,由该类中对应的消息响应函数进行处理

BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 )

Places a message in the window's message queue and then returns without waiting for the corresponding window to process the message

使用这个函数可以向一个CWnd类型的类发送你消息(即包括从CWnd类中继承而来的类),CView也是从中继承而来的,使用方法如下:

CWinThread *pThread = AfxBeginThread(Calculate,this)//this代表的是一个从CView类中继承而来的Demo4View类,Caculate是该线程的

//线程处理函数,把this传递给Caculate进行处理

CDemo4View *pView = (CDemo4View *)pParam

pView->PostMessage(WM_RESULT,NULL,duration)//向这个CDemo4View类发送WM_RESULT消息,由该类对应的消息响应函数进行处理

LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 )

它与PostMessage的用法相同个,不同支持是它只有在对应的类处理完发送的消息后才返回,这样后面的代码可能要过一段时间才能执行;

而PostMessge是发送完消息就立即返回,不管消息处理完没有,这样后面的代码就可以立即执行。

可以. PostMessage和SendMessage都是可以的

但注意, 普通消息只能传递值, 不能传递指针.

只有WM_COPYDATA这个消息可以传递指针. 但它也只能使用SendMessage

还有, 如果是自定义消息, 需要在两边程序中注册这个消息才行, 否则也发送不了.

win7后还有其它限制.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/9903311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存