我的程序如何判断Delphi是否正在运行?

Mas*_*ler 8 delphi

我听说一些自定义组件作者使用RTL例程来检查Delphi是否正在运行以设置共享软件限制.有谁知道这个例程是什么?检查诸如"DelphiRunning"或"IsDelphiRunning"之类的明显名称并没有发现任何有用的东西.

Fra*_*ois 18

这里有两个不同的想法:
- Delphi启动并运行
- 应用程序在调试器下运行

测试Delphi是否正在运行的常用方法是检查是否存在具有特定类名的已知IDE Windows,如TAppBuilder或TPropertyInspector.
这两个版本适用于所有版本的Delphi IIRC.

如果您想知道您的应用程序是否在调试器下运行,即通过IDE"运行"(F9)正常启动或在运行时连接到调试器,您只需要测试DebugHook全局变量.
请注意,"从程序中分离"不会删除DebugHook值,但"附加到进程"会设置它.

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

function IsOrWasUnderDebugger: Boolean;
begin
  Result := DebugHook <> 0;
end;
Run Code Online (Sandbox Code Playgroud)

如果目标是将组件的试用版本限制为在开发应用程序时使用,则两者都有缺陷:
- 应用程序中可以包含具有正确类名/标题的隐藏窗口
- 可以手动设置DebugHook码