如何检测代码是否来自 IDE 运行

How to detect if code is run from IDE

我有以下函数来检查我的代码是否是 IDE 中的 运行 真正令人沮丧的是,有时函数 returns False 即使代码是 运行 from IDE。事实上,我找不到任何共同点来判断它什么时候工作正常,什么时候不工作 任何人都知道如何修复此功能或执行此检查的其他方法。 (我使用该功能在开发过程中制作一个带有测试功能的菜单,并将它们隐藏给最终用户)

function IDERunning: Bool;
begin
  Result := (FindWindow('TAppBuilder', nil) > 0) and
    (FindWindow('TPropertyInspector', 'Object Inspector') > 0);
end;

我用Delphi XE8

可以使用Winapi.Windows单元的IsDebuggerPresent function

具体取决于您要测试的内容:

  • 使用 IsDebuggerPresent 测试您的进程是否附加了任何用户模式调试器。
  • 测试 DebugHook 是否为非零以确定程序在 Delphi IDE 调试器下 运行。

请注意,当 DebugHook 非零时,IsDebuggerPresent 将 return 为真,但情况并非总是如此。除了 IDE 调试器之外还有调试器。