Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Herausfinden ob Programm über Debugger ausgeführt wird (https://www.delphipraxis.net/149624-herausfinden-ob-programm-ueber-debugger-ausgefuehrt-wird.html)

Mikescher 25. Mär 2010 14:32


Herausfinden ob Programm über Debugger ausgeführt wird
 
Hallo,

gibt es in Delphi eigentlich eine Möglichkeit abzufragen ob die exe "normal" gestartet wurde oder über den Delphi Debugger ?

Der Grund ist, dass man bevor mein Hauptprogramm startet immer ein Intro-Video anschauen muss. Und nach dem Motto "Wasser predigen, Wein trinken" will ich nicht jeders mal beim testen das Video anschauen 8-) . Bisher hab ich den "Video-Code-Abschnitt" einfach auskommentiert, aber ich fand die Idee interessant ob so was geht (und ich befürchte dass ich am Ende vergesse den Code wieder zu dekommentieren).

MfG Mikescher

Balu der Bär 25. Mär 2010 14:35

Re: Herausfinden ob Programm über Debugger ausgeführt wird
 
Such mal im Forum nach IsDebuggerPresent. ;)

SirThornberry 25. Mär 2010 14:36

Re: Herausfinden ob Programm über Debugger ausgeführt wird
 
Du könntest das überspringen des Intros zum Beispiel auch per Parameter überspringen (prüfen ob ein bestimmter Parameter übergeben wurde).

MaBuSE 25. Mär 2010 14:41

Re: Herausfinden ob Programm über Debugger ausgeführt wird
 
Zitat:

Zitat von Mikescher
gibt es in Delphi eigentlich eine Möglichkeit abzufragen ob die exe "normal" gestartet wurde oder über den Delphi Debugger ?

Ja, das ist einfach:

Delphi-Quellcode:
function RunningInDelphi: Boolean;
begin
   Result := DebugHook <> 0;
end;
So kann man das ganze einfach testen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
    if RunningInDelphi then
      Color := clRed
   else
      Color := clBlue;
end;

Mikescher 25. Mär 2010 14:44

Re: Herausfinden ob Programm über Debugger ausgeführt wird
 
Danke euch :cheers: ,

ich hab diesen Code mit Balus Suchbegriff gefunden:
Delphi-Quellcode:
function IsDebuggerPresent: boolean; stdcall;
asm
  MOV    EAX, DWORD PTR FS:[$30]  
  TEST   EAX, EAX
  JS     @@W9X
@@WNT:
  MOV    EAX, FS:[$18]
  MOV    EAX, [EAX+$30]
  MOVZX  EAX, [EAX+2]
  RET
@@W9X:
  MOV    EAX, [$BFFC9CE4]
  MOV    ECX, [EAX]
  CMP    DWORD PTR [ECX+$54], 1
  SBB    EAX, EAX
  INC    EAX
  RET
end;
Aber ich glaub ich nehme Den von MaBuSE, der ist kürzer und funktioniert auch :wink: .

Also Thanks

MfG Mike

SirThornberry 25. Mär 2010 14:48

Re: Herausfinden ob Programm über Debugger ausgeführt wird
 
Der von Mabuse sagt nur ob es aus Delphi heraus ausgeführt wird (also das was du wissen wolltest). Die umfangreichere Variante prüft generell auf Debugger wenn ich das richtig sehe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz