2009-06-29 225 views

回答

3

回答我自己的問題。

uses System.Diagnostics; 

function IDEDelphiNetRunning:Boolean; 
Begin 
Result:=Debugger.IsAttached; 
End; 

適合我。

再見。

4

IsDebuggerPresent()WinAPI調用。

+0

這不是真正的問題的答案不過,因爲運行的Delphi下的應用程序和在其他調試器下運行它不能通過這種方式進行區分。也許這對於OP來說並不重要,但是這個問題應該有不同的措辭。在System.Diagnostics中還有Debugger.Is附加,無需調用Windows API。 – mghie 2009-06-30 04:18:04

2

喜歡的東西:

Function IDEIsRunning : boolean; 
begin 
    result := DebugHook <> 0; 
end; 

可能適合。

+0

Alister,DebugHook在「Delphi 2007.Net」中不存在,所以尋找一些替代方案。 – RRUZ 2009-06-30 03:39:31

+0

那麼,我正在尋找如何做與OP完全相同的東西......但在Delphi 5中。所以很自然地,這對我來說非常合適。 :) +1 – 2010-06-14 15:10:46

+0

這適用於Delphi 7 ;-) – NetVicious 2016-01-18 16:43:53

0

我發現這個更一般的答案,從embarcadero

使用IsDebuggerPresent() WinAPI的電話。 實施例在C++:

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

的JEDI 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; 
-3
function IsDebugMode():Boolean; 
begin 
    Result:=False; 
{$IFDEF DEBUG} 
    Result:=True; 
{$ENDIF} 
end; 
相關問題