【发布时间】:2012-09-11 05:53:29
【问题描述】:
我有 2 个程序,我需要一种方法让其中一个程序以某种方式向另一个程序发送消息。我研究了 Win32 API 中的 SendMessage 函数,虽然只要你有一个窗口句柄,它就可以很好地工作,但我的程序需要能够在服务下注销时运行,这意味着它不能创建窗口句柄.
有什么方法可以在不创建窗口句柄的情况下接收来自另一个进程的消息?我一直在寻找Win32是否有其他方式可以连接到消息传递中,这样我就不需要依赖窗口句柄,但是必须有某种方式在基本级别的进程之间进行通信,不是吗不在那里?
我已经研究过使用 Pipe 来执行此操作,但遇到了巨大的权限问题,而且它的级别比我真正想要的要高得多。我需要做的就是发送一个简单的自定义 int 消息,以便我的进程知道是时候关闭了。
【问题讨论】:
-
我有发布愚蠢回复的危险,但是,您是否考虑过将共享内存用于 IPC?似乎很适合您的应用程序(请参阅msdn.microsoft.com/en-us/library/windows/desktop/…)。邮槽也可能很适合 (msdn.microsoft.com/en-us/library/windows/desktop/…)。希望这可以帮助!让我知道您的应用程序是否有某些东西使所有这些方法变得无关紧要。
-
我会和@Ivan 一起做这个。这可能很简单,例如设置注册表值或文件中的值,然后让服务监视或轮询它。 Naff 但又快又简单。
-
命名管道是要走的路。我现在遇到了他们的权限问题,任何其他机制都不会变得更好。
-
其他答案和 cmets 已经解释了更好的方法来做到这一点,但要澄清的是,服务可以创建窗口,它们只是不能与桌面或任何其他会话交互。
-
@HansPassant SendMessage 在与管道完全相同的情况下根本没有给我们任何权限问题,所以我知道有些方法没有那么多限制。我对管道导致这些问题的最佳猜测是因为它们可以发送更复杂的消息
标签: c winapi inter-process-communicat