Bonjour à tous,
Après des recherches infructueuses sur le net,
je m'adresse à vous programmeurs.

j'utilise la librairie allegro pour l'affichage de processus.
La procédure liste_processus si-dessous est dans ma boucle
principale 'void main()'.
Lorsque je lance mon programme, il liste bien les processus en
cours mais dès que je lance une autre application, mon prog se
fige et n'affiche pas le nouveau processus sauf si je clique sur la
fenêtre de mon prog.


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
int main(int argc,char *argv[])
{
 // clique souris
 amx=0;
 amy=0;
 
 // écran
 ex=800;
 ey=600;
 
 // initialisation d'allegro
 allegro_init();
 
 // entrées et divers *
 install_keyboard();
 install_mouse ();
 install_timer ();
 
 // initialise le son
 if (install_sound(DIGI_AUTODETECT, MIDI_NONE,"fic.cfg") != 0)
 {
  allegro_message("Erreur d'initialisation du  son\n%s\n", allegro_error);
  return 1;
 }
 
 // initialise l'écran
 if (set_gfx_mode(GFX_DIRECTX_WIN, ex, ey, 0, 0) != 0)
 {
  set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
  allegro_message("impossible d'initialiser le mode graphique\n%s\n", allegro_error);
  return 1;
 }
 
 fond=create_bitmap(SCREEN_W,SCREEN_H);
 trav=create_bitmap(SCREEN_W,SCREEN_H);
 clear_bitmap(fond);
 clear_bitmap(trav);
 
 //affichage accents
 set_uformat(U_ASCII);
 
 parle("bonjour ouvrir dossier inconnu");
 
 temps=0;
 
 // boucle principale
 do
 {
  show_mouse(NULL);
  blit(fond,trav,0,0,0,0,SCREEN_W,SCREEN_H);
 
  // debut appels de procédures
 
   liste_processus();
 
  // fin appels de procédures
 
 show_mouse(trav);
 blit(trav,screen,0,0,0,0,SCREEN_W,SCREEN_H);
 vsync();
 } while (!key[KEY_ESC]);
 allegro_exit();
 return 0;
}
 
 
void liste_processus()
{
 HANDLE hSnapShot,hSnapShotMo;
 PROCESSENTRY32 uProcess= {sizeof(uProcess)};;
 MODULEENTRY32 mProcess = {sizeof(mProcess)};
 int r;
 max_p=1;
 
 // fait une copie de tous les processus et renvoie l'index => hSnapShot
 hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 // initialise la premiere lecture de la liste de processus
 r = Process32First(hSnapShot, &uProcess);
 do   // Cette boucle énnumère tout les processus
 {
  PID = (short) uProcess.th32ProcessID;
  //chemin
  hSnapShotMo = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,uProcess.th32ProcessID);
  Module32First(hSnapShotMo, &mProcess);
  sprintf(list_p[max_p],"%s / %i / %s",uProcess.szExeFile,PID,mProcess.szExePath);
  CloseHandle(hSnapShotMo);
  max_p++;
  r = Process32Next(hSnapShot, &uProcess);
 } while ( r );
 CloseHandle(hSnapShot);
}