我听说一些自定义组件作者使用RTL例程来检查Delphi是否正在运行以设置共享软件限制.有谁知道这个例程是什么?检查明显的名称,如“DelphiRunning”或“IsDelphiRunning”并没有发现任何有用的东西.
解决方法
这里有两个不同的想法:
– Delphi正在运行
– 应用程序在调试器下运行
– 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;
如果目标是将组件的试用版本限制为在开发应用程序时使用,则两者都有缺陷: – 应用程序中可以包含具有正确类别名称/标题的隐藏窗口 – 可以在代码中手动设置DebugHook