调试 还是 正常运行?(50分)

  • 主题发起人 主题发起人 龙丹
  • 开始时间 开始时间

龙丹

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望获知程序是在正常运行呢还是在DELPHI开发环境中进行调试,
因为,有个Logon窗口总是显示在最最前面,调试期间盖住了Delphi的源程序窗口,
所以我想,要是知道在是调试期间,就让Logon窗口不要显示在最前面了
 
我正在写的一个组件就用到了.
有一个类信息可返回当前状态.可是我忘了.
如果你需要我可给你查一下.,
 
wdn:
我当然需要了,谢谢.
希望你说的不是 csDesigning in ComponentState
 
你可以设计一个编译条件, 以调试版编译时不显示出对话框就行了,
这样不需要增加代码来做判断.
...
{$IFNDEF FINALVERSION} // 如果不是最终版本
// 将启动窗设为普通模式, 此处假设你在设计器中已把AboutBox的FormStyle设为fsStayOnTop了
AboutBox.FormStyle:=fsNormal;
{$ENDIF}
AboutBox.Show;
...
 
谢谢各位。
以前(好像是D5以前),可用ParamStr(0)检测到主程序是Delphi32.exe,现在不行了。
频繁地改变编译条件已经让我很烦了,在代码中检测一下,并不需要花多少时间,
而且一劳永逸。
目前我是通过在DELPHI中调试时设置特殊的命令行参数来解决的。
采用所谓反跟踪技术来判定程序是不是在被调试也是可以的,但我觉得太夸张了。
所以最好还是让我能够直接获知当前进程是不是由DELPHI启动的。
 
用FindWindow找类名为TAppBuilder的窗口, 找到了就说明Delphi在运行中,
但是并不能说明你的程序正在被Delphi调试
 
try
asm
int 3
end;
//调试中,DELPHI中断
//GetForeGroundWindow判断窗口类是不是DELPHI的窗口,可以判断是不是DELPHI在调试
except
//未调试
end;
 
好,我现在采用wolaixue的方法
写成一个函数:
function IsDebugging:boolean;
begin
try
asm int 3 end;
[blue] Result:=True;[/blue]
except
Result:=False;
end;
end;
唯一缺点就是要在Result:=True;哪里中断,反正是在调试,也无大碍
 
自己用个变量控制
 
多人接受答案了。
 
后退
顶部