Page 1 sur 1

gestion des processus (bis)

Publié : dim. 13/juin/2004 22:27
par hardy
Quelqu'un pour tester?

téléchargeable (version compilée avec programme (très sommaire) d'installation) sur http://perso.wanadoo.fr/berliozo/
Si ça plante pas trop, je diffuse le code...
J'utilise Windows XP Pro, alors j'aimerais savoir si ça pose pas de problème sur les autres systèmes.
On peut rajouter plein de fonctions, comme changer la priorité,...
Il me semble que ce petit utilitaire peut être bien utile. (n'est ce pas le propre d'un utilitaire? :P ). C'est parce que j'en avais besoin que je l'ai fait! et ma foi, j'en suis assez content.
Normalement ça peut aller. J'ai rajouté un mutex pour éviter les problèmes (rares) d'accès à une même variable par deux threads.

@fweil : pas de problème effectivement pour créer un site sur wanadoo.
Pas regarder la qualité. J'ai fait rapide avec thundersite pour ne pas avoir à taper de code...

Publié : mar. 15/juin/2004 16:37
par nico
C'est normal que ton programme essaie d'accéder au Web, j'aime pas trop ça! 8O :?

Publié : mar. 15/juin/2004 19:12
par hardy
:?: :?: :?: :?:
Il n'y a pas la moindre fonction web dedans !!
Sans mentir, j'ai déjà eu des cas de signalement d'accès web par mon firewall complètement faux.
D'ailleurs, je donnerai le code de la version actuelle (provisoire) si ça marche pas trop mal.
J'ai changé un truc pour cause de bug à l'instant.
Est-ce que ça marche?
J'aimerais savoir, car un ami l'a testé sur Windows Me, et pb... (mais Windows Me est bien connu pour ses bugs)
Chez moi, ça marche (Win XP Pro).

Dis moi si ça marche/plante chez toi, et quel est ton système.

Pour le firewall, doit mal interpréter un comportement du programme. Vu qu'il agit sur les processus, c'est pas impossible.

Publié : mar. 15/juin/2004 20:03
par julien
en principe le parefeu va alerter si tu accéde au net ou utilise une fonction de network

Je teste que les sources après vérification et fais attention aux personnes que je ne connais pas suffisament ... (nouveau inscrits)

Je pense que d'autres sont comme moi (apres le coup du virus) alors je pense que si tu veux qu'un max de personne teste ton code et t'aide en même temps il est préférable de poster ton code source... non parce que l'on veut te le voler mais simplement pas méfiance...

A bon entendeur :wink:

Publié : mar. 15/juin/2004 21:03
par hardy
L'ai déjà posté!
ceci-dit quelques modif.

Pas regarder l'optimisation : pas encore fait.
Et puis il faut que je mette des listes chainées à la place des tableaux.

J'avis eu qques pb de partage de variables. Mais bon, avec un mutex, ça devrait aller.

Bon, alors il y a deux parties.

A compiler comme surveillance.exe

Code : Tout sélectionner

If FindWindow_(0,"Surveillance - Mode pause") Or FindWindow_(0,"Surveillance - Mode normal")
MessageRequester("Surveillance","Programme déjà actif")
End
EndIf


Declare privilege(pid)
privilege(GetCurrentProcessId_())


Structure thread32
size.l
use.l
idth.l
parentid.l
base.l
delta.l
flags.l
EndStructure


Declare refresh()
Declare sauver()
Declare kill(idd.l)
Declare creerstatut()
Declare cherche(nom.s)
Declare focus(req)
Declare resetliste()
Declare reception(Window, Message, wParam, lParam)
Declare request()
Declare pause(pid)
Declare resume(pid)
Declare examen()

If OpenLibrary(0,"kernel32.dll")=0
MessageRequester("Surveillance","Erreur d'ouverture de kernel32.dll")
End
EndIf

idsurveillance=GetCurrentProcessId_()

Global path.s,idsurveillance
path.s=Space(255) 
GetModuleFileName_(0,@path,255)

While Right(path,1)<>"\"
path=Left(path,Len(path)-1)
Wend

;path="c:\surveillance\"

; A MODIFIER--------------- ainsi que le la fin (label Berlioz)

LoadImage(0,path+"berlioz.ico")

; ----------------------------------



Dim requeteid.l(200)
Dim requetenom.s(200)
Dim liste.s(1000)
Dim statut.b(1000)
Dim actuel.s(1000)
Dim id.l(1000)
Dim etat.b(1000)
Global listprocess.s,nbliste.l,nprocess.l,requeteactuelle.b
Global liste,statut,adresse.l,nouveau.b,reprise.b
Global actuel,id,nbactuel.l,start.b,entree.s,supprime.b
Global run.b,nbrequete.l,hwin.l,mode.b,titre.s,x.l,runsprite.b
Global statutajout.b,nomajout.s,hmutex

; -------------------------------------------
Global rouge
rouge=CreateSolidBrush_(RGB(255,0,0))




;--------------- Lecture config---------------------

nrequest=0

If ReadFile(0,path+"surv.cfg")
mode=ReadByte()
nbliste=0
Repeat
nbliste=nbliste+1
liste(nbliste)=ReadString()
statut(nbliste)=ReadByte()
Until Eof(0)
CloseFile(0)
Else
nbliste=3
liste(1)="surveillance.exe"
statut(1)=1
liste(2)="relance.exe"
statut(2)=1
liste(3)="system"
statut(3)=1
sauver()
EndIf

If mode
titre="Surveillance - Mode pause"
Else
titre="Surveillance - Mode normal"
EndIf

; ------création mutex-----------------
nommutex.s="surveillance"
hmutex=CreateMutex_(0,0,@nommutex)

;--------------Main------------------------
start=1 : run=1 :frequence=100

win.l=OpenWindow(0,0,0,530,380,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_window_invisible,titre)
CreateGadgetList(win)
couleur=$9A8A65
CreateImage(2,167,60)
StartDrawing(ImageOutput())
Box(0,0,167,60,couleur)
Locate(0,0)
FrontColor(255,255,255)
DrawingMode(1)
LoadFont(0,"Times New Roman",12,#PB_Font_Italic|#PB_Font_HighQuality)
DrawingFont(FontID())
DrawText("Surveillance v1.01")
Locate(0,18)
DrawText("Pascal Tonnelier")
Locate(0,36)
DrawText("06/2004")
CloseFont(0)
StopDrawing()
ImageGadget(99,355,290,167,60,UseImage(2))
Image= CatchImage(1, ?Berlioz) 
ImageGadget(100, 355,30,167,250,Image)
PanelGadget(1,0,0,350,350)
AddGadgetItem(1,0,"Processus en cours")
ListIconGadget(2,0,0,330,280,"Nom",150)
AddGadgetColumn(2,1,"ID",58)
AddGadgetColumn(2,2,"Etat",100)
ButtonGadget(5,10,290,60,20,"Stopper")
ButtonGadget(8,90,290,60,20,"Pause")
ButtonGadget(15,170,290,60,20,"Reprendre")
ButtonGadget(21,250,290,80,20,"Changer mode")
AddGadgetItem(1,1,"Statuts")
ListIconGadget(3,0,0,330,280,"Nom",150)
AddGadgetColumn(3,1,"Statut",158)
ButtonGadget(4,10,290,60,20,"Changer")
ButtonGadget(6,90,290,60,20,"Créer")
ButtonGadget(7,170,290,60,20,"Effacer")

Global hbrush
hBrush = CreateSolidBrush_(couleur) 
SetClassLong_(win, #GCL_HBRBACKGROUND, hBrush) 
SetClassLong_(GadgetID(1), #GCL_HBRBACKGROUND, hBrush)

run=1
SetWindowText_(win,@titre)
SetWindowCallback(@reception())
RunProgram(path+"relance.exe",Str(win),"")

AddSysTrayIcon(0,win,UseImage(0))
SysTrayIconToolTip(0,"Surveillance")

Repeat
event=WaitWindowEvent()

If IsIconic_(win)<>0 And hide=0
HideWindow(0,1):hide=1
EndIf

Select event
    
  Case #PB_Event_SysTray
  HideWindow(0,0):hide=0
  SetForegroundWindow_(win)
  Case #PB_Event_CloseWindow
  If MessageRequester("Surveillance","Quitter?",#PB_MessageRequester_YesNo)=6
  run=0
  sauver()
  refresh()
  EndIf 
    
  Case #PB_Event_Gadget
  Select EventGadgetID()
  
    Case 21
    
    If mode
    mode=0:titre="Surveillance - Mode normal"
    SetWindowText_(win,@titre)
    Else
    mode=1:titre="Surveillance - Mode pause"
    SetWindowText_(win,@titre)
    EndIf
  
    Case 5
    n=GetGadgetState(2)+1
    If n>0
    If GetGadgetText(2)<>"relance.exe"
    kill(id(n))
    EndIf
    EndIf
    
    Case  4
    n=GetGadgetState(3)+1
    If n>0
    If statut(n)=1
    statut(n)=0
    Else
    statut(n)=1
    EndIf
    resetliste()
    sauver()
    EndIf
    
    Case 6
    CreateThread(@creerstatut(),0)
    
    Case 7
    n=GetGadgetState(3)+1
    If n>0
    For i=n+1 To nbliste
    liste(i-1)=liste(i)
    statut(i-1)=statut(i)
    Next i
    nbliste=nbliste-1
    sauver()
    resetliste()
    EndIf   
    
    Case 8
    n=GetGadgetState(2)+1
    If n>0 And etat(n)=0
    pause(id(n))
    etat(n)=1
    resetliste()
    EndIf

    Case 15
    n=GetGadgetState(2)+1
    If n>0 
    resume(id(n))
    etat(n)=0
    resetliste()
    EndIf

  EndSelect
  
EndSelect
ForEver
End

;--- Procedures --- 

Procedure refresh()

If hmutex
WaitForSingleObject_(hmutex,500)
EndIf

Dim encours.s(1000)
oldnbactuel=nbactuel

If supprime
supprime=0
nbrequete=nbrequete-1
For i=1 To nbrequete
requeteid(i)=requeteid(i+1)
requetenom(i)=requetenom(i+1)
Next i
EndIf

If Len(nomajout)>0
nbliste=nbliste+1
statut(nbliste)=statutajout
liste(nbliste)=nomajout
nomajout=""
sauver()
resetliste()
EndIf

examen()
For j=1 To nbactuel
nom.s=actuel(j)
idd.l=id(j)
pos=cherche(nom)
If LCase(nom)="relance.exe" And run=0
kill(idd)
EndIf

If pos
  If statut(pos)=0
    kill(idd)
  EndIf
 Else
  vu=0
  For i=1 To nbrequete
  If requeteid(i)=idd
  vu=1
  EndIf
  Next i
  If vu=0
  If mode :pause(idd)
  EndIf
  nouveau=1
  nbrequete=nbrequete+1
  requeteid(nbrequete)=idd
  requetenom(nbrequete)=nom
  EndIf
EndIf

Next j

If requeteactuelle=0 And nbrequete>0
requeteactuelle=1
CreateThread(@request(),0)
EndIf

If run=0 : End :EndIf

ReleaseMutex_(hmutex)


If nouveau Or start Or nbactuel<>oldnbactuel
ResetListe()
EndIf
nouveau=0:start=0

EndProcedure

;------------------------------------------------

Procedure sauver()
DeleteFile(path+"surv.cfg")
If OpenFile(0,path+"surv.cfg")
WriteByte(mode)
For i=1 To nbliste
WriteStringN(liste(i))
WriteByte(statut(i))
Next i
CloseFile(0)
EndIf

EndProcedure

;------------------------------------------------

Procedure kill(idd)

h=OpenProcess_($1F0FFF,0,idd)
GetExitCodeProcess_(h,@code)
TerminateProcess_(h,code)
CloseHandle_(h)

EndProcedure


;-------------------------------------------------

Procedure creerstatut()
req2=OpenWindow(2,0,0,500,120,#PB_Window_screencentered|#PB_Window_SystemMenu,"Création de statut")
  CreateGadgetList(req2)
  TextGadget(40,30,10,400,14,"Nom (ou partie) du processus")
  EditorGadget(50,30,30,400,20)
  TextGadget(30,30,70,270,14,"Autoriser?")
  ButtonGadget(10,100,60,60,30,"Oui")
  ButtonGadget(20,200,60,60,30,"Non")
SetWindowPos_(req,-1,0,0,0,0,2|1)
run3=1
Repeat
event2=WaitWindowEvent()
Select event2 
    Case #PB_Event_CloseWindow
    run3=0
    Case #pb_event_gadget
    Select EventGadgetID()
    Case 10
      run3=0
      nom.s=GetGadgetText(50)
      If nom<>""
      If cherche(nom)
      MessageRequester("Surveillance","Déjà répertorié")
      Else
      nbliste=nbliste+1:liste(nbliste)=nom:statut(nbliste)=1
      sauver() : nouveau=1
      EndIf
      EndIf
    
    Case 20
      run3=0
      nom.s=GetGadgetText(50)
      If nom<>""
      If cherche(nom)
      MessageRequester("Surveillance","Déjà répertorié")
      Else
      nbliste=nbliste+1:liste(nbliste)=nom:statut(nbliste)=0
      sauver() : nouveau=1
      EndIf
      EndIf
    
    EndSelect
EndSelect

Until run3=0
CloseWindow(3)

EndProcedure


;-----------------------------------------------------

Procedure cherche(nom.s)
For i=1 To nbliste
If FindString(LCase(nom),LCase(liste(i)),1)
ProcedureReturn i
EndIf
Next i
ProcedureReturn 0
EndProcedure

;---------------------------------------------------

Procedure examen()
If Left(entree,2)="&&"
nbactuel=0
entree=Right(entree,Len(entree)-2)
Repeat
pos=FindString(entree,"&&",1)
If pos
nbactuel=nbactuel+1
actuel(nbactuel)=Left(entree,pos-1)
entree=Right(entree,Len(entree)-pos-1)
pos=FindString(entree,"&&",1)
id(nbactuel)=Val(Left(entree,pos-1))
entree=Right(entree,Len(entree)-pos-1)
Else
Break
EndIf
If id(nbactuel)=0
nbactuel=nbactuel-1
EndIf
Until Len(entree)=0
EndIf
EndProcedure

;---------------------------------------------------

Procedure ResetListe()
Dim liste2.s(nbliste+1)
For k=1 To nbliste
liste2(k)=liste(k)+Str(statut(k))
Next k

ClearGadgetItemList(2)
ClearGadgetItemList(3)
SortArray(liste2(),2,1,nbliste)
For k=1 To nbactuel
If etat(k)
state.s="En pause"
Else
state.s="Actif"
EndIf

AddGadgetItem(2,-1,actuel(k)+Chr(10)+Str(id(k))+Chr(10)+state)
Next k
For k=1 To nbliste
liste(k)=Left(liste2(k),Len(liste2(k))-1)
If Right(liste2(k),1)="1"
statut(k)=1
state.s="Autorisé"
Else
statut(k)=0
state.s="Interdit"
EndIf
AddGadgetItem(3,-1,Left(liste2(k),Len(liste2(k))-1)+Chr(10)+state)
Next k
EndProcedure



Procedure reception(Win, Message, wParam, lParam)
Shared Sender_ProcessHandle.l
  result = #PB_ProcessPureBasicEvents
  
  If result=#PB_Event_CloseWindow
  run=0
  refresh()
  EndIf
    
  Select Message
  
    Case 673
       Sender_ProcessHandle = OpenProcess_(282, 0, lParam)
      If Sender_ProcessHandle <> 0
        result =1
      Else
        result =0
      EndIf
      
    Case 674
      entree.s = Space(lParam)
      If ReadProcessMemory_(Sender_ProcessHandle, wParam, @entree, lParam, @BytesRead.l) <> 0
        If BytesRead <> lParam
          result =0
        Else
        If Len(entree)>0
          refresh()
        EndIf
          result =1
        EndIf
      Else
        result =0
      EndIf
    
   EndSelect
  ProcedureReturn result
EndProcedure


; ----------------------------------------------

Procedure request()

nom.s=requetenom(1)
pid=requeteid(1)
  req=OpenWindow(10,0,0,500,60,#PB_Window_screencentered,"Processus non répertorié")
  CreateGadgetList(req)
  TextGadget(30,30,20,270,40,"Autoriser "+nom+"?")
  ButtonGadget(10,300,10,60,30,"Oui")
  ButtonGadget(20,400,10,60,30,"Non")
  run2=1
  
  Repeat
  Delay(1)
  SetWindowPos_(req,-1,0,0,0,0,2|1)
  event2=WindowEvent()
  Select event2 
    Case #pb_event_gadget

    If hmutex
    WaitForSingleObject_(hmutex,500)
    EndIf
    
    Select EventGadgetID()
    
    Case 10
    statutajout=1
    resume(pid)
    run2=0
    
    Case 20
    run2=0
    statutajout=0
    kill(pid)
      
    EndSelect
  EndSelect
  Until run2=0
  
  nomajout=nom
    
  requeteactuelle=0
  supprime=1
  
  ReleaseMutex_(hmutex)
  
  CloseWindow(10)
EndProcedure

; ---------------------------------------------

Procedure pause(pid)

thread.thread32

snap = CallFunction (0, "CreateToolhelp32Snapshot",4,0)
If snap

thread\size=SizeOf(thread32)
CallFunction(0,"Thread32First",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  SuspendThread_(h)
  CloseHandle_(h)
EndIf

While CallFunction(0,"Thread32Next",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  SuspendThread_(h)
  CloseHandle_(h)
EndIf

Wend

EndIf

EndProcedure

; -----------------------------------------
Procedure resume(pid)

thread.thread32

snap = CallFunction (0, "CreateToolhelp32Snapshot",4,0)
If snap

thread\size=SizeOf(thread32)
CallFunction(0,"Thread32First",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  ResumeThread_(h)
  CloseHandle_(h)
EndIf

While CallFunction(0,"Thread32Next",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  ResumeThread_(h)
  CloseHandle_(h)
EndIf

Wend

EndIf
EndProcedure

; -------------------------------------------

Procedure privilege(pid)

ph=OpenProcess_($1F0FFF,1,pid)
OpenProcessToken_(ph,$20,@h)

Dim p.s(29)
p(0)="SeAssignPrimaryTokenPrivilege"
p(1)="SeAuditPrivilege"
p(2)="SeBackupPrivilege"
p(3)="SeChangeNotifyPrivilege"
p(4)="SeCreateGlobalPrivilege"
p(5)="SeCreatePagefilePrivilege"
p(6)="SeCreatePermanentPrivilege"
p(7)="SeCreateTokenPrivilege"
p(8)="SeDebugPrivilege"
p(9)="SeEnableDelegationPrivilege"
p(10)="SeImpersonatePrivilege"
p(11)="SeIncreaseBasePriorityPrivilege"
p(12)="SeIncreaseQuotaPrivilege"
p(13)="SeLoadDriverPrivilege"
p(14)="SeLockMemoryPrivilege"
p(15)="SeMachineAccountPrivilege"
p(16)="SeManageVolumePrivilege"
p(17)="SeProfileSingleProcessPrivilege"
p(18)="SeRemoteShutdownPrivilege"
p(19)="SeRestorePrivilege"
p(20)="SeSecurityPrivilege"
p(21)="SeShutdownPrivilege"
p(22)="SeSyncAgentPrivilege"
p(23)="SeSystemEnvironment"
p(24)="SeSystemProfilePrivilege"
p(25)="SeSystemtimePrivilege"
p(26)="SeTakeOwnershipPrivilege"
p(27)="SeTcbPrivilege"
p(28)="SeUndockPrivilege"
p(29)="SeUnsolicitedInputPrivilege"

Structure LI
low.l
high.l
EndStructure

Structure luidandattributes
pluid.LI
attrib.l
EndStructure

Structure privileges
count.l
privilege.luidandattributes
EndStructure

shut.LI
result=1
For i=0 To 29
LookupPrivilegeValue_(0,@p(i),@shut)

newprivilege.privileges
newprivilege\count=1
newprivilege\privilege\attrib=2
newprivilege\privilege\pluid\low=shut\low
newprivilege\privilege\pluid\high=shut\high

result=result*AdjustTokenPrivileges_(h,0,newprivilege,SizeOf(privileges),0,0)
Next i

ProcedureReturn result
EndProcedure

Berlioz:IncludeBinary "e:\berliozo.bmp"
seconde partie à compiler comme relance.exe dans le même répertoire

Code : Tout sélectionner

path.s=Space(255) 
GetModuleFileName_(0,@path,255)

While Right(path,1)<>"\"
path=Left(path,Len(path)-1)
Wend

hWnd=Val(ProgramParameter())
If SendMessage_(hWnd,673, 0, GetCurrentProcessId_())=0
End
EndIf

Dim actuel.s(100)
Structure PROCESSENTRY32 
    dwSize.l 
    cntUsage.l 
    th32ProcessID.l 
    th32DefaultHeapID.l 
    th32ModuleID.l 
    cntThreads.l 
    th32ParentProcessID.l 
    pcPriClassBase.l 
    dwFlags.l 
    szExeFile.b[260] 
EndStructure 

If OpenLibrary (0,"kernel32.dll")=0
MessageRequester("Relance","Echec initialisation")
Else

Repeat
nbactuel=0
    s=CallFunction(0,"CreateToolhelp32Snapshot",274,0)
    If s
        DefType.PROCESSENTRY32 Proc32 
        Proc32\dwSize = SizeOf(PROCESSENTRY32) 
           If CallFunction(0,"Process32First",s, @Proc32) 
            If Len(PeekS(@proc32\szexefile))>0
            nbactuel=nbactuel+1
            actuel(nbactuel)="&&"+PeekS(@Proc32\szExeFile)+"&&"+Str(proc32\th32ProcessID)
            EndIf
            While CallFunction (0, "Process32Next", s, @Proc32)
            If Len(PeekS(@proc32\szexefile))>0 
                nbactuel=nbactuel+1
                actuel(nbactuel)="&&"+PeekS (@Proc32\szExeFile)+"&&"+Str(proc32\th32ProcessID)
            EndIf
            Wend
           EndIf
     EndIf 
     CloseHandle_(s)
SortArray(actuel(),2,1,nbactuel)

If nbactuel=0
RunProgram(path+"relance.exe",Str(hWnd),"")
End
EndIf

resultat.s=""
For k=1 To nbactuel
resultat=resultat+actuel(k)
Next k

If SendMessage_(hWnd,674, @resultat, Len(resultat))=0
RunProgram("c:\survey\relance.exe",Str(hWnd),"")
End
EndIf
Delay(200)

ForEver
EndIf
End


Evidemment, modifier les images.
Le prog à lancer est surveillance.exe

copie d'un vague mode d'emploi:

Mode d'emploi de Surveillance.exe (V 1.00)


Surveillance est un programme de gestion et de surveillance des processus (programmes)
Il examine régulièrement tous les programmes en cours d'exécution et :

- Si un programme en cours est répertorié comme interdit, il le stoppe.

- Si un programme en cours n'est pas répertorié, il demande à l'utilisateur si ce dernier l'autorise ou
l'interdit.

Le programme posséde deux modes: pause et normal (au départ il est en mode normal)

en mode normal, durant la requête, le processus n'est pas bloqué.
en mode pause, durant la requête, le processus est bloqué.

le menu "mode" permet de changer le mode.

L'onglet "processus" permet de voir les processus en cours, ainsi que de les stopper/suspendre/reprendre,
en sélectionnant le processus et en cliquant sur le bouton adéquat.

ne mettez pas en pause, ou stoppez, un processus système si vous n'êtes pas sûr...

L'onglet "statuts" permet de voir tous les statuts répertoriés, de rajouter, supprimer, modifier un statut.

Notez que si par exemple un statut "abc" est créé comme autorisé, tout processus dont une partie du nom
est "abc" sera autorisé, ceci parce que certains programmes, comme des compilateurs (pour les programmateurs)
créent des processus ayant toujours une racine identique, mais augmentée d'un nombre variable.

Lors de son lancement, le programme s'icônise dans la barre des tâches (en bas à droite).
Pour ouvrir l'interface, il suffit de cliquer sur cette icône.

Le programme à lancer est surveillance.exe. relance.exe n'est qu'un programme auxiliaire utilisé par le
premier et n'a pas à être lancé manuellement.

TRES IMPORTANT:

Le fichier de configuration initial (surv.cfg) répertorie déjà des processus système courants comme
autorisés, et divers autres que vous pourrez supprimer à votre guise.
En tout état de cause, ne pas activer le mode pause avant d'avoir fait fonctionner le programme durant
une session, une mise en veille, une reprise, et un arrêt et redémarrage du système avec surveillance
lancé au démarrage, et d'avoir répondu aux diverses requêtes, avant d'activer le mode pause, sans quoi
le programme peut mettre en pause des processus système non répertoriés, ce qui peut provoquer
(très rarement. juste valable pour trois-quatre processus critiques) une non réponse du système.
(pas gravissime, mais à éviter)

Publié : mer. 16/juin/2004 12:04
par hardy
Oubli : au début du premier prog, mettre path="c:\surveillance\" en remarque. (c'est pour les tests en mode debug...)

Publié : mer. 16/juin/2004 17:41
par hardy
Ben m... alors. Mon firewall vient de me dire que surveillance.exe essaie de transmettre à ... :!: :!:
Pourtant c'est le code ci-dessus.
Il est con ou quoi ce firewall (le mien c'est Sygate)?

Quelqu'un voit d'où ça peut venir?

Faut dire qu'une fois il m'a fait le coup avec Word! J'en suis resté pantois.
Quand même, des fois il doit se planter.

Publié : mer. 16/juin/2004 21:26
par hardy
Ah, bug repéré. (processus vide, boucle infinie...)
Je change le code plus haut.