0

我有 3 个简单的程序,每个程序都是一个简单的窗口。我将启动所有 3 个过程,然后单击程序 1 或 2 的按钮以显示程序 3 的窗口。
程序 1 和 2:只有 1 个按钮。单击时,显示程序3的隐藏进程(也是一个窗口)。
程序 3:作为隐藏进程启动,等待程序 1 和 2 的消息后弹出。根据按下的按钮,窗口标题应更改为程序 1 或 2 的标题。

我不确定什么功能或我使用线程来实现此行为?我相信我需要使用某种线程来执行此操作..首先隐藏程序 3,然后等待程序 1 和 2 的消息..有什么想法吗?

编辑:我正在使用 C++,我被告知要使用信号量。

4

2 回答 2

1

由于您需要跨流程边界传达简单的消息,我建议使用SendMessage系列中的一些东西。您首先需要获取目标窗口的句柄。这个函数在窗口 API 中是相当低级的,所以你只能直接从 C/C++ 中得到它,但你没有指定你使用的是什么语言,我认为有围绕这个的包装器也可以通过 C# 访问 CLR 的例程。

于 2013-03-22T17:37:15.260 回答
1

我建议使用Windows Event。具体来说,手动重置事件。您的程序 3 对事件执行等待。当程序 1 或程序 2 想要唤醒窗口时,它会设置事件。当程序 3 回到隐藏状态时,它会清除事件。

您可以使用SendMessageor PostMessage,但该事件似乎更容易和直接。它还具有一定的优势:

  • 程序 1 和程序 2 不需要找到程序 3 的窗口句柄,也不需要广播可能被其他进程截获的消息。
  • 您可以为事件添加安全属性以防止恶意程序访问它。
  • 您可以在控制台应用程序、Windows 服务或任何其他进程中使用该技术,无论它是否在操作消息循环。
  • 它比使用 Windows 消息更容易理解(无论如何对我来说)。

这不适用于信号量。信号量通常用于同步对多个共享资源的访问。您只需要让程序 3 等待通知,并让程序 1 或程序 2 能够发送该通知。

如果您必须将数据从 Program 1 传递到 Program 3,那么 Event 将无法帮助您做到这一点。在这种情况下,您必须想出一种通信方法,例如内存映射文件、管道、网络套接字……甚至是 Windows 消息。但是对于简单的“嘿,醒醒!” 通知,我会使用一个事件。

于 2013-03-22T18:37:06.907 回答