VERIFICATION D'EXECUTION DU DELPHI "DELPHI32"

Utilisateur anonyme - 27 août 2006 à 17:13
salamo1980 Messages postés 2 Date d'inscription jeudi 22 janvier 2004 Statut Membre Dernière intervention 7 mai 2007 - 7 mai 2007 à 22:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39285-verification-d-execution-du-delphi-delphi32

salamo1980 Messages postés 2 Date d'inscription jeudi 22 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
7 mai 2007 à 22:01
maerci amis
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
28 août 2006 à 13:41
Qoprek> pas mal, pour un code écrit de mémoire ;o)

On te pardonnera donc la 5ème ligne de la function EDIBorlandEnCours, où le premier paramètre passé est erronné. Il fallait donc écrire :

GetWindowText(h, nom, 32);

Sinon, ça fonctionne nickel, avec D6 comme avec D4.
qoprek Messages postés 10 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 26 mars 2007
28 août 2006 à 12:37
J'ai pas testé mais d'après mes souvenirs je fait comme cela (donc j'écris le code de mémoire, ptet ya des trucs a changer):

Il faut rechercher la classe TAppBuilder et si elle est présente alors rechercher (d'après le handle récupéré) si le texte de la fenêtre associé contient Delphi. On aurait une fonction de ce style, tu peux t'arreter a la recherche de TAppBuilder si tu veux detecter si un EDI Borland est en cours et pas seulement Delphi, maintenant il faut vérifier que pour les produits MS le nom de classe adéquat et ainsi étoffer la fonction pour essayer de détecter un max d'outils de dévpt:

function EDIBorlandEnCours : Boolean;
Var nom : Array[0..31] Of Char;
h : THandle;
Begin
Result := False;
h := FindWindow('TAppBuilder', Nil);
If h>0 Then Begin
GetWindowText(Result,nom,32);
If AnsiUpperCase(Nom[0]+Nom[1]+Nom[2]+Nom[3]+Nom[4]+Nom[5])='DELPHI' Then Result:=True;
End;
End;

- Une autre possibilité serait de regarder si le fichier exe de delphi est en cours d'utilisation avec une fonction de ce style:

Function DeterminerSiUtilise(fichier:String):Boolean;
Var HFileRes : HFILE;
Begin
If FileExists(fichier) Then Begin
HFileRes:=CreateFile(PChar(fichier),GENERIC_READ Or GENERIC_WRITE,0,Nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
Result:=(HFileRes=INVALID_HANDLE_VALUE);
If Not Result Then CloseHandle(HFileRes);
End Else
Result:=False;
End;

Mais là cela suppose que tu saches (d'apres la BDR) ou est localisé Delphi sur le disque.


Voila si ca peut aider.
hurrycane Messages postés 117 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 19 juin 2009 1
27 août 2006 à 21:59
Tout d'abord :

1. Ton code ne marche pas. parceque tu recherche la presense de delphi par le titre de la fenetre de l'inspecteur d'objet et le nom de sa classe dans la version que ce qui differe selon les version ou bien la personnalisation des fenetres de l'ide !!!

2. Meme si ca marche c'est pas fiable car on peut contourner ceci facilement par la creation d'une applii avec un nom de fiche "Object Inspector" et un nom de classe "TPropertyInspector"

3. Cite moi un seul cas de figure ou en aurait besoin de savoir si delphi est en cours d'execution.si ton exemple etait personnalisable pour rechercher un processu (mais pas de cette maniere) ce serait plus ou moins utile.

4. 3. Le niveau initié ????? pourquoi !

je te donne 2/10 essaie de le développer plus d'enfaire un utilitaire de recherche de processus générique (la recherche par nom de processus c'est plus intéressant !)je pense ue meme dans ton exemple on a pas besoin du nom de classe !!! je vais voir
Utilisateur anonyme
27 août 2006 à 17:13
Ta source est un peu maigre... Je m'attendais à un soft qui se protegerais contre les debuggers, mais on se retrouve avec simplement une recherche de Delphi dans les processus actifs.

De plus, ca ne marche pas chez moi. J'ai WinXP pro SP1, et Delphi 7.0 pro. Ton code me met toujours cette phrase "Delphi et fermer" (en passant on écrit "Delphi est fermé").

Si tu pouvais modifier ta source de facon à ce qu'on sache si l'executable à été lancé normalement ou à travers le debuggeur Delphi, là ca serait effectivement interessant.
Rejoignez-nous