Page 1 sur 1

boucle

Publié : jeu. 25/oct./2007 17:54
par venom
bonjour,

voila j'ai déja eu plusieur fois eu affaire a ce genre de probleme mais malhereusement je n'est jamais bien compris.

voila est-ce qu'une personne très simpatique pourrai m'expliquer très clairement comment faire pour que cette procedure s'execute tout les X temps :? exemples tout les 5 minutes.

voici le code et d'avance merci.

Code : Tout sélectionner

Procedure appuie()
If ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
ProfondeurCouleur = DesktopDepth(0)
Else
End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP)

#Desk = #True
If #Desk = #True
keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
EndIf
EndProcedure
appuie()

Publié : jeu. 25/oct./2007 18:04
par tmyke
Il existe pas mal de solution pour arriver à ce que tu cherches, par exemple
tu peux faire un petit timer, genre ça

Code : Tout sélectionner

base =  ElapsedMilliseconds()
Repeat
  time = ElapsedMilliseconds() - base
  
  If( time > 1000)
    Debug "time"
    base =  ElapsedMilliseconds()
  EndIf

ForEver
le message s'affiche toute les secondes... (tu mets 300000 à la place de 1000 pour avoir toutes
les 5 mn). Le code est simple, et assez simple à comprendre je pense.

;)

Publié : jeu. 25/oct./2007 18:11
par comtois

Publié : jeu. 25/oct./2007 18:57
par venom
ok je vous en remercie je vais soignieusement maitre sa de coté :wink: .

d'aprés vos reponses comtois ton systeme releve d'utilisé les api. c'est bien mais bon si je peut evité ( raison de compatibilité ). mais je t'en remercie.
je pense prendre la technique de tmyke.

si non merci a vous deux.


@++

Publié : jeu. 25/oct./2007 19:07
par Jacobus
Un exemple concret avec les api (oui je sais mais bon)
Programme fonctionnel qui te permet de créer une capture toute les 5 secondes (à modifier selon), de voir les images se créer au fur et à mesure dans un explorer, d'ouvrir le dossier pour visualiser les images et accessoirement de quitter le prog. Pour lle reste tu trouveras bien des tas de fonctions à lui ajouter ( ça peut servir d'espion :lol: mais je te dirais pas comment faire...Trouves tout seul.)

Code en PB 4.02
Créer un dossier pour la réception des images (et indiquer le chemin dans le prog), idéalement dans le dossier du même nom, mais chacun son truc.

Code : Tout sélectionner

Enumeration
#WINMAIN
#Screens_Browser
#BtnDirExplore
#BtnQuitter
EndEnumeration

Global MonDossier$
MonDossier$ = "..\Mes documents\Mes images\Mes screens\" ; Dossier à créer avant dans le répertoire Mes images par exemple

Procedure appuie() 

If ExamineDesktops() 
  Ecran_Largeur = DesktopWidth(0) 
  Ecran_Hauteur = DesktopHeight(0) 
  ProfondeurCouleur = DesktopDepth(0) 
 Else 
  End 
EndIf 
  DC = GetDC_(0) 
  CreateImage(0, Ecran_Largeur, Ecran_Hauteur) 
  Dessin = StartDrawing(ImageOutput(0)) 
  BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000) 
  StopDrawing() 
  ReleaseDC_(0, DC) 
  Date$ = FormatDate("%yyyy%mm%dd_%hh%ii%ss", Date())
  SaveImage(0, MonDossier$+"MyScreen"+Date$+".bmp", #PB_ImagePlugin_BMP) ; incrémente chaque image, évite l'écrasement.
  #Desk = #True 
  If #Desk = #True 
   keybd_event_(#VK_SNAPSHOT, 0, 0, 0) 
  EndIf 
  
EndProcedure 

FlagWin =#PB_Window_SystemMenu |#PB_Window_MinimizeGadget |#PB_Window_TitleBar
ww = 500 : wh = 375
If OpenWindow(#WINMAIN,0,0,ww,wh,"Les photos de mon écran ^_^" ,FlagWin)=0 Or CreateGadgetList(WindowID(#WINMAIN))=0 
End 
EndIf
 
 ExplorerListGadget(#Screens_Browser, 5, 5, 490, 325, MonDossier$+"*.bmp",#PB_Explorer_MultiSelect|#PB_Explorer_NoParentFolder )
  ;ChangeListIconGadgetDisplay(#Screens_Browser, #PB_ListIcon_LargeIcon)
 
 ButtonGadget(#BtnDirExplore,5,340,100,25,"Ouvrir")
  GadgetToolTip(#BtnDirExplore,"Ouvrir et afficher mes belles images")
 
 ButtonGadget(#BtnQuitter,390,340,100,25,"Quitter")
  GadgetToolTip(#BtnQuitter,"Arrêter les photos! N'en jeter plus!")
 
 SetTimer_(WindowID(#WINMAIN),1,5000,@appuie()) 
; changer la valeur selon temps voulu, là ça va remplir le disque rapidement si tu l'oublies!!!

Repeat
 Event = WaitWindowEvent() 
  If Event = #PB_Event_Gadget
    Select EventGadget()
    
     Case #BtnDirExplore : ShellExecute_(0,"open",MonDossier$,0,0,1) ; ouvre le dossier dans l'explorateur Windows
     
     Case #BtnQuitter : Event = #PB_Event_CloseWindow ; ben là on ferme!
     
    EndSelect  
  EndIf 
Until Event = #PB_Event_CloseWindow
  KillTimer_(WindowID(#WINMAIN),1) ; on arrête le timer avant de terminer le prog         
End