我希望能够检测给定的 exe 是否以编程方式被 shellex 处理,或者是否在 CMD.EXE 中以交互方式输入和执行。
关于 exe 的启动方式是否有任何信息表明用于启动它的机制?
上下文:Windows XP、Visual Studio 6 语言。
最佳答案
可能有更简单的方法,但我能想到的唯一方法是检查父进程名称,这涉及几个步骤:
- Get the ID of the parent process .
- Get the handle of the process ,使用 ID。
- 使用GetModuleFileNameEx使用找到的句柄(NULL 作为模块)来获取可执行文件的名称。
- 检查可执行文件的名称是否为 cmd.exe 或其他名称。
请记住,当您执行此检查时,父进程可能已经消失。
编辑:
如果您的程序是控制台应用程序,您还可以检查它正在运行的控制台。如果它是从 cmd 运行的,它通常会使用相同的控制台。所以,你可以使用GetConsoleTitle例如,看看它是否是“命令提示符”。这可能不适用于本地化或不同版本的 Windows,但如果您的情况有限,这很容易。您还可以使用GetConsoleWindow和 GetWindowThreadProcessId而不是步骤 1 和 2。
关于winapi - 能否检测到 .exe 是如何启动的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252977/