|
1
|
| seanyboy · 技术社区 · 17 年前 |
|
|
1
4
我会用 TJvCreateProcess 组件 JVCL 它以优雅的方式包装了win32的任何与进程相关的功能。这个答案来自“除非真的需要,否则不要碰winapi”部门:-) |
|
|
2
1
您想枚举与启动的ProcessId匹配的打开窗口,并告诉这些窗口关闭。以下是一些示例代码:
然后,当你想关闭启动的应用程序时,你会想在代码中使用它:
|
|
|
3
1
停止进程的唯一通用方法是使用 TerminateProcess 但这远远不够优雅。要优雅地关闭一个进程,您需要告诉该进程您希望它停止,然后希望它遵守。不过,一般来说,没有办法做到这一点。 对于GUI程序,告诉它您希望它停止运行的通常方法是关闭其主窗口。不过,没有正式的“主窗口”概念。一个程序可以有零个或多个窗口,并且无法从外部知道应该关闭哪个窗口以使程序停止工作。 你可以使用 EnumWindows 循环浏览所有窗口并选择属于您的进程的窗口。(他们将是那些 GetWindowThreadProcessId 给出与CreateProcess给您的进程ID相同的进程ID。) 关闭一个窗口可能还不够。程序可能会显示一个对话框(提示确认,或要求保存更改等)。您需要提前知道如何关闭该对话框。 非GUI程序也可能存在类似的问题。这可能足以模拟Ctrl+C按键。不过,它可能会以不同的方式捕捉和处理击键。它可能有一个菜单系统,要求您键入“Q”退出程序。 简而言之,除非你事先知道程序预计如何关闭,否则你无法优雅地关闭程序。 |