Определить, работает ли мое приложение в среде IDE Delphi 2007 .Net

Как я могу определить, работает ли мое приложение в среде IDE "Delphi 2007 .Net", есть ли что-то вроде DebugHook?

Пока.


person RRUZ    schedule 29.06.2009    source источник
comment
хотя это "пока".   -  person Nasreddine Galfout    schedule 15.06.2019


Ответы (6)


Ответьте на мой собственный вопрос.

uses System.Diagnostics; 

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

отлично работает для меня.

Пока.

person RRUZ    schedule 12.08.2009
comment
Таким образом, это обнаружит, подключена ли IDE к процессу, но не переключит ли хакер режим процессора процесса на отладку? - person nurettin; 10.05.2018

Вызов WinAPI IsDebuggerPresent().

person Icebob    schedule 29.06.2009
comment
Однако на самом деле это не ответ на вопрос, поскольку запуск приложения в Delphi и его запуск в любом другом отладчике нельзя отличить таким образом. Может быть, это не важно для ОП, но тогда вопрос должен был быть сформулирован по-другому. Также в System.Diagnostics есть Debugger.IsAttached, не нужно вызывать Windows API. - person mghie; 30.06.2009

Что-то типа:

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

Подходит.

person Alister    schedule 30.06.2009
comment
Алистер, DebugHook не существует в Delphi 2007.Net, так что ищите альтернативу. - person RRUZ; 30.06.2009
comment
Что ж, я искал, как сделать то же самое, что и OP... но в Delphi 5. Естественно, это отлично сработало для меня. :) +1 - person Disillusioned; 14.06.2010

Модуль 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;
person Kris De Decker    schedule 18.11.2014
comment
Вопрос касается именно отладчика Delphi 2007.net, а не любого отладчика. - person Ken White; 19.11.2014

Я нашел этот более общий ответ от embarcadero.

Используйте вызов IsDebuggerPresent() WinAPI. Пример на С++:

if (IsDebuggerPresent())
    Label1->Caption = "debug";
else
    Label1->Caption = "no debug";
person fvel    schedule 23.05.2012

person    schedule
comment
Это не говорит вам, работаете ли вы под отладчиком. Он просто сообщает вам, был ли DEBUG определен во время компиляции. Итак, вы опубликовали совершенно неверный ответ на вопрос 6-летней давности, на который уже существовало несколько правильных ответов. - person Ken White; 23.05.2016