J'avais besoin de pouvoir faire des copies d'écran (sans forcément être 'invisible'...)
J'ai utilisé le programme que j'ai modifié, avec aussi d'autres morceaux de codes que j'ai trouvé ça et là dans les forums dont je ne pourrais plus vous citer les auteurs et qui sont pourtant bien utiles
PS: j'appartient à la section 'Débutant des Débutants', le code n'est donc pas très "propre" (utilisation de goto... et autre artifices de bidouillages). Par contre il fonctionne parfaitement.
Je joint ci-dessous le source principal du MENU car je ne sais pas comment vous envoyer mon fichier ZIP avec les sources+exécutables+icone+fichier_paramètre....
Utilisation d'un fichier de paramètres (choix du chemin destination, code pour arrêter le programme...)
Lancement et arrêt du programme sans devoir rebooter l'ordinateur et sans demande de code
Code : Tout sélectionner
#versio="Espi - V1.0"
#author="@dt"
#ico="\coding\dt.ico"
#paramo="param.ini"
#aide ="AIDE.txt"
#sous_prog="ESPI_aff.trq"
#sous_progKill="ESPI_off.trq"
cheminapp$=GetCurrentDirectory()
FicIcon$=cheminapp$+#ico
parametro$=cheminapp$+#paramo
sousprog$=cheminapp$+"\coding\"+#sous_prog
sousprogKill$=cheminapp$+"\coding\"+#sous_progKill
menu11$="Démarrer les Captures":menu111$=" /off"
menu22$="Stopper les Captures" :menu222$=" /on"
menu00$="":menu000$=""
Declare DesktopScreenshot(Image,X,Y,Width,Height)
Declare .l Valeur_Duree()
Declare Animation(Fenetre, Effet, Duree)
Declare .b ActivatePrevInstance(title.s)
;===================chargement param===========================================
If ReadFile(0, parametro$)
While Eof(0) = 0
author$ = ReadString(0):vide$=ReadString(0)
ann_chemin$=ReadString(0):chemin$=ReadString(0)
ann_choix_chem$=ReadString(0):choix_chem$=ReadString(0)
ann_mdp$=ReadString(0):mdp$=ReadString(0)
ann_multi$=ReadString(0):multi$=ReadString(0)
Wend
CloseFile(0)
;
Goto pass0:EndIf
MessageRequester(#versio,parametro$+Chr(10)+Chr(10)+"Problème de récupération des paramètres"):End
;============================================================================
pass0:
If multi$="n"
If ActivatePrevInstance(#versio) = #False ;va voir si programme deja ouvert
;MessageRequester("ok", "ok")
EndIf
EndIf
MessageRequester(#versio,"Les Ecrans vont maintenant être Capturés")
Gosub lancer_applic
debut_menu:
If menu00$=menu11$
menu000$=menu111$
Else
menu000$=menu222$
EndIf
If OpenWindow(0, 0, 0, 0, 0, #versio,#PB_Window_Invisible)
CreatePopupMenu(1)
MenuItem(1,menu00$)
MenuBar()
MenuItem(3,"Aide")
MenuItem(4,"A propos")
MenuItem(5,"Quitter")
AddSysTrayIcon(0, WindowID(0), LoadImage(0, FicIcon$))
SysTrayIconToolTip(0, "MENU "+#versio+menu000$);texte si pose curseur sur image
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_SysTray
DisplayPopupMenu(1, WindowID(0))
Case #PB_Event_Menu
Select EventMenu()
;=============================================================
Case 1 ;
If menu00$=menu11$:Goto lancer_applic:EndIf
If menu00$=menu22$:Gosub stopper_applic:EndIf
;=============================================================
Case 3 ; Aide
RunProgram("notepad.exe", #aide,"" )
;=============================================================
Case 4 ; A propos
If OpenWindow(0, 0, 0, 280, 180, "A propos de...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowPos_(WindowID(0), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ;fenetre premier plan********
Animation(0, #AW_CENTER, 500)
If LoadImage(0, #ico)
ImageGadget(7, 10,12,50,50,ImageID(0)) :EndIf
TextGadget (11, 50, 10, 200, 20, #versio,#PB_Text_Center)
TextGadget (12, 50, 30, 200, 40, "Récupération automatisée des Ecrans",#PB_Text_Center)
TextGadget (13, 40, 80, 200, 20, "Réalisé par David Turquin @2012",#PB_Text_Center)
TextGadget (14, 40, 100, 200, 40, "Pour tous renseignements, contacter : david.turquin@wanadoo.fr",#PB_Text_Center)
ButtonGadget(0,20, 140, 240, 30, "OK")
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 0:Goto debut_menu
EndSelect
EndIf
Until EventID = 0 ;#PB_Event_CloseWindow
EndIf
;====================================================================
Case 5 ; Quitter
Resultat = MessageRequester(#versio, "Voulez-vous vraiment fermer le programme ?", #PB_MessageRequester_YesNo )
If Resultat=6
If menu00$=menu22$
Texte$ = InputRequester(#versio, "Veuillez saisir le mot de passe", "")
If Texte$<>mdp$:MessageRequester(#versio,"Mot de passe incorrect"):Goto debut_menu:EndIf
lancement= RunProgram(sousprogKill$,"","")
If lancement=0:MessageRequester(#versio,"Le programme n'a pas pu être arrêté correctement"):End:EndIf
EndIf
Gosub mettre_off:quit=1:End:EndIf
;====================================================================
EndSelect
EndSelect
Until quit=1
End
lancer_applic:
menu00$=menu22$
If premiere_fois$<>"o"
Resultat = ReadFile(0, cheminapp$+"\coding\aff.ini"):If Resultat<>0:MessageRequester(#versio,"Les Captures sont déjà en cours d'exécution"):Goto debut_menu:EndIf
EndIf
Gosub mettre_aff
lancement= RunProgram(sousprog$,"","")
If lancement=0:MessageRequester(#versio,"Le programme n'a pas pu être démarré correctement"):End:EndIf
Goto debut_menu
stopper_applic:
Texte$ = InputRequester(#versio, "Veuillez saisir le mot de passe", "")
If Texte$<>mdp$:MessageRequester(#versio,"Mot de passe incorrect"):Goto debut_menu:EndIf
lancement= RunProgram(sousprogKill$,"","")
If lancement=0:MessageRequester(#versio,"Le programme n'a pas pu être arrêté correctement"):End:EndIf
Gosub mettre_off
MessageRequester(#versio,"Les Captures ont été correctement arrêtées")
menu00$=menu11$
Goto debut_menu
;****************************************************************************
;*********************AFF***************************************
;****************************************************************************
mettre_aff:
Resultat = RenameFile(cheminapp$+"\coding\off.ini", cheminapp$+"\coding\aff.ini") ;dit affichage/ouvert
If resultat = 0
; MessageRequester("erreur","veuillez réinstaller le programme ou contactez DT", #MB_ICONERROR) ;(pb lui dire)
EndIf
Return
;****************************************************************************
;*********************OFF***************************************
;****************************************************************************
mettre_off:
Resultat = RenameFile(cheminapp$+"\coding\aff.ini", cheminapp$+"\coding\off.ini") ;dit masque/ferme
If resultat = 0
; MessageRequester("erreur","veuillez réinstaller le programme ou contactez DT", #MB_ICONERROR) ;(pb lui dire)
EndIf
Delay(1000)
Return
; ****************************************************************************
; ****** ANIMATION AFFICHAGE DES FENETRES ****************************
; ****************************************************************************
#AW_HOR_POSITIVE = $1 ; Animates the window from left to right. This flag can be used with roll or slide animation.
#AW_HOR_NEGATIVE = $2 ; Animates the window from right to left. This flag can be used with roll or slide animation.
#AW_VER_POSITIVE = $4 ; Animates the window from top to bottom. This flag can be used with roll or slide animation.
#AW_VER_NEGATIVE = $8 ; Animates the window from bottom to top. This flag can be used with roll or slide animation.
#AW_CENTER = $10 ; Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the AW_HIDE is not used.
#AW_HIDE = $10000 ; Hides the window. By default, the window is shown.
#AW_ACTIVATE = $20000 ; Activates the window.
#AW_SLIDE = $40000 ; Uses slide animation. By default, roll animation is used.
#AW_BLEND = $80000 ; Uses a fade effect. This flag can be used only if hwnd is a top-level window.
Procedure.l Valeur_Duree()
ProcedureReturn Val(GetGadgetText(1))
EndProcedure
Procedure Animation(Fenetre, Effet, Duree)
AnimateWindow_(WindowID(Fenetre), Duree, Effet | #AW_HIDE)
Delay(100)
AnimateWindow_(WindowID(Fenetre), Duree, Effet)
RedrawWindow_(WindowID(Fenetre), 0, 0, 1)
EndProcedure
; ****************************************************************************
; ****** VOIR SI LE PRGRAMME EST DEJA OUVERT ****************************
; ****************************************************************************
Procedure.b ActivatePrevInstance(title.s)
Protected hwnd
hwnd = FindWindow_(#Null, title) ;recherche le nom de la fenetre
If hwnd
MessageRequester(#versio+" - "+#author, "Le programme est déjà en cours d'exécution..."+Chr(10)+Chr(10)+"Le MENU est accessible en bas à droite (dans la barre des tâches)", #PB_MessageRequester_Ok)
End
EndIf
ProcedureReturn #False
EndProcedure