c'est mon premier post ici, alors je me présente, je m'appelle Patrick, j'ai
41 ans et je suis administrateur Active Directory et Domino (oui je sais...).
Ca fait quelques temps que je recherche un moyen en VBS pour pouvoir
intercepter un click sur le bouton fermer d'une fenetre HTA (la croix blanche
sur fond rouge en hat à droite de la fenetre).
Pour palier à ca, j'ai réussi grace aux options d'en tete HTA à cacher ce
bouton et obliger les utilisateurs à cliquer sur un bouton "Quitter" dans le
formulaire, mais ce ne me convient pas plus que ca....
Si quelqu'un a une idée, grand merci d'avance.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MCI (ex do ré Mi chel la si do) [MVP]
Bonjour !
Je ne suis pas sûr que l'on puisse intercepter la fermeture de la fenêtre. D'autant plus qu'il faudrait également intercepter le "Menu-system" + "Fermer" ([Alt]-espace + "fermer") ; le [Alt]-[F4] ; et, pourquoi pas, le [Alt] [Ctrl] [Suppr]
@-salutations
Michel Claveau
Bonjour !
Je ne suis pas sûr que l'on puisse intercepter la fermeture de la
fenêtre.
D'autant plus qu'il faudrait également intercepter le "Menu-system" +
"Fermer" ([Alt]-espace + "fermer") ; le [Alt]-[F4] ; et, pourquoi
pas, le [Alt] [Ctrl] [Suppr]
Je ne suis pas sûr que l'on puisse intercepter la fermeture de la fenêtre. D'autant plus qu'il faudrait également intercepter le "Menu-system" + "Fermer" ([Alt]-espace + "fermer") ; le [Alt]-[F4] ; et, pourquoi pas, le [Alt] [Ctrl] [Suppr]
@-salutations
Michel Claveau
Jean
Je ne suis pas sûr que l'on puisse intercepter la fermeture de la fenêtre.
Non im n'y a pas d'évnement OnClose ou OnQuit. Généralement on utilise l'événement OnUnload, ce qui suffit dans la plupart des cas ... mais a utiliser avec précaution quand même. Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce qui le dérange dans cette solution.
Amicalement,
-- Jean - JMST Belgium
Je ne suis pas sûr que l'on puisse intercepter la fermeture de la fenêtre.
Non im n'y a pas d'évnement OnClose ou OnQuit.
Généralement on utilise l'événement OnUnload, ce qui suffit dans la
plupart des cas ... mais a utiliser avec précaution quand même.
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce
qui le dérange dans cette solution.
Je ne suis pas sûr que l'on puisse intercepter la fermeture de la fenêtre.
Non im n'y a pas d'évnement OnClose ou OnQuit. Généralement on utilise l'événement OnUnload, ce qui suffit dans la plupart des cas ... mais a utiliser avec précaution quand même. Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce qui le dérange dans cette solution.
Amicalement,
-- Jean - JMST Belgium
Patrick PALAIS
Bonjour,
merci et tous les deux pour vos réponses et félicitaiions à Jean pour son score impressionnant aux scripting games, je suis très honoré.
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce qui le dérange dans cette solution.
En fait ce qui me dérange c'est que si je cache le bouton "Fermer" je cache aussi le bouton réduire et dans une moindre mesure le bouton agrandir mais surtout le déplacement de la fenetre. Sachant que mes HTA tournent des postes helpdesk qui ont en permanence au minimum 20 fenetres ouvertes (des consoles de monitoring essentiellement) je peux pas empècher ni la réduction des fenetres, ni leur déplacement, les techniciens doivent agencer leur bureau comme ils le souhaitent... Ou alors pour contourner le problème, existe-t-il un moyen de cacher uniquement le bouton fermer, ce qui rendrait alors possible le déplacement de la fenetre et sa réduction. Merci d'avance pour vos idées...
Patrick
Bonjour,
merci et tous les deux pour vos réponses et félicitaiions à Jean pour son
score impressionnant aux scripting games, je suis très honoré.
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce
qui le dérange dans cette solution.
En fait ce qui me dérange c'est que si je cache le bouton "Fermer" je cache
aussi le bouton réduire et dans une moindre mesure le bouton agrandir mais
surtout le déplacement de la fenetre. Sachant que mes HTA tournent des postes
helpdesk qui ont en permanence au minimum 20 fenetres ouvertes (des consoles
de monitoring essentiellement) je peux pas empècher ni la réduction des
fenetres, ni leur déplacement, les techniciens doivent agencer leur bureau
comme ils le souhaitent...
Ou alors pour contourner le problème, existe-t-il un moyen de cacher
uniquement le bouton fermer, ce qui rendrait alors possible le déplacement de
la fenetre et sa réduction.
Merci d'avance pour vos idées...
merci et tous les deux pour vos réponses et félicitaiions à Jean pour son score impressionnant aux scripting games, je suis très honoré.
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce qui le dérange dans cette solution.
En fait ce qui me dérange c'est que si je cache le bouton "Fermer" je cache aussi le bouton réduire et dans une moindre mesure le bouton agrandir mais surtout le déplacement de la fenetre. Sachant que mes HTA tournent des postes helpdesk qui ont en permanence au minimum 20 fenetres ouvertes (des consoles de monitoring essentiellement) je peux pas empècher ni la réduction des fenetres, ni leur déplacement, les techniciens doivent agencer leur bureau comme ils le souhaitent... Ou alors pour contourner le problème, existe-t-il un moyen de cacher uniquement le bouton fermer, ce qui rendrait alors possible le déplacement de la fenetre et sa réduction. Merci d'avance pour vos idées...
Patrick
Jean
Bonjour,
merci et tous les deux pour vos réponses et félicitaiions à Jean pour son score impressionnant aux scripting games, je suis très honoré.
Merci, j'ai vu que vous n'étiez pas en reste non plus ;-)
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce qui le dérange dans cette solution.
En fait ce qui me dérange c'est que si je cache le bouton "Fermer" je cache aussi le bouton réduire et dans une moindre mesure le bouton agrandir mais surtout le déplacement de la fenetre. Sachant que mes HTA tournent des postes helpdesk qui ont en permanence au minimum 20 fenetres ouvertes (des consoles de monitoring essentiellement) je peux pas empècher ni la réduction des fenetres, ni leur déplacement, les techniciens doivent agencer leur bureau comme ils le souhaitent... Ou alors pour contourner le problème, existe-t-il un moyen de cacher uniquement le bouton fermer, ce qui rendrait alors possible le déplacement de la fenetre et sa réduction.
Non pas avec ce qui est disponible par défaut.
Je pense que le plus simple sera d'utiliser l'événement onunload.
La première chose à faire sera de gérer l'appui sur la touche F5 ( raffraichissement) qui déclenche onunload.
Ci dessous vous trouverez 2 exemples pour le faire.
Le premier annule l'appui sur la touche en utilisant simplement l'événement onkeydown.
Le second n'annule pas l'appui sur la touche F5 mais annule le déclenchement de l'événement onunload. Pour ce faire il supprime le gestionnaire de l'événement onunload dans l'événement onkeydow (pour la touche F5) et remet le gestionnaire dans l'événement onkeyup.
La seconde chose à faire est de vérifier que le script n'utilise pas de méthodes, fonctions qui déclenche un événement onunload. Vous trouvez une liste de ces méthodes, fonctions dans le SDK. Regardez ici dans la rubrique "To Invoke" de "Event Information" : <http://msdn2.microsoft.com/en-us/library/ms536973(VS.85).aspx>
Si c'est le cas et que ça gêne il suffit généralement d'appliquer la même technique que le second exemple : retirer le gestionnaire d'onunload avant l'exécution de la méthode/fonction et remettre le gestionnaire après.
A noter pour l'anecdote que la fermeture d'une fenêtre via un bouton dans un hta peut aussi se faire en envoyant ALT + F4 avec sendkeys ... un des rares cas où sendkeys est sûr à 100 % :-)
With B1 .Value="Fermer" .OnClick=GetRef("BCLK") End With
With Window .OnUnload=GetRef("WOUL") .Document.OnKeyDown=GetRef("WOKD") .Document.OnKeyUp=GetRef("WOKU") End With
Sub BCLK CreateObject("WScript.Shell").SendKeys("%{F4}") End Sub
Sub WOUL msgbox "Fermeture" End Sub
Sub WOKD With Window.Event If .KeyCode6 Then Window.OnUnload="" End With End Sub
'KeyCode 116 = touche F5
Sub WOKU With Window.Event If .KeyCode6 Then Window.OnUnload=GetRef("WOUL") End With End Sub
</script>
<input type=button id± /> <!---8<--->
Merci d'avance pour vos idées...
Patrick
Amicalement,
-- Jean - JMST Belgium
Bonjour,
merci et tous les deux pour vos réponses et félicitaiions à Jean pour son
score impressionnant aux scripting games, je suis très honoré.
Merci, j'ai vu que vous n'étiez pas en reste non plus ;-)
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce
qui le dérange dans cette solution.
En fait ce qui me dérange c'est que si je cache le bouton "Fermer" je cache
aussi le bouton réduire et dans une moindre mesure le bouton agrandir mais
surtout le déplacement de la fenetre. Sachant que mes HTA tournent des
postes helpdesk qui ont en permanence au minimum 20 fenetres ouvertes (des
consoles de monitoring essentiellement) je peux pas empècher ni la
réduction des fenetres, ni leur déplacement, les techniciens doivent
agencer leur bureau comme ils le souhaitent...
Ou alors pour contourner le problème, existe-t-il un moyen de cacher
uniquement le bouton fermer, ce qui rendrait alors possible le déplacement
de la fenetre et sa réduction.
Non pas avec ce qui est disponible par défaut.
Je pense que le plus simple sera d'utiliser l'événement onunload.
La première chose à faire sera de gérer l'appui sur la touche F5 (
raffraichissement) qui déclenche onunload.
Ci dessous vous trouverez 2 exemples pour le faire.
Le premier annule l'appui sur la touche en utilisant simplement
l'événement onkeydown.
Le second n'annule pas l'appui sur la touche F5 mais annule le
déclenchement de l'événement onunload.
Pour ce faire il supprime le gestionnaire de l'événement onunload dans
l'événement onkeydow (pour la touche F5) et remet le gestionnaire dans
l'événement onkeyup.
La seconde chose à faire est de vérifier que le script n'utilise pas de
méthodes, fonctions qui déclenche un événement onunload.
Vous trouvez une liste de ces méthodes, fonctions dans le SDK.
Regardez ici dans la rubrique "To Invoke" de "Event Information" :
<http://msdn2.microsoft.com/en-us/library/ms536973(VS.85).aspx>
Si c'est le cas et que ça gêne il suffit généralement d'appliquer la
même technique que le second exemple : retirer le gestionnaire
d'onunload avant l'exécution de la méthode/fonction et remettre le
gestionnaire après.
A noter pour l'anecdote que la fermeture d'une fenêtre via un bouton
dans un hta peut aussi se faire en envoyant ALT + F4 avec sendkeys ...
un des rares cas où sendkeys est sûr à 100 % :-)
merci et tous les deux pour vos réponses et félicitaiions à Jean pour son score impressionnant aux scripting games, je suis très honoré.
Merci, j'ai vu que vous n'étiez pas en reste non plus ;-)
Sa solution actuelle me semble bonne à vrai dire mais reste à savoir ce qui le dérange dans cette solution.
En fait ce qui me dérange c'est que si je cache le bouton "Fermer" je cache aussi le bouton réduire et dans une moindre mesure le bouton agrandir mais surtout le déplacement de la fenetre. Sachant que mes HTA tournent des postes helpdesk qui ont en permanence au minimum 20 fenetres ouvertes (des consoles de monitoring essentiellement) je peux pas empècher ni la réduction des fenetres, ni leur déplacement, les techniciens doivent agencer leur bureau comme ils le souhaitent... Ou alors pour contourner le problème, existe-t-il un moyen de cacher uniquement le bouton fermer, ce qui rendrait alors possible le déplacement de la fenetre et sa réduction.
Non pas avec ce qui est disponible par défaut.
Je pense que le plus simple sera d'utiliser l'événement onunload.
La première chose à faire sera de gérer l'appui sur la touche F5 ( raffraichissement) qui déclenche onunload.
Ci dessous vous trouverez 2 exemples pour le faire.
Le premier annule l'appui sur la touche en utilisant simplement l'événement onkeydown.
Le second n'annule pas l'appui sur la touche F5 mais annule le déclenchement de l'événement onunload. Pour ce faire il supprime le gestionnaire de l'événement onunload dans l'événement onkeydow (pour la touche F5) et remet le gestionnaire dans l'événement onkeyup.
La seconde chose à faire est de vérifier que le script n'utilise pas de méthodes, fonctions qui déclenche un événement onunload. Vous trouvez une liste de ces méthodes, fonctions dans le SDK. Regardez ici dans la rubrique "To Invoke" de "Event Information" : <http://msdn2.microsoft.com/en-us/library/ms536973(VS.85).aspx>
Si c'est le cas et que ça gêne il suffit généralement d'appliquer la même technique que le second exemple : retirer le gestionnaire d'onunload avant l'exécution de la méthode/fonction et remettre le gestionnaire après.
A noter pour l'anecdote que la fermeture d'une fenêtre via un bouton dans un hta peut aussi se faire en envoyant ALT + F4 avec sendkeys ... un des rares cas où sendkeys est sûr à 100 % :-)
With B1 .Value="Fermer" .OnClick=GetRef("BCLK") End With
With Window .OnUnload=GetRef("WOUL") .Document.OnKeyDown=GetRef("WOKD") .Document.OnKeyUp=GetRef("WOKU") End With
Sub BCLK CreateObject("WScript.Shell").SendKeys("%{F4}") End Sub
Sub WOUL msgbox "Fermeture" End Sub
Sub WOKD With Window.Event If .KeyCode6 Then Window.OnUnload="" End With End Sub
'KeyCode 116 = touche F5
Sub WOKU With Window.Event If .KeyCode6 Then Window.OnUnload=GetRef("WOUL") End With End Sub
</script>
<input type=button id± /> <!---8<--->
Merci d'avance pour vos idées...
Patrick
Amicalement,
-- Jean - JMST Belgium
Jean
La première chose à faire sera de gérer l'appui sur la touche F5
A la relecture de codes il faut aussi s'occuper du menu conextuel (clic droit) parcequ'il contient un item "Actualiser" qui déclenche onunload.
Le plus simple est de désactiver les menus contextuels avec l'attribut ContextMenu de la balise HTA.
Sinon on peut construire ses propres menus contextuels en utilisant l'événement OnContextMenu. Voir exemple ci dessous qui illustre l'ajout d'un menu contextuel permettant de raffraichir ou recharger la page sans déclencher onunload.
With B1 .Value="Fermer" .OnClick=GetRef("BCLK") End With
With Window .OnUnload=GetRef("WOUL") .Document.OnKeyDown=GetRef("WOKD") .Document.OnKeyUp=GetRef("WOKU") .Document.OnContextMenu=GetRef("WOCM") End With
Sub Document_OnClick If Menu_Actif Then Window.Document.all.MENU.RemoveNode(True) Menu_Actifúlse End If End Sub
Sub BCLK CreateObject("WScript.Shell").SendKeys("%{F4}") End Sub
Sub WOUL msgbox "Fermeture" End Sub
'KeyCode 116 = touche F5
Sub WOKD With Window If .Event.KeyCode6 Then .OnUnload="" End With End Sub
Sub WOKU With Window If .Event.KeyCode6 Then .OnUnload=GetRef("WOUL") End With End Sub
Sub WOCM If Not Menu_Actif Then Menu Window.Event.ReturnValueúlse End Sub
' Construction du menu contextuel Sub Menu
Menu_Actif=True With Window.Document With .Body.AppendChild(.CreateElement("table")) .Border=1 .id="MENU" With .Style .Position="absolute" .Left=Window.Event.x .Top=Window.Event.y .BackgroundColor="lemonchiffon" .Cursor="hand" End With With .InsertRow.InsertCell .InnerText="Actualiser" .Onclick=GetRef("Menu_Actualiser") End With With .InsertRow.InsertCell .InnerText="Recharger" .OnClick=GetRef("Menu_Recharger") End With With .InsertRow.InsertCell .InnerText="Imprimer" .OnClick=GetRef("Menu_Imprimer") End With End With End With End Sub
' Gestionnaires des clics sur les éléments du menu contextuel Sub Menu_Actualiser With Window .OnUnload="" .Document.ExecCommand("Refresh") End With End Sub
Sub Menu_Recharger With Window .OnUnload="" .location.reload End With End Sub
Sub Menu_Imprimer Window.Document.ExecCommand("Print") End Sub
</script> <input type=button id± /> <!---8<--->
Amicalement,
-- Jean - JMST Belgium
La première chose à faire sera de gérer l'appui sur la touche F5
A la relecture de codes il faut aussi s'occuper du menu conextuel (clic
droit) parcequ'il contient un item "Actualiser" qui déclenche onunload.
Le plus simple est de désactiver les menus contextuels avec l'attribut
ContextMenu de la balise HTA.
Sinon on peut construire ses propres menus contextuels en utilisant
l'événement OnContextMenu.
Voir exemple ci dessous qui illustre l'ajout d'un menu contextuel
permettant de raffraichir ou recharger la page sans déclencher
onunload.
With B1
.Value="Fermer"
.OnClick=GetRef("BCLK")
End With
With Window
.OnUnload=GetRef("WOUL")
.Document.OnKeyDown=GetRef("WOKD")
.Document.OnKeyUp=GetRef("WOKU")
.Document.OnContextMenu=GetRef("WOCM")
End With
Sub Document_OnClick
If Menu_Actif Then
Window.Document.all.MENU.RemoveNode(True)
Menu_Actifúlse
End If
End Sub
Sub BCLK
CreateObject("WScript.Shell").SendKeys("%{F4}")
End Sub
Sub WOUL
msgbox "Fermeture"
End Sub
'KeyCode 116 = touche F5
Sub WOKD
With Window
If .Event.KeyCode6 Then .OnUnload=""
End With
End Sub
Sub WOKU
With Window
If .Event.KeyCode6 Then .OnUnload=GetRef("WOUL")
End With
End Sub
Sub WOCM
If Not Menu_Actif Then Menu
Window.Event.ReturnValueúlse
End Sub
' Construction du menu contextuel
Sub Menu
Menu_Actif=True
With Window.Document
With .Body.AppendChild(.CreateElement("table"))
.Border=1
.id="MENU"
With .Style
.Position="absolute"
.Left=Window.Event.x
.Top=Window.Event.y
.BackgroundColor="lemonchiffon"
.Cursor="hand"
End With
With .InsertRow.InsertCell
.InnerText="Actualiser"
.Onclick=GetRef("Menu_Actualiser")
End With
With .InsertRow.InsertCell
.InnerText="Recharger"
.OnClick=GetRef("Menu_Recharger")
End With
With .InsertRow.InsertCell
.InnerText="Imprimer"
.OnClick=GetRef("Menu_Imprimer")
End With
End With
End With
End Sub
' Gestionnaires des clics sur les éléments du menu contextuel
Sub Menu_Actualiser
With Window
.OnUnload=""
.Document.ExecCommand("Refresh")
End With
End Sub
Sub Menu_Recharger
With Window
.OnUnload=""
.location.reload
End With
End Sub
Sub Menu_Imprimer
Window.Document.ExecCommand("Print")
End Sub
La première chose à faire sera de gérer l'appui sur la touche F5
A la relecture de codes il faut aussi s'occuper du menu conextuel (clic droit) parcequ'il contient un item "Actualiser" qui déclenche onunload.
Le plus simple est de désactiver les menus contextuels avec l'attribut ContextMenu de la balise HTA.
Sinon on peut construire ses propres menus contextuels en utilisant l'événement OnContextMenu. Voir exemple ci dessous qui illustre l'ajout d'un menu contextuel permettant de raffraichir ou recharger la page sans déclencher onunload.
With B1 .Value="Fermer" .OnClick=GetRef("BCLK") End With
With Window .OnUnload=GetRef("WOUL") .Document.OnKeyDown=GetRef("WOKD") .Document.OnKeyUp=GetRef("WOKU") .Document.OnContextMenu=GetRef("WOCM") End With
Sub Document_OnClick If Menu_Actif Then Window.Document.all.MENU.RemoveNode(True) Menu_Actifúlse End If End Sub
Sub BCLK CreateObject("WScript.Shell").SendKeys("%{F4}") End Sub
Sub WOUL msgbox "Fermeture" End Sub
'KeyCode 116 = touche F5
Sub WOKD With Window If .Event.KeyCode6 Then .OnUnload="" End With End Sub
Sub WOKU With Window If .Event.KeyCode6 Then .OnUnload=GetRef("WOUL") End With End Sub
Sub WOCM If Not Menu_Actif Then Menu Window.Event.ReturnValueúlse End Sub
' Construction du menu contextuel Sub Menu
Menu_Actif=True With Window.Document With .Body.AppendChild(.CreateElement("table")) .Border=1 .id="MENU" With .Style .Position="absolute" .Left=Window.Event.x .Top=Window.Event.y .BackgroundColor="lemonchiffon" .Cursor="hand" End With With .InsertRow.InsertCell .InnerText="Actualiser" .Onclick=GetRef("Menu_Actualiser") End With With .InsertRow.InsertCell .InnerText="Recharger" .OnClick=GetRef("Menu_Recharger") End With With .InsertRow.InsertCell .InnerText="Imprimer" .OnClick=GetRef("Menu_Imprimer") End With End With End With End Sub
' Gestionnaires des clics sur les éléments du menu contextuel Sub Menu_Actualiser With Window .OnUnload="" .Document.ExecCommand("Refresh") End With End Sub
Sub Menu_Recharger With Window .OnUnload="" .location.reload End With End Sub
Sub Menu_Imprimer Window.Document.ExecCommand("Print") End Sub
</script> <input type=button id± /> <!---8<--->
Amicalement,
-- Jean - JMST Belgium
Patrick PALAIS
Jean,
merci pour ces exemples très complets, ca correspond parfaitement à ce que je recherche. A bientot
Patrick
Jean,
merci pour ces exemples très complets, ca correspond parfaitement à ce que
je recherche.
A bientot