【问题标题】:How to make a C++ Program listen for system commands如何让 C++ 程序监听系统命令
【发布时间】:2013-03-18 13:21:20
【问题描述】:

最近有人问我如何/如果可能的话,可以做到这一点。我不确定它是否可能,我已经搜索了一段时间了。

基本上让我们以Windows 为例,有一个系统命令可以关闭计算机。假设shutdown -s -t 30 -c "Shutdown"

有没有办法编写一个程序来侦听shutdown 命令,然后运行shutdown -a 以响应中止该命令?

简而言之,你能让它监听计算机上的某些系统命令并执行系统命令作为响应吗?

【问题讨论】:

  • Windows 有它传递的各种消息。一个是WM_QUERYENDSESSION。当你得到它时,你可以主动打电话给shutdown -a。查看此页面以获取有关 API 挂钩的更多详细信息 codeproject.com/Articles/2082/API-hooking-revealed
  • 请注意,Windows 级别没有shutdown command。有一个 Windows 程序Shutdown.EXE,它知道要调用哪个基本的 Windows API。但它不是唯一知道这一点的程序。例如。 Explorer.EXE(负责开始菜单)也知道这一点。所以检测shutdown.EXE不会影响Explorer.EXE的关闭。

标签: c++ windows listen


【解决方案1】:

这确实是可能的。但是,您的示例可能不是描述一般问题的最佳示例。 Windows 中有应用程序可以监听的会话事件,还有shutdown is one of them。毕竟,shutdown.exe 并不是唯一可以要求 Windows 关闭的应用程序。

然而,一般来说,“侦听”正在执行的命令的应用程序必须与操作系统紧密集成。您可以想象,防病毒软件正是这样做的,并且做得更多,以防止执行 “坏”节目。我不熟悉 Windows 技术,但可以想象挂钩执行二进制文件的 Windows 系统调用是一种方法。当然,这将需要“管理”权限,甚至可能需要编写内核模块。

【讨论】:

    【解决方案2】:

    你可以这样走:

    1. 检查程序是否正在退出。
    2. 如果是,则取消程序退出调用并执行system("shutdown -a);
    3. 否则,做你想做的。

    嗯,可能有很多更复杂的方法可以做到这一点。我同意@VladLazarenko 的回答;像杀毒软件这样的程序一直在监听系统命令。但我想这需要对 API 有深入的了解。这只是一种简单的方法。如果您不是新手,那么您必须访问此链接,http://www.codeproject.com/Articles/2082/API-hooking-revealed(来自@RedX 的评论)。祝你好运! :)

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2022-12-30
      • 2016-03-20
      相关资源
      最近更新 更多