可以检测.exe是如何启动的吗?

bug*_*net 3 vb6 winapi exe shellexecute

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

有没有关于exe的启动方式,表明用于启动它的机制?

上下文:Windows XP,Visual Studio 6语言.

era*_*ran 5

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

  1. 获取父进程的ID.
  2. 使用ID 获取进程的句柄.
  3. GetModuleFileNameEx与找到的句柄(以及NULL作为模块)一起使用以获取可执行文件的名称.
  4. 检查可执行文件的名称是否为cmd.exe或其他.

请记住,在执行此检查时(或同时)父进程可能已经消失.

编辑:

如果您的程序是控制台应用程序,您还可以检查它正在运行的控制台.如果它是从cmd运行的,它通常会使用相同的控制台.因此,您可以使用GetConsoleTitle,看看它是否是"命令提示符".这可能不适用于本地化或不同版本的Windows,但如果您有限制案例,则很容易.您还可以使用GetConsoleWindowGetWindowThreadProcessId代替步骤1和2.