IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Tester si l'application est exécutée depuis l'EDI


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut Tester si l'application est exécutée depuis l'EDI
    Bonjour à tous,

    J'aimerais savoir s'il existe un moyen de savoir si une application est exécutée depuis l'EDI via le débogueur de Delphi.

    Un peu à la manière de la directive de compilation pour tester la version de Delphi utilisée.

    {$IFDEF VER130}
    a faire si Delphi5
    {$ELSE}
    a faire sinon
    {$ENDIF}

    ou VERXXX serait remplacé par autre chose....

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    VariableGlobale System.DebugHook pour un débug via Delphi

    Sinon pour un mode debug général, tu as la fonction Windows.IsDebuggerPresent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    //------------------------------------------------------------------------------
    // Voir IsDebuggerPresent (API Windows SDK)                                    -
    //                                                                             -
    // L'aide API SDK Windows semble indiquer que cette function IsDebuggerPresent -
    // n'est disponible qu'avec NT, à vérifier sur Win9x                           -
    //                                                                             -
    // IsRunInDebugger remplace la déclaration simple de Library sous Delphi       -
    //                                                                             -
    // interface                                                                   -
    //    function IsDebuggerPresent(): BOOL; stdcall;                             -
    //    {$EXTERNALSYM IsDebuggerPresent}                                         -
    //                                                                             -
    // implementation                                                              -
    //    function IsDebuggerPresent; external kernel32 name 'IsDebuggerPresent';  -
    //                                                                             -
    //----------------------------------------------------------------------------*)
     
    var
       _FKernelDLL: THandle = 0;
       _FVersionWindows: DWord = 0;
       _FFlagDebug: Boolean = False;
       _FFlagDebugChecked: Boolean = False;
       _IsDebuggerPresent: function: BOOL; stdcall;
     
    function IsRunInDebugger(): Boolean;
    var
       OSInfo: OSVERSIONINFO;
    begin
       Result := _FFlagDebug;
     
       // Est-ce que le Flag a été Lu, si oui on Sort
       if _FFlagDebugChecked then
          Exit;
     
       // To know if a Application is running under de Delphi IDE or when it's running stand-alone
       if System.DebugHook <> 0 then
       begin
          _FFlagDebug := True;
          _FFlagDebugChecked := True;
       end;
     
       // Récupération de la Version de Windows
       if _FVersionWindows = 0 then
       begin
          OSInfo.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
          if GetVersionEx(OSInfo) then
          begin
             _FVersionWindows := OSInfo.dwPlatformId;
          end;
       end;
     
       // Si la Versin de Window est inférieur à NT ou 9x, le Résultat est Faux
       if _FVersionWindows >= VER_PLATFORM_WIN32_WINDOWS then
       begin
          // Chargement de la DLL et de la Procedure
          if @_IsDebuggerPresent = nil then
          begin
             if _FKernelDLL = 0 then
             begin
                _FKernelDLL := LoadLibrary(PChar(Kernel32));
             end;
     
             if _FKernelDLL > 0 then
             begin
                @_IsDebuggerPresent := GetProcAddress(_FKernelDLL, 'IsDebuggerPresent');
             end;
          end;
     
          // Utilisation de la Procédure Chargée
          if Assigned(@_IsDebuggerPresent) then
          begin
            _FFlagDebug := _IsDebuggerPresent();
          end else
          begin
             _FFlagDebug := False;
          end;
          // Peu Importe si la Procédure Existe, on considère que l'on a testé la valeur
          _FFlagDebugChecked := True;
     
       end else
       begin
          // Windows antérieur à WinNT, Détection du Mode Débogage impossible !
          _FFlagDebug := False;
          _FFlagDebugChecked := True;
       end;
     
       Result := _FFlagDebug;
    end;
     
    initialization
      _FKernelDLL := 0;
     
    finalization
      if _FKernelDLL > 0 then
         FreeLibrary(_FKernelDLL);
     
    end.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    C'est clair, rapide et précis !

    Merci à toi ShaileTroll

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/09/2014, 12h11
  2. Réponses: 0
    Dernier message: 15/10/2012, 17h39
  3. Réponses: 2
    Dernier message: 05/04/2012, 14h06
  4. Réponses: 3
    Dernier message: 06/02/2012, 17h16
  5. Tester si une application est ouverte
    Par exceljm dans le forum VBScript
    Réponses: 1
    Dernier message: 28/05/2007, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo