如何从控制台应用程序调用正在运行的winform应用程序的函数

时间:2015-04-01 08:20:37

标签: c# winforms console-application

我的Windows应用程序处于运行状态。我有另一个控制台应用程序需要与我的winApp交互。我可以从控制台获取正在运行的进程详细信息并将焦点设置到winApp,但我无法调用winApp的任何功能。

有人可以帮助我吗?

如果我不清楚,请告诉我。

3 个答案:

答案 0 :(得分:0)

几种可能性:

  1. 您可以将鼠标事件和关键事件发送到Windows应用程序(非常不可靠,正确的窗口是打开的吗?在顶部?等等)
  2. 您需要某种形式的进程间通信(IPC)。 (一些努力)
  3. IPC的一些可能性:

    1. 共享内存
    2. 命名管道
    3. 插座

答案 1 :(得分:0)

如果交互不复杂,最简单的方法是将自定义消息发布到窗口。 Microsoft已为特定于应用程序的信号保留了一系列可能的值。您可以使用RegisterMessage函数在运行时为您的消息分配值,并为其他应用程序确定当前值。

RegisterMessage功能:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644947%28v=vs.85%29.aspx

您可以在每个应用程序启动时调用/调用RegisterMessage函数。

PostMessage功能:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644944%28v=vs.85%29.aspx

您可以在控制台应用程序中调用/调用PostMessage函数。

您的winforms应用程序将需要侦听该消息,我认为一个地方是通过覆盖PreFilterMessage方法。

不可否认,您不会获得大量可以推送事件的数据。我用过一次这两个进程之间传递驱动器号。

答案 2 :(得分:0)

您正在考虑某种进程间通信,根据您尝试实现的范围,有多种方法可以实现此目的。

例如,如果您需要应用程序之间的丰富接口,则可以在Windows应用程序中托管WCF服务器,并从控制台应用程序连接到此作为WCF客户端。这将允许您在应用程序中公开要调用的方法。

e.g: https://msdn.microsoft.com/en-us/library/ee939340.aspx

您还可以使用命名管道,这为您提供了一个简单的读/写API来获取进出给定进程的信息,然后您只需处理应用程序中收到的信息并执行您的功能

例如:https://msdn.microsoft.com/en-us/library/bb546102(v=vs.110).aspx

希望这有帮助。