[..] Hotkeys et Msgbox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
EvilRyu
Niveau 2
Niveau 2
Messages : 28
Enregistré le : dim. 28 déc. 2008 18:16
Status : Hors ligne

[..] Hotkeys et Msgbox

#1

Message par EvilRyu »

Salut à tous!

Voilà je rencontre un problème tout con.

J'utilise des MsgBox tout le long d'un script, afin de donner des instructions pas à pas. Je ne veux pas utiliser de splashscreen ou tooltip.

Seulement, j'ai des HotKeySet() qui appellent des fonctions, et malheuresement, pendant des MsgBox, les Hotkeys ne marchent pas. :?

J'ai lu sur un forum US qu'il fallait utiliser HotKeyAssign() à la place de HotKeySet(). J'ai essayé mais j'avoue ne pas bien comprendre comment l'utiliser, car pour l'instant, le résultat est le même.

Voici mon bout de script:

Code : Tout sélectionner

#include "HotKey_20b.au3"

Func Quit()
Exit 0
EndFunc

Global Const $VK_ESCAPE = 0x1B

_HotKey_Assign($VK_ESCAPE, 'Quit')

MsgBox(0,"","Test")

 
Une idée pour faire marcher le HotKeyAssign? Voici un lien vers le UDF

Merci :)
Image
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Hotkeys et Msgbox

#2

Message par mikell »

Une msgbox est bloquante et tant qu'elle est ouverte les hotkeys ne marchent pas, qu'elles aient été posées avec HotkeySet ou HotKeyAssign
La seule solution est d'ouvrir la msgbox dans un autre process comme expliqué ici
http://www.autoitscript.com/forum/topic ... functions/
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
EvilRyu
Niveau 2
Niveau 2
Messages : 28
Enregistré le : dim. 28 déc. 2008 18:16
Status : Hors ligne

Re: [..] Hotkeys et Msgbox

#3

Message par EvilRyu »

Af merdouille.... Ok merci
Image
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Hotkeys et Msgbox

#4

Message par ZDS »

Bonjour,

A mon humble avis, tu ne pourras pas plus utiliser HotKeyAssign que HotKeySet pendant l'affichage de tes MsgBox car ce n'est pas les HotKey qui foutent la m.... mais le fonctionnement des MsgBox qui bloquent l'exécution du reste du programme (perso, je n'utilise les MsgBoxes que pour du débuggage, jamais pour d'autres utilisations). Par contre, ce que tu peux faire, c'est remplacer partout dans ton code tes MsgBox() par _MsgBox(), et coder toi même une nouvelle fonction d'affichage des boites de dialogues.

Un exemple qui ne change rien pour toi :

Code : Tout sélectionner

Func _MsgBox($flag, $title, $text, $timeout=0, $hwnd=Default)
    Local $result = MsgBox($flag, $title, $text, $timeout, $hwnd)
    Return SetError(@error, @extended, $result)
EndFunc
Un autre exemple un peu "bâtard" :

Code : Tout sélectionner

Func _MsgBox($flag, $title, $text, $timeout=0, $hwnd=Default)
    Local $GUI = GUICreate($title, 400, 300, Default, Default, Default, Default, $hwnd)
    Local $LABEL = GUICtrlCreateLabel($text, 10, 10, 400-2*10, 300-2*10-10-25)
    Local $BUTTON = GUICtrlCreateButton("OK", 100, 300-10-25, 400-2*100, 25)
    GUISetState(@SW_SHOW, $GUI)
    Local $timer = TimerInit()
    Do
        $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE Or $msg = $BUTTON Or ($timeout>0 And TimerDiff($timer)>$timeout*1000)
    GUIDelete($GUI)
    Local $result = 0, $error = 0
    If $msg = $BUTTON Then $result = 1
    If ($timeout>0 And TimerDiff($timer)>$timeout*1000) Then $error = 1
    Return SetError($error, 0, $result)
EndFunc
A toi de l'agrémenter comme tu le souhaites.

Il reste une autre solution, c'est d'utiliser un processus annexe pour afficher les boites de dialogues, car les msbox freeze le process qui les appellent pas les autres. Mais c'est à éviter comme la peste comme les Eval et les Assign, pour deux raisons principales :
  • 1°: La sécurité dans ce cas est un vrai gruyère, au même titre que les injections de code dans les pages web. Normalement, vu que la commande utilisée n'interprète qu'une seule ligne de code, il y a très très très peu de risque (voir aucun vu que l'affichage n'est pas dans le process père, mais dans le fils, mais bon... Essaye de taper " '&@AutoItExe&' ", dans la première boîte de dialogue, et tu verras de quoi je parle)
  • 2° : Les multiples process c'est quand même un peu chaud à gérer surtout avec des ressources communes et des accès concurrents : cf sémaphores
Bref, voici un exemple :

Code : Tout sélectionner

Global $stop = False
HotKeySet("{F4}", "stop")
Func stop()
    If $stop Then Exit
    $stop = True
EndFunc

Local $input = InputBox("[PARENT] Tapez un texte", "Entrez une valeur à afficher dans la MsgBox", "jlhsfdhjlfsdg")
Local $result = _MsgBox(0, "Titre", $input, 10)
MsgBox(0,"[PARENT]","$resultat:"&$result)

Func _MsgBox($flag, $title, $text, $timeout=0, $hwnd=Default)
    Local $pid = Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox('&$flag&', ''[FILS:'&$timeout&'] '&$title&''', '''&$input&''', '&$timeout&')"')
    Do
        TrayTip("[PARENT] HotKey en attente", "Appuyez sur F4 pour arreter", 1)
        Local $exist = ProcessExists($pid)
    Until $stop Or $exist = False
    If $stop Then
        ProcessClose($pid)
        Return 0
    EndIf
    Return 1
EndFunc
Bonne chance, et à bientôt !

Edit: Arf, grillé par Über-Garfield ^^
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Hotkeys et Msgbox

#5

Message par mikell »

Sérieux le plus simple est de loin la soluce n°2 de ZDS, remplacer la msgbox par une custom qui est une gui bloquante
► Afficher le texte
Edit
Et ce coup-ci Über-Garfield grillé par ZDS :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
EvilRyu
Niveau 2
Niveau 2
Messages : 28
Enregistré le : dim. 28 déc. 2008 18:16
Status : Hors ligne

Re: [..] Hotkeys et Msgbox

#6

Message par EvilRyu »

Merci pour vos réponses, c'est très sympa!

Je vais pouvoir assaisonner tout ça à ma sauce maintenant :)
Image
Répondre