Page 1 sur 1
[R] GUIRegisterMsg, pas tout compris :(
Posté : mar. 24 févr. 2015 19:56
par sozary
Bonsoir!
Tout est dans le titre...
Récemment j'ai du avoir recours à cette fonction pour déplacer une fenêtre pop-up en même temps que son parent de façon efficace, seulement voilà, j'ai eu cette ligne de code :
et la fonction qui va avec
Code : Tout sélectionner
[spoiler=]Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hwnd
Local $posfen = WinGetPos($hwnd)
$posfen=WinGetPos($hwnd)
WinMove("tchat","",$posfen[0]-284,$posfen[1]+508)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE[/spoiler]
Seulement je n'ai toujours pas compris comment cette fonction fonctionnait... (Et ce en dépit de l'aide AutoIt).. Pourriez vous si possible m'expliquer son utilité ou me rediriger vers un lien le faisant svp?
Merci d'avance!

Re: [..] GUIRegisterMsg, pas tout compris :(
Posté : mer. 25 févr. 2015 08:36
par jguinch
Le problème est que cette fonction est plutôt compliquée à comprendre...
Je peux juste te donner un lien sur le Wiki US :
https://www.autoitscript.com/wiki/Tutor ... egisterMsg
Sinon, un topic similaire à ce que tu veux faire :
https://www.autoitscript.fr/forum/viewt ... 817#p86817
Re: [..] GUIRegisterMsg, pas tout compris :(
Posté : mer. 25 févr. 2015 09:24
par mikell
Il est très bien fait ce tutorial du wiki
On peut juste ajouter que GUIRegisterMsg est prioritaire sur les modes onevent et messageloop, je m'étais fait jadis un petit exemple pour visualiser ça
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ Par défaut dans AutoIt "ESC" correspond au clic sur la croix de fermeture de la gui
;~ Le comportement est différent si la hotkey est posée pour quitter le script :
HotKeySet("{ESC}", "_exit")
Opt("GuiOnEventMode", 1)
GUICreate("My GUI")
GUISetOnEvent($GUI_EVENT_CLOSE, "_close")
$btn = GUICtrlCreateButton("stop", 10, 50, 50, 20)
GUICtrlSetOnEvent(-1, "_btn")
$label = GUICtrlCreateLabel("0", 100, 50, 20, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCOMMAND")
Local $aAccelKeys[1][2] = [["{SPACE}", $btn]]
GUISetAccelerators($aAccelKeys)
Global $stop = 0, $close = 0
While 1
If $stop <> 0 Then Exitloop
If $close <> 0 Then Exit
Sleep(300)
GuiCtrlSetData($label, GuiCtrlRead($label)+1)
Wend
Msgbox(64,"", "stopped")
Opt("GuiOnEventMode", 0)
While 1
Switch GuiGetMsg()
Case $GUI_EVENT_CLOSE
$close = 4
Msgbox(64, $close, "close GuiGetMsg")
Case $btn
Msgbox(64, "", "bouton GuiGetMsg")
EndSwitch
If $close <> 0 Then Exit
Sleep(10)
Wend
;=========================================
;~ fonction appelée par eventmode (bouton)
Func _btn()
$stop = 1
Msgbox(64, $stop, "bouton on event")
EndFunc
;~ fonction appelée par eventmode (croix)
Func _close()
$close = 1
Msgbox(64, $close, "close on event")
EndFunc
;~ interception du message Windows (bouton)
Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $lParam
If BitAND($wParam, 0xFFFF) = $btn Then
$stop = 2
Msgbox(64, $stop, "bouton wm_command")
EndIf
Return 'GUI_RUNDEFMSG'
EndFunc
;~ interception du message Windows (croix)
Func _WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $lParam
If BitAND($wParam, 0xFFF0) = 0xF060 Then ; 0xF060 = $SC_CLOSE
$close = 2
Msgbox(64, $close, "close wm_syscommand")
EndIf
EndFunc
;~ fonction appelée par HotKeySet ESC
Func _exit()
$close = 3
Msgbox(64, $close, "close hotkey")
EndFunc
Re: [..] GUIRegisterMsg, pas tout compris :(
Posté : mer. 25 févr. 2015 11:22
par sozary
Merci! Je vais me pencher vers les documents que tu m'as envoyé jguinch!
Merci à mikell aussi, j'essayerais de comprendre les fonctions " _WM_COMMAND" et "_WM_SYSCOMMAND" après avoir lu le tuto quand même, parce que à première vu je comprend pas trop

!
Merci encore ♪!
Re: [R] GUIRegisterMsg, pas tout compris :(
Posté : mer. 25 févr. 2015 11:31
par TommyDDR
En gros, windows gère ses fenêtres avec des évenements "clic dans une fenêtre", "redessiner la fenêtre", "déplacement de la fenêtre", etc etc.
GUIRegisterMsg permet d'associer une fonction perso à un ou plusieurs de ces évenements, ainsi, en faisant un GUIRegisterMsg de $WM_MOVE, votre fonction sera appellé à chaque déplacement de votre fenêtre.
Re: [R] GUIRegisterMsg, pas tout compris :(
Posté : dim. 17 mai 2015 18:04
par Tlem
Bonsoir.
Le tutoriel du Wiki US va être disponible prochainement sur le Wiki Français à cette adresse :
http://www.autoitscript.fr/wiki/GUIRegisterMsg
Le temps que Patrick22 y copie le texte traduit.

Re: [R] GUIRegisterMsg, pas tout compris :(
Posté : lun. 18 mai 2015 06:51
par sozary
Bonjour.
Merci pour ce tutoriel, il est simple et clair.