Page 1 sur 1
[R] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 20:31
par cutprod
Bonsoir a tous, j'ai un petit souci avec mon script:
Tout fonctionne bien (en fonction du nom des diapo d'un pps, le script déclanche des actions), sauf a la numero 8 ou je fais un zoom grâce a <GDIPlus.au3>, mon Gui s'affiche bien mais il me bloque tout.
Le pps n'avance plus et le Gui refuse de se "killer"!!
Pourquoi?
Je bataille mais ca vient pas!!
► Afficher le texte
Code : Tout sélectionner
#include <GDIPlus.au3>; include pour le zoom
#include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Powerpoint.au3>; include pour le pps
Global $objPPT = _PPT_PowerPointApp()
Global $objPPS = _PPT_PresentationOpen($objPPT, "C:\1.pps")
Global $hBMP, $hGUI1, $hGUI2, $hBitmap, $hGraphic1, $hGraphic2, $x, $y, $w , $z, $l, $h, $g, $gh
HotKeySet("{a}","zoompps")
HotKeySet("{z}","close")
While 1
Switch $objPPS.SlideShowWindow.view.Slide.Name
Case "slide3" ;si la diapo 3 est active alors
graph ();appel la fonction
Sleep(10000) ;attend x millisecondes que la diapo passe
Case "slide5"
graph ()
Sleep(10000)
Case "slide7"
graph ()
Sleep(10000)
Case "slide8"
zoompps()
Sleep(6000)
endzoomed()
EndSwitch
WEnd
func graph ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
MouseClick("left", 200, 200, 1, 3) ;on bouge et click sur le graph pour le mettre en plein ecran
MouseMove(0,1080,1) ;cache la souris
EndFunc
Func zoompps ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
;capture de l'image d'origine
;$x et $y =coordonnées haut gauche du rectangle de capture de l'image d'origine
$x = 0
$Y = 163
;$w = dimension largeur rectangle de capture de l'image d'origine
$w = 715
;$Z = dimension hauteur rectangle de capture de l'image d'origine
$z = 200
; dimesion de l'image zoomer
$l=1920 ;largeur
$h=600 ;hauteur
; coordonnées x y du coin superieur gauche de la fenetre zoomer
$g=2
$gh=160
; Capture top left corner of the screen
$hBMP = _ScreenCapture_Capture("", $x, $y, $w+$x, $z+$y)
; Create a GUI for the zoomed image
$hGUI2 = GUICreate("Zoomed" , $l, $h, $g, $gh, $WS_POPUP + $WS_BORDER);on eleve les bords de la fenetre
GUISetState()
; Initialize GDI+ library and load image
_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
; Draw 2x zoomed image
$hGraphic2 = _GDIPlus_GraphicsCreateFromHWND($hGUI2)
_GDIPlus_GraphicsDrawImageRectRect($hGraphic2, $hBitmap, 0, 0, $w, $z, 0, 0, $l, $h)
; Release resources
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_GraphicsDispose($hGraphic2)
_GDIPlus_ImageDispose($hBitmap)
_WinAPI_DeleteObject($hBmp)
_GDIPlus_Shutdown()
; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc
Func endzoomed()
WinKill("Zoomed")
EndFunc
Func close ()
_PPT_PresentationClose($objPPS) ; ferme la presentation
_PPT_PowerPointQuit ($objPPT);Exit PowerPoint
EndFunc
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 20:49
par bloodwolff
J'ai regardé vaguement mais je pense que sa pourrais le réglé
GUIDelete ( [winhandle] )
Code : Tout sélectionner
#include <GDIPlus.au3>; include pour le zoom
#include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Powerpoint.au3>; include pour le pps
Global $objPPT = _PPT_PowerPointApp()
Global $objPPS = _PPT_PresentationOpen($objPPT, "C:\1.pps")
Global $hBMP, $hGUI1, $hGUI2, $hBitmap, $hGraphic1, $hGraphic2, $x, $y, $w , $z, $l, $h, $g, $gh
HotKeySet("{a}","zoompps")
HotKeySet("{z}","close")
While 1
Switch $objPPS.SlideShowWindow.view.Slide.Name
Case "slide3" ;si la diapo 3 est active alors
graph ();appel la fonction
Sleep(10000) ;attend x millisecondes que la diapo passe
Case "slide5"
graph ()
Sleep(10000)
Case "slide7"
graph ()
Sleep(10000)
Case "slide8"
zoompps()
Sleep(6000)
endzoomed()
EndSwitch
WEnd
func graph ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
MouseClick("left", 200, 200, 1, 3) ;on bouge et click sur le graph pour le mettre en plein ecran
MouseMove(0,1080,1) ;cache la souris
EndFunc
Func zoompps ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
;capture de l'image d'origine
;$x et $y =coordonnées haut gauche du rectangle de capture de l'image d'origine
$x = 0
$Y = 163
;$w = dimension largeur rectangle de capture de l'image d'origine
$w = 715
;$Z = dimension hauteur rectangle de capture de l'image d'origine
$z = 200
; dimesion de l'image zoomer
$l=1920 ;largeur
$h=600 ;hauteur
; coordonnées x y du coin superieur gauche de la fenetre zoomer
$g=2
$gh=160
; Capture top left corner of the screen
$hBMP = _ScreenCapture_Capture("", $x, $y, $w+$x, $z+$y)
; Create a GUI for the zoomed image
$hGUI2 = GUICreate("Zoomed" , $l, $h, $g, $gh, $WS_POPUP + $WS_BORDER);on eleve les bords de la fenetre
GUISetState()
; Initialize GDI+ library and load image
_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
; Draw 2x zoomed image
$hGraphic2 = _GDIPlus_GraphicsCreateFromHWND($hGUI2)
_GDIPlus_GraphicsDrawImageRectRect($hGraphic2, $hBitmap, 0, 0, $w, $z, 0, 0, $l, $h)
; Release resources
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_GraphicsDispose($hGraphic2)
_GDIPlus_ImageDispose($hBitmap)
_WinAPI_DeleteObject($hBmp)
_GDIPlus_Shutdown()
; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc
Func endzoomed()
[color=#FF0000]GUIDelete ( $hGUI2 )[/color]
EndFunc
Func close ()
_PPT_PresentationClose($objPPS) ; ferme la presentation
_PPT_PowerPointQuit ($objPPT);Exit PowerPoint
EndFunc
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 21:14
par cutprod
Merci a toi je test et je te dis.
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 21:52
par cutprod
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 21:58
par bloodwolff
Bon ok je regarde sa en détail

Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:03
par Jerome
Coucou,
En regardant rapidement, ton problème vient à ce niveau la :
Code : Tout sélectionner
; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc
Comment savoir que c'est la $Gui2 que tu dois fermer.
Il faut le renseigner, sinon sa fait ton problème, sa boucle dans le "Do" et sa n'en sort jamais car tu ne précise pas la Gui à fermer.
PS : je rajouterai aussi un sleep(50) dans le Do...
Jérôme
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:03
par bloodwolff
Test celui la pour voir , au lieu d'attendre qu'il ferme la fenêtre on va mettre un sleep pour voir si le problème viens de la
► Afficher le texte
Code : Tout sélectionner
#include <GDIPlus.au3>; include pour le zoom
#include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Powerpoint.au3>; include pour le pps
Global $objPPT = _PPT_PowerPointApp()
Global $objPPS = _PPT_PresentationOpen($objPPT, "C:\1.pps")
Global $hBMP, $hGUI1, $hGUI2, $hBitmap, $hGraphic1, $hGraphic2, $x, $y, $w , $z, $l, $h, $g, $gh
HotKeySet("{a}","zoompps")
HotKeySet("{z}","close")
While 1
Switch $objPPS.SlideShowWindow.view.Slide.Name
Case "slide3" ;si la diapo 3 est active alors
graph ();appel la fonction
Sleep(10000) ;attend x millisecondes que la diapo passe
Case "slide5"
graph ()
Sleep(10000)
Case "slide7"
graph ()
Sleep(10000)
Case "slide8"
zoompps()
Sleep(6000)
EndSwitch
WEnd
func graph ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
MouseClick("left", 200, 200, 1, 3) ;on bouge et click sur le graph pour le mettre en plein ecran
MouseMove(0,1080,1) ;cache la souris
EndFunc
Func zoompps ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
;capture de l'image d'origine
;$x et $y =coordonnées haut gauche du rectangle de capture de l'image d'origine
$x = 0
$Y = 163
;$w = dimension largeur rectangle de capture de l'image d'origine
$w = 715
;$Z = dimension hauteur rectangle de capture de l'image d'origine
$z = 200
; dimesion de l'image zoomer
$l=1920 ;largeur
$h=600 ;hauteur
; coordonnées x y du coin superieur gauche de la fenetre zoomer
$g=2
$gh=160
; Capture top left corner of the screen
$hBMP = _ScreenCapture_Capture("", $x, $y, $w+$x, $z+$y)
; Create a GUI for the zoomed image
$hGUI2 = GUICreate("Zoomed" , $l, $h, $g, $gh, $WS_POPUP + $WS_BORDER);on eleve les bords de la fenetre
GUISetState()
; Initialize GDI+ library and load image
_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
; Draw 2x zoomed image
$hGraphic2 = _GDIPlus_GraphicsCreateFromHWND($hGUI2)
_GDIPlus_GraphicsDrawImageRectRect($hGraphic2, $hBitmap, 0, 0, $w, $z, 0, 0, $l, $h)
; Release resources
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_GraphicsDispose($hGraphic2)
_GDIPlus_ImageDispose($hBitmap)
_WinAPI_DeleteObject($hBmp)
_GDIPlus_Shutdown()
[color=#FF0000]sleep(5000)[/color]
[color=#FF0000] GUIDelete ( $hGUI2 [/color])
Endfunc
Func close ()
_PPT_PresentationClose($objPPS) ; ferme la presentation
_PPT_PowerPointQuit ($objPPT);Exit PowerPoint
EndFunc
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:06
par Jerome
Re ....
Heuuuu, bloodwolff...;
Ta supprimer des truc qui fallait pas la.
Il manque sa boucle Do, il manque le EndFunc...
PS : Merci d'utiliser les balises Spoiler aussi....
Jérôme
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:19
par bloodwolff
Le Endfunc c'étais pas volontaire mais enlever la boucle Do ,il va savoir si le problème viens de la
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:36
par cutprod
je test et je vous tiens au courant demain!
Merci a vous deux.
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:42
par Jerome
Re-Coucou,
Après test, le code donnée par bloodwolff est correct.
Sauf que tu ne peut pas choisir quand tu va dézoomer (juste un timer, et non une action user).
Je conseil donc quelque chose de ce type :
► Afficher le texte
Code : Tout sélectionner
#include <GDIPlus.au3>; include pour le zoom
#include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Powerpoint.au3>; include pour le pps
Global $objPPT = _PPT_PowerPointApp()
Global $objPPS = _PPT_PresentationOpen($objPPT, "C:\1.pps")
Global $hBMP, $hGUI1, $hGUI2, $hBitmap, $hGraphic1, $hGraphic2, $x, $y, $w , $z, $l, $h, $g, $gh
HotKeySet("{a}","zoompps")
HotKeySet("{z}","close")
HotKeySet("{r}","endzoomed")
While 1
Switch $objPPS.SlideShowWindow.view.Slide.Name
Case "slide3" ;si la diapo 3 est active alors
graph ();appel la fonction
Sleep(10000) ;attend x millisecondes que la diapo passe
Case "slide5"
graph ()
Sleep(10000)
Case "slide7"
graph ()
Sleep(10000)
Case "slide8"
zoompps()
Sleep(6000)
EndSwitch
WEnd
func graph ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
MouseClick("left", 200, 200, 1, 3) ;on bouge et click sur le graph pour le mettre en plein ecran
MouseMove(0,1080,1) ;cache la souris
EndFunc
Func zoompps ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
;capture de l'image d'origine
;$x et $y =coordonnées haut gauche du rectangle de capture de l'image d'origine
$x = 0
$Y = 163
;$w = dimension largeur rectangle de capture de l'image d'origine
$w = 715
;$Z = dimension hauteur rectangle de capture de l'image d'origine
$z = 200
; dimesion de l'image zoomer
$l=1920 ;largeur
$h=600 ;hauteur
; coordonnées x y du coin superieur gauche de la fenetre zoomer
$g=2
$gh=160
; Capture top left corner of the screen
$hBMP = _ScreenCapture_Capture("", $x, $y, $w+$x, $z+$y)
; Create a GUI for the zoomed image
$hGUI2 = GUICreate("Zoomed" , $l, $h, $g, $gh, $WS_POPUP + $WS_BORDER);on eleve les bords de la fenetre
GUISetState()
; Initialize GDI+ library and load image
_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
; Draw 2x zoomed image
$hGraphic2 = _GDIPlus_GraphicsCreateFromHWND($hGUI2)
_GDIPlus_GraphicsDrawImageRectRect($hGraphic2, $hBitmap, 0, 0, $w, $z, 0, 0, $l, $h)
; Release resources
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_GraphicsDispose($hGraphic2)
_GDIPlus_ImageDispose($hBitmap)
_WinAPI_DeleteObject($hBmp)
_GDIPlus_Shutdown()
EndFunc
Func endzoomed()
GUIDelete ( $hGUI2 )
EndFunc
Func close ()
_PPT_PresentationClose($objPPS) ; ferme la presentation
_PPT_PowerPointQuit ($objPPT);Exit PowerPoint
EndFunc
Jérôme
Re: [..] GUI qui ne veut pas se fermer!
Posté : sam. 23 oct. 2010 22:47
par bloodwolff
Guidelete dois être dans la fonction ou
$hgui2 dois être globale ou
$hgui2 dois être retourné par la fonction et envoyé dans l'autre
ps: Désolé j'avais pas remarqué le globale

Re: [..] GUI qui ne veut pas se fermer!
Posté : dim. 24 oct. 2010 10:28
par cutprod
Bonjour a tous et merci a vous deux pour votre aide.
Le code fonctionne comme ca =
► Afficher le texte
Code : Tout sélectionner
#include <GDIPlus.au3>; include pour le zoom
#include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Powerpoint.au3>; include pour le pps
Global $objPPT = _PPT_PowerPointApp()
Global $objPPS = _PPT_PresentationOpen($objPPT, "C:\1.pps")
Global $hBMP, $hGUI1, $hGUI2, $hBitmap, $hGraphic1, $hGraphic2, $x, $y, $w , $z, $l, $h, $g, $gh
HotKeySet("{a}","zoompps")
HotKeySet("{z}","close")
While 1
Switch $objPPS.SlideShowWindow.view.Slide.Name
Case "slide3" ;si la diapo 3 est active alors
graph ();appel la fonction
Sleep(10000) ;attend x millisecondes que la diapo passe
Case "slide5"
graph ()
Sleep(10000)
Case "slide7"
graph ()
Sleep(10000)
Case "slide8"
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
zoompps()
sleep(9000)
$objPPT.ActivePresentation.SlideShowWindow.View.Next
GUIDelete ( $hGUI2 )
EndSwitch
WEnd
func graph ()
Sleep(1000);attend x millisecondes que le webbrowser s'affiche bien
MouseClick("left", 200, 200, 1, 3) ;on bouge et click sur le graph pour le mettre en plein ecran
MouseMove(0,1080,1) ;cache la souris
EndFunc
Func zoompps ()
;capture de l'image d'origine
;$x et $y =coordonnées haut gauche du rectangle de capture de l'image d'origine
$x = 0
$Y = 163
;$w = dimension largeur rectangle de capture de l'image d'origine
$w = 715
;$Z = dimension hauteur rectangle de capture de l'image d'origine
$z = 200
; dimesion de l'image zoomer
$l=1920 ;largeur
$h=900 ;hauteur
; coordonnées x y du coin superieur gauche de la fenetre zoomer
$g=0
$gh=160
; Capture top left corner of the screen
$hBMP = _ScreenCapture_Capture("", $x, $y, $w+$x, $z+$y)
; Create a GUI for the zoomed image
$hGUI2 = GUICreate("Zoomed" , $l, $h, $g, $gh, $WS_POPUP + $WS_BORDER);on eleve les bords de la fenetre
GUISetState()
; Initialize GDI+ library and load image
_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
; Draw 2x zoomed image
$hGraphic2 = _GDIPlus_GraphicsCreateFromHWND($hGUI2)
_GDIPlus_GraphicsDrawImageRectRect($hGraphic2, $hBitmap, 0, 0, $w, $z, 0, 0, $l, $h)
; Release resources
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_GraphicsDispose($hGraphic2)
_GDIPlus_ImageDispose($hBitmap)
_WinAPI_DeleteObject($hBmp)
_GDIPlus_Shutdown()
Endfunc
Func close ()
_PPT_PresentationClose($objPPS) ; ferme la presentation
_PPT_PowerPointQuit ($objPPT);Exit PowerPoint
EndFunc
J'ai aussi ajouté la ligne "$objPPT.ActivePresentation.SlideShowWindow.View.Next" (Jérôme m'avait permit de découvrir comment utiliser les commandes de Powerpoint il y a quelque temps) pour passer a la diapo suivante car sinon le script me relancer une fonction ZOOM !! (normale!)
Problème résolut! (celui ci ...)
Merci.

Re: [..] GUI qui ne veut pas se fermer!
Posté : dim. 24 oct. 2010 11:14
par Tlem
N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.
Re: [R] GUI qui ne veut pas se fermer!
Posté : dim. 24 oct. 2010 11:32
par cutprod
OUPS!!
Rectifier!
