【问题标题】:How to close another application in c++?如何在 C++ 中关闭另一个应用程序?
【发布时间】:2021-11-18 23:02:39
【问题描述】:

我想在运行时使用 c++ 程序关闭我的 txt 文件或 chrome。我们可以通过ShellExecute(NULL, "open", "C://File Path" , NULL, NULL, SW_SHOWNORMAL);SendMessage(WM_CLOSE) 做到这一点。 如果是,比如何?

【问题讨论】:

  • 相当难。您真的不知道文件将如何打开。总的来说,我认为这是不可能的。
  • 我不确定是否可以使用 WinApi。需要获取持有 txt 文件的打开文件句柄的进程的 PID。 IIRC 有一些技巧可以在 Linux 系统下获得这些关系,但对于 Windows 则不太确定。
  • @πάντα ῥεῖ 您可以在 Windows 中终止该进程,但可能用户正在编辑文件,或者 Chrome 打开了其他选项卡。例如,您可以使用 UI 自动化来定位单个应用程序,然后关闭选项卡或其他任何内容。
  • @πάν PID 在 POSIX 之外不是很有用。 TerminateProcess 接受一个进程句柄,CreateProcess 方便地返回。如果你需要找到打开文件的进程,那么that's supported也一样。
  • 如果有多个text和chrome,如何选择?这真的不是一件容易的事。另请参阅How to effectively kill a process in C++ (Win32)?

标签: c++ winapi


【解决方案1】:

我建议您可以按照以下步骤操作:

  1. 使用 EnumProcesses function 获取所有 ProcessID 的数组。

  2. 对于每个 ProcessID,使用OpenProcess 打开并获取每个进程的句柄。使用PROCESS_QUERY_INFORMATION | PROCESS_TERMINATE 访问权限。如果进程没有打开,那么你没有权限关闭它,它可能是一个系统进程。

  3. 如果进程打开成功,使用GetModuleBaseName获取进程名。

  4. 如果名称匹配,使用TerminateProcess 终止进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多