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

win7下如何实现service向程序主窗口PostMessage消息?
我有一个service服务程序A和一个桌面程序B,需要实现以下功能:
1、当service启动、暂停、恢复时,能够及时通知程序B。
2、程序B能够控制服务程序A的启动、暂停核恢复。
在服务程序,我采用PostMessage 和 FindWindowEx 这两个API函数,当服务程序状态改变时,通过FindWindowEx查找程序B的主窗口HWND,发送自定义消息。
 在程序B,通过OpenSCManager、OpenService、QueryServiceStatus等API函数查找服务当前状态,并且进行控制操作。

这些在XP和win2003下测试都正常。可到win7环境下,却失效。查找原因,发现时因为win7的安全机制改变了。service服务和桌面程序不在同一个Session环境运行。导致FindWindowEx不能正确找到主窗口的HWND。使用EnumProcesses遍历使用进程,可以找到程序B,并且获得其Handle。但这个Handle是Process的,不能通过其发送信息。就通过EnumWindows遍历所有窗口,希望获得主窗口的句柄HWND。但在win7下,EnumWindows只能遍历其所属的Session环境下的窗口。还是无法正确找到程序B的主窗口HWND。
 
在win7下如何实现后台service服务和桌面程序的通讯?如果通过PostMessage无法实现,那有没有其他的方法,能够实现这样的功能?哪位知道,请指点。

这样的功能,杀毒软件都可以实现。比如,微点。观察其运行机制,发现他有一个后台常驻的监控程序(其用户名显示为当前用户)在一直运行。他是采用什么样的机制?

------解决方案--------------------
用全局信号,Service设置信号SetEvent,桌面程序用WaitForSingleObject等待信号,当有信号后读取状态,可通过共享内存保存状态等交换数据.
------解决方案--------------------
win7里,service在seeeion 0,桌面程序在〉0的session,发消息行不通的。

方法很多,可以翻阅MSDN进程通信一节。
内存映射文件
命名管道
socket
mailslot
...