Mais si ça n'intéresse personne, je boude...

Il y a pourtant plein de choses intéressantes à tirer de ce code, et je peux répondre à d'éventuelles questions.
Je mettrai le code si quelqu'un montre un semblant d'intérêt.

Code : Tout sélectionner
Global path.s,nbimage,comparaison.b
path=Space(255)
GetModuleFileName_(0,@path,255)
While Right(path,1)<>"\"
path=Left(path,Len(path)-1)
Wend
CreateDirectory(path+"clichés")
;path="c:\surveillance\"
; A MODIFIER--------------- ainsi que le la fin (label Berlioz)
LoadImage(0,path+"berlioz.ico")
;----------------déclarations ---------------------
Structure m
adresse1.l
adresse2.l
type.b
EndStructure
Dim modif.m(3000)
Declare cliche()
Declare suppression()
Declare sauver()
Declare refresh()
;--------------- Lecture config---------------------
Dim image.s(200)
Dim temps.s(200)
nbimage=0
If ReadFile(0,path+"breg.cfg")
Repeat
nbimage+1
image(nbimage)=ReadString()
temps(nbimage)=ReadString()
Until Eof(0) Or nbimage=199
CloseFile(0)
EndIf
;--------------Main------------------------
start=1 : run=1
h=OpenProcess_($1F0FFF,0,GetCurrentProcessId_())
SetPriorityClass_(h,#HIGH_PRIORITY_CLASS)
CloseHandle_(h)
titre.s="Suivi du registre"
win.l=OpenWindow(0,0,0,530,380,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_Invisible,titre)
couleur=GetSysColor_(#COLOR_3DFACE)
CreateGadgetList(win)
CreateImage(2,167,60)
StartDrawing(ImageOutput())
Box(0,0,167,60,couleur)
Locate(0,0)
FrontColor($D6,$B5,$29)
DrawingMode(1)
LoadFont(0,"Times New Roman",12,#PB_Font_Italic|#PB_Font_HighQuality)
DrawingFont(FontID())
DrawText("Suivi registre v 1.0")
Locate(0,18)
DrawText("Pascal Tonnelier")
Locate(0,36)
DrawText("12/2004")
CloseFont(0)
StopDrawing()
ImageGadget(99,355,290,167,60,UseImage(2))
Image= CatchImage(1, ?Berlioz)
StartDrawing(ImageOutput())
DrawingMode(4)
FrontColor($D6,$B5,$29)
Box(0,0,167,251)
Box(1,1,165,249)
Box(2,2,163,247)
StopDrawing()
ImageGadget(100, 355,30,167,250,Image)
ListIconGadget(1,0,10,343,330,"Clichés registre",400,#PB_ListIcon_FullRowSelect|#PB_ListIcon_CheckBoxes|#PB_ListIcon_AlwaysShowSelection)
ButtonGadget(2,10,350,100,20,"Prendre un cliché")
ButtonGadget(3,120,350,120,20,"Comparer deux clichés")
ButtonGadget(4,260,350,60,20,"Effacer")
refresh()
run=1
SetWindowText_(win,@titre)
HideWindow(0,1)
AddSysTrayIcon(0,win,UseImage(0))
SysTrayIconToolTip(0,titre)
HideWindow(0,0)
debut:
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
Select EventWindowID()
Case 0
run=0
Case 10
CloseWindow(10)
FreeMemory(*memoire1)
FreeMemory(*memoire2)
DisableGadget(3,0)
Default
CloseWindow(EventWindowID())
EndSelect
Case #PB_Event_Gadget
Select EventGadgetID()
Case 2
cliche()
Case 4
suppression()
Case 12
For i=1 To nmodif
If GetGadgetItemState(11,i-1)=#PB_ListIcon_Checked Or GetGadgetItemState(11,i-1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
If OpenWindow(20+i,0,0,500,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Détails des valeurs",WindowID(10))
CreateGadgetList(WindowID(20+i))
ListIconGadget(30+i,5,5,480,280,"",1500)
Select modif(i)\type
Case 1
*mem=modif(i)\adresse1
a.s=PeekS(*mem)
AddGadgetItem(30+i,-1,"anciennes valeurs de "+a)
AddGadgetItem(30+i,-1," ")
*mem+Len(PeekS(*mem))+1
a=PeekS(*mem)
While Left(a,1)<>"["
AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
*mem+Len(a)+1
a=PeekS(*mem)
Wend
Case 2
*mem2=modif(i)\adresse2
a.s=PeekS(*mem2)
AddGadgetItem(30+i,-1,"nouvelles valeurs de "+a)
AddGadgetItem(30+i,-1," ")
*mem2+Len(PeekS(*mem2))+1
a=PeekS(*mem2)
While Left(a,1)<>"["
AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
*mem2+Len(a)+1
a=PeekS(*mem2)
Wend
Case 3
*mem=modif(i)\adresse1
a.s=PeekS(*mem)
AddGadgetItem(30+i,-1,"anciennes valeurs de "+a)
AddGadgetItem(30+i,-1," ")
*mem+Len(PeekS(*mem))+1
a=PeekS(*mem)
While Left(a,1)<>"["
AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
*mem+Len(a)+1
a=PeekS(*mem)
Wend
*mem2=modif(i)\adresse2
a.s=PeekS(*mem2)
AddGadgetItem(30+i,-1," ")
AddGadgetItem(30+i,-1,"nouvelles valeurs de "+a)
AddGadgetItem(30+i,-1," ")
*mem2+Len(PeekS(*mem2))+1
a=PeekS(*mem2)
While Left(a,1)<>"["
AddGadgetItem(30+i,-1,ReplaceString(a,"@=","(par défaut)="))
*mem2+Len(a)+1
a=PeekS(*mem2)
Wend
EndSelect
EndIf
EndIf
Next i
Case 3
n=0
For i=1 To nbimage
If GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked Or GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
n+1
If n=1 : aa=i :Else: bb=i:EndIf
EndIf
Next i
If n<>2
MessageRequester("Comparaison de clichés","Sélectionner exactement deux clichés")
Goto debut
EndIf
DisableGadget(3,1)
nmodif=0
If OpenWindow(10,0,0,600,415,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Résultats de la comparaison")
CreateGadgetList(WindowID(10))
ListIconGadget(11,5,5,580,380,"Modifications entre le cliché "+Chr(34)+image(aa)+Chr(34)+" et le cliché "+Chr(34)+image(bb)+Chr(34),1500,#PB_ListIcon_CheckBoxes)
ButtonGadget(12,250,390,60,20,"détails")
If OpenFile(0,path+"clichés\"+image(aa)+".breg") And OpenFile(1,path+"clichés\"+image(bb)+".breg")
UseFile(0)
l=Lof()
*mem=AllocateMemory(l)
*memoire1=*mem
If *mem=0
CloseFile(0)
CloseFile(1)
Goto debut
EndIf
ReadData(*mem,l)
CloseFile(0)
memo=*mem+l
UseFile(1)
l2=Lof()
*mem2=AllocateMemory(l2)
*memoire2=*mem2
If *mem2=0
CloseFile(0)
CloseFile(1)
FreeMemory(*mem)
Goto debut
EndIf
ReadData(*mem2,l2)
CloseFile(1)
memo2=*mem2+l2
add1.b=0:addd2.b=0
While PeekS(*mem)<>"[berliozo]" And PeekS(*mem2)<>"[berliozo]"
count+1
Select CompareMemoryString(*mem,*mem2,1)
Case -1
a.s=PeekS(*mem)
AddGadgetItem(11,-1,"clé effacée = "+a)
nmodif+1
modif(nmodif)\adresse1=*mem
modif(nmodif)\type=1
Repeat
*mem+Len(a)+1
a.s=PeekS(*mem)
Until Left(a,1)="["
Case 1
a.s=PeekS(*mem2)
AddGadgetItem(11,-1,"clé créée = "+a)
nmodif+1
modif(nmodif)\adresse2=*mem2
modif(nmodif)\type=2
Repeat
*mem2+Len(a)+1
a.s=PeekS(*mem2)
Until Left(a,1)="["
Case 0
debut1=*mem
debut2=*mem2
a.s=PeekS(*mem)
Repeat
*mem+Len(a)+1
a.s=PeekS(*mem)
Until Left(a,1)="["
a.s=PeekS(*mem2)
Repeat
*mem2+Len(a)+1
a.s=PeekS(*mem2)
Until Left(a,1)="["
l1=*mem-debut1:l2=*mem2-debut2
If l1<>l2
AddGadgetItem(11,-1,"clé modifiéé = "+PeekS(debut1))
nmodif+1
modif(nmodif)\adresse1=debut1
modif(nmodif)\adresse2=debut2
modif(nmodif)\type=3
Else
If CompareMemory(debut1,debut2,l1)=0
AddGadgetItem(11,-1,"clé modifiée = "+PeekS(debut1))
nmodif+1
modif(nmodif)\adresse1=debut1
modif(nmodif)\adresse2=debut2
modif(nmodif)\type=3
EndIf
EndIf
EndSelect
Wend
run2=1
EndIf
EndIf
EndSelect
EndSelect
Until run=0
End
Procedure cliche()
debutcliche:
nom.s=InputRequester("Cliché de registre","Choisissez un nom (uniquement des lettres et des chiffres)","")
If nom=""
MessageRequester("Cliché registre","Nom vide = cliché annulé")
ProcedureReturn
EndIf
For i=1 To nbimage
If nom=image(i)
MessageRequester("cliché de registre","Nom déjà utilisé")
Goto debutcliche
EndIf
Next i
time.s=Space(255)
date.s=Space(255)
gettimeformat_(0,8,0,0,@time,255)
getdateformat_(0,1,0,0,@date,255)
date=date+" "+time
DeleteFile("c:\bregistre.reg")
RunProgram("regedit.exe","/e c:\bregistre.reg","",1)
If ReadFile(0,"c:\bregistre.reg")
l=Lof()
*mem=AllocateMemory(l)
*memo=*mem
If *mem
ReadData(*mem,l)
CloseFile(0)
DeleteFile("c:\bregistre.reg")
Else
CloseFile(0)
ProcedureReturn
EndIf
*mem2=AllocateMemory(l)
*memo2=*mem2
If *mem And *mem2
While *mem<*memo+l
a.b=PeekB(*mem)
If a>0
; count+1
If a<>13 And a<>10
count+1
PokeB(*mem2,a)
*mem2+1
*mem+1
Else
PokeB(*mem2,0)
*mem2+1
count+1
Repeat
*mem+1
Until (PeekB(*mem)<>13 And PeekB(*mem)<>10 And PeekB(*mem)>0) Or *mem=*memo+l-1
EndIf
Else
*mem+1
EndIf
Wend
PokeS(*mem2,"[berliozo]")
If OpenFile(1,path+"clichés/"+nom+".breg")
*mem2-count
UseFile(1)
WriteData(*mem2,count+11)
CloseFile(1)
sauver()
MessageRequester("Cliché de registre","Cliché effectué")
nbimage+1
image(nbimage)=nom
temps(nbimage)=date
EndIf
EndIf
EndIf
FreeMemory(*memo)
FreeMemory(*memo2)
sauver()
refresh()
EndProcedure
Procedure suppression()
nbimage2=0
Dim image2.s(200)
For i=1 To nbimage
If GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked Or GetGadgetItemState(1,i-1)=#PB_ListIcon_Checked|#PB_ListIcon_Selected
DeleteFile(path+"clichés/"+image(i)+".breg")
Else
nbimage2+1
image2(nbimage2)=image(i)
EndIf
Next i
nbimage=nbimage2
For i=1 To nbimage
image(i)=image2(i)
Next i
refresh()
sauver()
EndProcedure
Procedure sauver()
DeleteFile(path+"breg.cfg")
If OpenFile(0,path+"breg.cfg")
For i=1 To nbimage
; Debug image(i)
; Debug temps(i)
WriteStringN(image(i))
WriteStringN(temps(i))
Next i
CloseFile(0)
EndIf
EndProcedure
Procedure refresh()
ClearGadgetItemList(1)
For i=1 To nbimage
AddGadgetItem(1,-1,image(i)+" : le "+temps(i))
Next i
EndProcedure
Berlioz:IncludeBinary "d:\imageberliozo.bmp"
ben ta posté a 0:28Ah, tout de même
REEDITION : arf ! j'avais pas lu le listingBerlioz:IncludeBinary "d:\imageberliozo.bmp"
on a a peut pres la meme configComment ça marche chez toi? (Moi bien. XP Pro SP2, Centrino 1,9GHz, 512Mo RAM)
the cleaner ne marche pas pareil puisque qu'il est present en permanence , je pense qu'il prend un cliché la premiere fois qu'il est lancé, puis vu qu'il se lance au demarage , il est present en Ram comme un anti virus , il test simplement si quelque chose ecrit dans le registreNote : dis moi si la prise de cliché et la comparaison est plus rapide / lente qu'avec ton utilitaire.