Sendkeys用于关闭遗留应用程序的替代方法是什么?

时间:2010-01-27 02:30:45

标签: c#

我希望我的C#程序在继续之前关闭某个遗留应用程序。可以使用ctrl + x立即关闭旧版应用程序。我可以使用Sendkeys这样做,但我被告知sendkeys可能有点片状。我是否有另一种方法可以发送此密钥组合并关闭旧版应用程序?

3 个答案:

答案 0 :(得分:3)

如果您知道标题栏上的窗口标题,例如“Foo”,那么您可以使用p / invoke查找窗口并从中获取句柄“FindWindow”。获得句柄后,您可以使用“SendMessage”来发送一个表示Ctrl + X的“WM_KEYUP”。

希望这有帮助, 最好的祝福, 汤姆。

答案 1 :(得分:3)

如果这是一个GUI应用程序。它也可能通过SendKeys响应Alt + F4。

与ctrl + x不同,Alt + F4不依赖于哪个窗口具有焦点。这是Windows应用程序的标准加速器,大多数旧的GUI应用程序都支持它。 SendKey被认为是flakey的主要原因是因为击键被传递到焦点窗口,这可能会或可能不会理解它们。但是Alt + F4是一个加速器,所以无论哪个窗口都有焦点,它都应该可以工作。

如果可以获得主窗口的句柄。 (如果您还没有FindWindow,请使用PostMessage(hwndApp, WM_SYSCOMMAND, SC_CLOSE, 0); )。你可以

SendMessage

这相当于从窗口上的系统菜单中选择关闭选项。 {{1}}也可以正常工作,但PostMessage更安全,因为您的应用程序不会等待消息传递。

WM_SYSCOMMAND

答案 2 :(得分:2)

其他选项包括:
System.Diagnostics.Process.Kill
System.Diagnostics.Process.CloseMainWindow

如果后者有效,请使用它。如果没有,你直接杀死进程就没有任何损失,那么就杀死()。