【问题标题】:Send Alt+F4 to hosting application将 Alt+F4 发送到托管应用程序
【发布时间】:2019-01-20 07:24:48
【问题描述】:

我正在尝试将组合键 ALT + F4C#-script 中发送到托管软件。正如您从我的问题中所理解的那样,我没有成功。

我有一个应用程序运行我的脚本来进行小文件解析。 完成文件解析后,我希望我的脚本关闭应用程序。

根据我的发现,我可以看到进程 ID 并将其杀死。这会导致我的托管软件停止并重新启动。这不是这里的目标。结束应用程序的正确方法是使用组合键 ALT + F4

但是我怎样才能将它从我的脚本传递到托管应用程序? 如果我将它发送到进程名称,我也许可以做到。但是可能有多个该应用程序的实例同时运行。

那么是否可以找到托管应用程序 ID 并将 ALT + F4 仅发送到该实例?

顺便说一句。我在 codeplex 找到了输入模拟器,但无法在工作中使用它...

感谢您的任何建议和帮助。

【问题讨论】:

  • 究竟什么是“托管软件”以及您的 C# 代码是如何集成到其中的?
  • 我的主机软件是 EPLAN,一个带有集成脚本引擎的 CAD 工具。我只需选择要运行的 C# 脚本即可。 :-)
  • 正确的是发送 WM_SYSCOMNAND SC_CLOSE 到进程的主窗口,但首先你必须找到它。
  • 这个其他托管软件有 API 吗?如果是这样,可能有一个更优雅的Close(或类似)方法来调用应用程序实例。或者您可以在 C# 代码等中使用上下文管理器。
  • 理想情况下,主机应该为脚本提供一个接口来终止。如果没有,在当前进程中将Message WM_CLOSE发送到主窗口怎么样?

标签: c# keyboard-shortcuts pid


【解决方案1】:

在这种情况下,当我们知道宿主应用程序打开了一个主窗口时,我们可以向当前进程的主窗口发送关闭消息。

Process.GetCurrentProcess().CloseMainWindow();

【讨论】:

  • 不是每个进程都有一个“主”窗口。例如,据我所知,Windows 没有定义这样的概念,.NET 有时会从进程中选择一个窗口,有时会返回 null 作为主窗口。一般来说,这很不可靠。
  • @NineBerry - 您的建议可以终止进程,但看起来 Windows 将其视为错误并开始“收集信息”并重新启动软件。我需要一个更干净的结局。 :-(
  • @TomasNordström 当应用程序在这种情况下崩溃时,在我看来,该软件没有为应用程序在执行脚本时终止的情况做好准备。我想说的是,您尝试实施的任何方式都会导致同样的崩溃。软件供应商必须解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
相关资源
最近更新 更多