我有以下函数用于检查代码是否从IDE中运行。令人沮丧的是,有时即使代码是从IDE中运行,该函数也会返回False。而且我不能找到它何时可以正常工作和何时不可用的共同点。有没有想法如何修复此函数或实现其他方法来进行此检查。(我使用该函数在开发期间创建菜单并使测试函数对终端用户不可见)
function IDERunning: Bool;
begin
Result := (FindWindow('TAppBuilder', nil) > 0) and
(FindWindow('TPropertyInspector', 'Object Inspector') > 0);
end;
我使用Delphi XE8
<>
而不是>
。但无论如何,FindWindow()
只告诉你是否存在具有指定类/标题的顶级窗口,但并不告诉你窗口是否实际上与调用进程相关联。如果IDE正在运行,但你的应用程序在IDE外运行怎么办?你上面的代码会认为代码是在IDE中运行,但实际上并不是。此外,FindWindow()
仅搜索顶级窗口,如果对象检查器被停靠,则TPropertyInspector
窗口不是顶级窗口(当停靠时它实际上有几个层次)。 - Remy Lebeau