winapi - 能否检测到 .exe 是如何启动的?

标签 winapi vb6 exe shellexecute

我希望能够检测给定的 exe 是否以编程方式被 shellex 处理,或者是否在 CMD.EXE 中以交互方式输入和执行。

关于 exe 的启动方式是否有任何信息表明用于启动它的机制?

上下文:Windows XP、Visual Studio 6 语言。

最佳答案

可能有更简单的方法,但我能想到的唯一方法是检查父进程名称,这涉及几个步骤:

  1. Get the ID of the parent process .
  2. Get the handle of the process ,使用 ID。
  3. 使用GetModuleFileNameEx使用找到的句柄(NULL 作为模块)来获取可执行文件的名称。
  4. 检查可执行文件的名称是否为 cmd.exe 或其他名称。

请记住,当您执行此检查时,父进程可能已经消失。

编辑:

如果您的程序是控制台应用程序,您还可以检查它正在运行的控制台。如果它是从 cmd 运行的,它通常会使用相同的控制台。所以,你可以使用GetConsoleTitle例如,看看它是否是“命令提示符”。这可能不适用于本地化或不同版本的 Windows,但如果您的情况有限,这很容易。您还可以使用GetConsoleWindowGetWindowThreadProcessId而不是步骤 1 和 2。

关于winapi - 能否检测到 .exe 是如何启动的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252977/

相关文章:

c++ - 用 OpenGL 绘制三角形 : how to manage with two classes

winapi - 是否可以确定另一个进程的工作目录?

ms-access - 使用代码对正在运行的应用程序进行屏幕截图

vb6 - 如何在VB中获取当前可执行文件的完整路径?

sql-server - 为什么我可以从 SQL Server 运行 .bat 而不是 .exe?

c++ - FindFirstFile 和 FindNextFile 问题

VB/VBA 中的 XML 反序列化

c++ - 如何在任何 Windows 计算机上运行 .exe 文件?

c# - 找到 .exe 的图标

c++ - 帮助 WinAPI 滚动条