C++ Builder 2007 Gestion de Fenetre

Signaler
Messages postés
44
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
15 juillet 2011
-
Messages postés
1
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
15 septembre 2008
-
Bonjour,

Je suis entrain de créer un logiciel comme un anti-virus mais celui-la détecte les virus par leur nom de processus

(avec une base de donné )

j'ai mis deux fenêtre la principale et 2éme Fenêtre s'affiche que si un virus est trouvé

Alors pour le tester j'ai renommer un de mes programmes (arr.exe)
(un nom d'un virus contenant dans la base de donnée ) et j'ai lancé la
recherche

alors au bout de quelque second la 2éme fenêtre s'affiche (car il a détecter le processus arr.exe) (la tout est bon )

mais la fenêtre principale continue la recherche mais moi je veut pas

je veut que la fenêtre principale fige si la 2éme est visible et quand je ferme la 2éme la 1er continue la recherche

et voila mon Problème

Merci

3 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Tu utilises CreateToolHelp32Snapshot, enchaîné avec des Process32First/Next ?

Si oui, quand tu trouves un processus suspect, tu peux par exemple utiliser ShowModal à la place de Show pour afficher la deuxième form.

Voilà le code, mais en Delphi, je n'ai pas C++ Builder ici. Mais Delphi et C++ Builder utilisent la même librairie pour les fenêtre : la VCL.
<hr />procedure TForm1.Button1Click(Sender: TObject);
var
  hProcessSnap: THandle;  // Handle du snapshot
  pe32: PROCESSENTRY32;   // Informations sur un processus
  frm2: TForm2;
begin
  frm2:= TForm2.Create(self);
  Memo1.Clear;

  // Pris du snapshot
  hProcessSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hProcessSnap = INVALID_HANDLE_VALUE then
  begin
    ShowMessage('Echec du snapshot');
    Exit;
  end;

  // Affectation de la taille de la structure avant utilisation
  pe32.dwSize:= SizeOf(PROCESSENTRY32);

  // Récupération des infos sur le premier processus
  if not Process32First(hProcessSnap, pe32) then
  begin
    ShowMessage('Echec de la récupération du premier processus');
    CloseHandle(hProcessSnap);
    Exit;
  end;

  // On boucle sur les processus
  repeat
    // Affichage du nom de l'exe sur la form
    Memo1.Lines.Add(pe32.szExeFile);

    // Recherche de notepad
    if pe32.szExeFile = 'notepad.exe' then
    begin
      ShowMessage('Virus détecté');
      frm2.Caption:= 'Virus ' + pe32.szExeFile + ' détecté';
      frm2.ShowModal;
      ShowMessage('Reprise du scan');
    end;
  until not Process32Next(hProcessSnap, pe32);

  CloseHandle(hProcessSnap);
  FreeAndNil(frm2);
end;
Messages postés
44
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
15 juillet 2011
11
Salut

je vais voir si ça marche mais pas maintenant car j'ai un problème avec mon PC

Merci
Messages postés
1
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
15 septembre 2008

Bonjour je programme aussi sous C++ Builder.
Lorsque tu ouvres ta deuxième fenêtre au lieu d'utiliser la fonction Show()
utilise ShowModal()
a+