C++ Builder 2007 Gestion de Fenetre

cs_xmustapha Messages postés 44 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 15 juillet 2011 - 9 sept. 2008 à 01:29
tondoudou Messages postés 1 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 15 septembre 2008 - 15 sept. 2008 à 22:49
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

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 sept. 2008 à 13:34
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;
0
cs_xmustapha Messages postés 44 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 15 juillet 2011 24
15 sept. 2008 à 14:47
Salut

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

Merci
0
tondoudou Messages postés 1 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 15 septembre 2008
15 sept. 2008 à 22:49
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+
0
Rejoignez-nous