Page 1 sur 1

[R] problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 19:29
par EricF
Bonjour,
Je tente de détecter si Thunderbird est ouvert (et notamment une fenêtre de rédaction de message) pour pouvoir le fermer.
Après plusieurs essais, voici le résultat :

- j'ai réussi à vérifier la présence de TB par la class (la vérification par le titre ne marche pas).
- La vérification de la fenêtre de rédaction de message fonctionne, mais je dois fermer totalement TB pour que le WinWaitClose() s'interrompe et que le message "TB fermé" s'affiche.
- Si la fenêtre de rédaction de message n'est pas détectée, le message "fermeture de TB" s'affiche, mais TB n'est pas fermé.

Code : Tout sélectionner

MsgBox(0, "", "lancement", 3)
If WinExists("[CLASS:MozillaWindowClass]") Then ;La fenêtre principale de TB existe
	MsgBox(0, "", "main window open", 2)
	If WinExists("[TITLE:Rédaction; CLASS:MozillaWindowClass]") Then ;La fenêtre de rédaction de message existe
		MsgBox(0, "", "write window open", 2)
		$MsgBox_OkCancel = MsgBox(1, "Sauvegarde de Thunderbird", "La sauvegarde de Thunderbird attend la fermeture de la fenêtre de rédaction de message de Thunderbird. Cliquez sur OK pour attendre et sur Annuler pour arrêter la sauvegarde.")

			If $MsgBox_OkCancel = 2 Then ;Clic sur Annuler
				Exit(1)
			EndIf
		;On attend sa fermeture, puis on ferme TB
		WinWaitClose("[TITLE:Rédaction; CLASS:MozillaWindowClass]")
		;;WinWaitClose("[TITLE:Rédaction; CLASS:MozillaWindowClass]")
		WinClose("[CLASS:MozillaWindowClass]")
		;;WinClose("[TITLE:Mozilla Thunderbird; CLASS:MozillaWindowClass]")
		MsgBox(0, "", "TB fermé")
	Else
		;Sinon on ferme TB
		MsgBox(0, "", "fermeture de TB")
		WinClose("[CLASS:MozillaWindowClass]")
		;;WinClose("[TITLE:Mozilla Thunderbird; CLASS:MozillaWindowClass]")
	EndIf
Else
	MsgBox(0, "", "TB non ouvert")
EndIf

Exit(0) ;On quitte et on renvoie un code 0
Je ne suis pas très à jour puisque j'utilise la version 3.3.8.1 d'AutoIt.

Re: problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 19:44
par mikell
Tu as essayé ProcessExists() et ProcessClose() ?

Re: problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 19:55
par EricF
C'est ce que j'utilisais avant avec mon ancien OE. Mais ça ne permet pas de vérifier si un message est en cours.... Ca coupe tout simplement. Et j'imagine que Winclose() simule le clic sur l'icône Fermer, donc plus propre.

Re: problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 21:45
par orax
MozillaWindowClass ça n'est pas forcément Thunderbird, ça peut être aussi Firefox. Le script pourrait donc détecter la mauvaise fenêtre.

Re: problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 21:58
par EricF
J'utilise Palemoon. Je vérifierai sa classe, mais our le WinWaitClose, le script se débloque après fermeture de thunderbird. D'ailleurs, j'utilise la classe simplement parce que la vérification par le titre ne fonctionne pas. Si tu as une alternative, je suis preneur !

Re: problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 22:52
par EricF
J'ai vérifié, la classe de Palemoon est la même :-/ si quelqu'un a une alternative ou sait pourquoi la vérification par le titre ne fonctionne pas....

Re: problème pour détecter la présence de Thunderbird  

Posté : jeu. 07 avr. 2016 23:40
par orax
Dans mon cas, le script ne marchait pas car il trouvait Firefox. Cette fois, il va chercher une fenêtre qui a un titre qui se termine par " - Mozilla Thunderbird" avec la classe MozillaWindowClass. Le $ à la fin de Thunderbird signifie "fin de chaîne" dans la chaîne à chercher.
J'ai utilisé WinGetHandle pour éviter de rechercher la fenêtre à partir de son titre à chaque fois (surtout au niveau de la boucle).
Global Const $WIN_STATE_VISIBLE = 2

$hThunderbird = WinGetHandle("[REGEXPTITLE: - Mozilla Thunderbird$; CLASS:MozillaWindowClass]") ;Récupère le handle d'un titre qui se termine par " - Mozilla Thunderbird"
$hRedaction = WinGetHandle("[TITLE:Rédaction; CLASS:MozillaWindowClass]")

If WinExists($hThunderbird) Then ;La fenêtre principale de TB existe
   MsgBox(0, "", "main window open", 2)
   If WinExists($hRedaction) Then ;La fenêtre de rédaction de message existe
      MsgBox(0, "", "write window open", 2)
      $MsgBox_OkCancel = MsgBox(1, "Sauvegarde de Thunderbird", "La sauvegarde de Thunderbird attend la fermeture de la fenêtre de rédaction de message de Thunderbird. Cliquez sur OK pour attendre et sur Annuler pour arrêter la sauvegarde.")

      If $MsgBox_OkCancel = 2 Then ;Clic sur Annuler
         Exit (1)
      EndIf

      ;On attend sa fermeture, puis on ferme TB
      ;Boucle tant que la(les) fenêtre(s) "Rédaction" est(sont) visible(s)
      While BitAND(WinGetState($hRedaction), $WIN_STATE_VISIBLE)
         Sleep(250)
      WEnd
   EndIf

   MsgBox(0, "", "fermeture de TB")
   WinClose($hThunderbird)
Else
   MsgBox(0, "", "TB non ouvert")
EndIf

Exit (0) ;On quitte et on renvoie un code 0

Re: problème pour détecter la présence de Thunderbird

Posté : jeu. 07 avr. 2016 23:42
par EricF
Merci. Je regarderai demain

Re: problème pour détecter la présence de Thunderbird

Posté : ven. 08 avr. 2016 13:06
par EricF
Ca marche bien, à part un souci de handle fantôme, qui n'est même pas retourné par WinList(). Je devrais pouvoir corriger ça. Merci pour ton aide.