Delphi 检测我的应用程序是否在IDE下运行;德尔福2007.Net“;

Delphi 检测我的应用程序是否在IDE下运行;德尔福2007.Net“;,delphi,delphi-2007,delphi.net,Delphi,Delphi 2007,Delphi.net,如何检测我的应用程序是否在IDE“Delphi2007.Net”下运行,其中有类似DebugHook的东西 再见。IsDebuggerPresent()WinAPI调用。类似于: Function IDEIsRunning : boolean; begin result := DebugHook <> 0; end; 函数IDEIsRunning:boolean; 开始 结果:=0; 结束; 可能合适。回答我自己的问题 uses System.Diagnostics; f

如何检测我的应用程序是否在IDE“Delphi2007.Net”下运行,其中有类似DebugHook的东西

再见。

IsDebuggerPresent()WinAPI调用。

类似于:

Function IDEIsRunning : boolean;
begin
  result := DebugHook <> 0;
end;
函数IDEIsRunning:boolean;
开始
结果:=0;
结束;

可能合适。

回答我自己的问题

uses System.Diagnostics; 

function IDEDelphiNetRunning:Boolean; 
Begin 
Result:=Debugger.IsAttached; 
End; 
对我来说很好


再见。

我从

使用
IsDebuggerPresent()
WinAPI调用。 C++中的示例:

if (IsDebuggerPresent())
    Label1->Caption = "debug";
else
    Label1->Caption = "no debug";

绝地JclDebug.pas单位包含以下内容:

function IsDebuggerAttached: Boolean;
var
  IsDebuggerPresent: function: Boolean; stdcall;
  KernelHandle: THandle;
  P: Pointer;
begin
  KernelHandle := GetModuleHandle(kernel32);
  @IsDebuggerPresent := GetProcAddress(KernelHandle, 'IsDebuggerPresent');
  if @IsDebuggerPresent <> nil then
  begin
    // Win98+ / NT4+
    Result := IsDebuggerPresent
  end
  else
  begin
    // Win9x uses thunk pointer outside the module when under a debugger
    P := GetProcAddress(KernelHandle, 'GetProcAddress');
    Result := DWORD(P) < KernelHandle;
  end;
end;
函数是debuggerattached:Boolean;
变量
IsDebuggerPresent:函数:布尔;stdcall;
果仁柄:桑德尔;
P:指针;
开始
KernelHandle:=GetModuleHandle(kernel32);
@IsDebuggerPresent:=GetProcAddress(内核句柄,'IsDebuggerPresent');
如果@IsDebuggerPresent为零,则
开始
//Win98+/NT4+
结果:=IsDebuggerPresent
结束
其他的
开始
//Win9x在调试器下使用模块外的thunk指针
P:=GetProcAddress(KernelHandle,'GetProcAddress');
结果:=DWORD(P)
Alister,DebugHook在“Delphi 2007.Net”中不存在,所以请寻找一些替代方案。我在搜索如何做与OP完全相同的事情。。。但是在Delphi 5中。因此,这对我来说自然非常有效。:)+1但这并不是问题的真正答案,因为在Delphi下运行应用程序和在任何其他调试器下运行应用程序无法通过这种方式进行区分。也许这对OP来说并不重要,但问题的措辞应该有所不同。此外,System.Diagnostics中还有Debugger.IsAttached,无需调用Windows API。问题是专门针对“Delphi 2007.net”调试器,而不仅仅是任何调试器。这不会告诉您是否在调试器下运行。它只是告诉您调试是否是在编译时定义的。所以你对一个6年前的问题给出了一个完全错误的答案,这个问题已经有了多个正确答案。所以这会检测到IDE是否连接到进程,但不会检测到黑客是否将进程CPU模式切换到调试模式?不过这是“再见”。
function IsDebugMode():Boolean;
begin
  Result:=False;
 {$IFDEF DEBUG}
  Result:=True;
 {$ENDIF}
end;