je rencontre un problème (ou pas) de fonctionnement avec les timer, dans le code suivant,
concernant mes deux premiers boutons check , j'ai en commentaire les lignes qui me servent à tester si coché ou pas , cela fonctionne
La procédure "Lancer" est censée récupérer l'état des deux boutons et appliquer le timer qui va bien , après 5 ou 10 secondes, l'application ne se ferme pas
de plus, quand je la ferme par la croix , j'ai le messagerequester du label end1: qui s'affiche .....
Code : Tout sélectionner
; prg Control
; PB 5.30
;
; _ __ __ _____ ___ ___ __ _ _
; | | \/ |/ ____| ____ |__ \ / _ \/_ | || |
; | | \ / | | __ / __ \ ) | | | || | || |_
; _ | | |\/| | | |_ |/ / _` | / /| | | || |__ _|
;| |__| | | | | |__| | | (_| |/ /_| |_| || | | |
; \____/|_| |_|\_____|\ \__,_|____|\___/ |_| |_|
; \____/
;
#NbProcessesMax=10000
Global Dim ProcessesArray.l(#NbProcessesMax)
Enumeration Fenetres
#Fenetre1
EndEnumeration
Enumeration Gadgets
#Titre
#Bouton1
#Bouton2
#Edit1
#Txt1
#Txt2
#Txt3
#Check1
#Check2
#Check3
#Check4
EndEnumeration
Declare ClicBouton1()
Declare ClicBouton2()
Declare GetProcessList()
Declare Lancer()
OpenWindow(#Fenetre1, 0, 0, 800, 600, "Gestion du temps PC / Enfants ", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#Titre, 320,10,140,20, "Controleur Utilisation PC ")
TextGadget(#Txt1, 20,80,240,20,"Temps d'utilisation souhaitée")
TextGadget(#Txt2, 20,300,240,20,"Message d'avertissement ")
TextGadget(#Txt3, 20, 400,240,20, "Afficher le message ")
ButtonGadget(#Bouton1, 290, 320, 70, 20, "Valider")
ButtonGadget(#Bouton2, 700, 480, 70, 20, "Lancer")
EditorGadget(#Edit1, 20, 320, 240, 20)
CheckBoxGadget(#Check1, 20,110 ,240,20, " 1 H ")
CheckBoxGadget(#Check2, 20,140 ,240,20, " 2 H ")
CheckBoxGadget(#Check3, 20,450 ,240,20, " 10 Minutes avant la fin prévue ")
CheckBoxGadget(#Check4, 20,480 ,240,20, " 5 Minutes avant la fin prévue ")
;SetTimer_(WindowID(#Fenetre1),0,5000,?end1) ; test timer
;Gestion événements
; clic boutons
BindGadgetEvent(#Bouton1,@ClicBouton1())
BindGadgetEvent(#Bouton2,@ClicBouton2())
; check boutons
Repeat
Event = WaitWindowEvent(10)
Select EventGadget()
Case Check1
state= GetGadgetState(#Check1)
; test coché ou pas
;If state = #PB_Checkbox_Checked ; 1 H
;MessageRequester("check1", "coché ")
;Goto zeend
;EndIf
EndSelect
Select EventGadget()
Case Check2
state2= GetGadgetState(#Check2)
; test coché ou pas
;If state2 = #PB_Checkbox_Checked
;MessageRequester("check2", "coché ")
;Goto zeend
;EndIf
EndSelect
Select EventGadget()
Case Check3
state3= GetGadgetState(#Check3)
If state3 = #PB_Checkbox_Checked
MessageRequester("check", "coché ")
Goto zeend
EndIf
EndSelect
Select EventGadget()
Case Check4
state4= GetGadgetState(#Check4)
If state4 = #PB_Checkbox_Checked
MessageRequester("check4", "coché ")
Goto zeend
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
Procedure ClicBouton1()
message$ = GetGadgetItemText(#Edit1,0)
MessageRequester("advert", message$)
End
EndProcedure
Procedure ClicBouton2()
GetProcessList()
Lancer()
EndProcedure
Procedure Lancer()
If state = #PB_Checkbox_Checked
SetTimer_(WindowID(#Fenetre1),0,5000,?end1)
EndIf
If state2 = #PB_Checkbox_Checked
SetTimer_(WindowID(#Fenetre1),0,10000,?end2)
EndIf
EndProcedure
; procedure touvée sur forum
Procedure GetProcessList()
If OpenLibrary(0, "psapi.dll")
EnumProcesses = GetFunction(0, "EnumProcesses")
EnumProcessModules = GetFunction(0, "EnumProcessModules")
GetModuleBaseName = GetFunction(0, "GetModuleBaseNameA")
CallFunctionFast(EnumProcesses, ProcessesArray(), #NbProcessesMax, @nProcesses)
For k = 0 To nProcesses >> 2
hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #False, ProcessesArray(k))
If hProcess
CallFunctionFast(EnumProcessModules, hProcess, @BaseModule, 4, @cbNeeded)
Prozess$ = Space(cbNeeded)
CallFunctionFast(GetModuleBaseName, hProcess, BaseModule, @Prozess$, cbNeeded)
If Len(Prozess$) <> 0 ;z.B. System
;AddGadgetItem(Gadget, -1, Prozess$ + Chr(10) + Str(ProcessesArray(k)))
processout$= Prozess$ + " " + Str(ProcessesArray(k))
Debug processout$
; AddGadgetItem(#Lstview1, 0 ,processout$)
EndIf
CloseHandle_(hProcess)
EndIf
Next
CloseLibrary(0)
EndIf
EndProcedure
end1:
MessageRequester("end1", "Timer end1 terminé..")
End
end2:
MessageRequester("end2", "Timer end2 terminé..")
End
zeend:
End