Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Detournement d'événement (Controle d'utilisation).

16 réponses
Avatar
Eric Marcastel
Bonjour,
C'est la journée des questions...

Je cherche a vérouiller mon application soit sur demande, soit aprés une
certaine durée sans action par l'utilisateur.

Biensur il y a la solution de l'écran de veille, mais la sécurité n'est pas
la même (il peut être désactivé..), que l'obligation de saisir a nouveau un
mot de passe aplication.

J'ai envisagé plusieurs possibilité, mais je n'ai pas trouvé de solution:

1/ Dérouter l'interuption du clic droit de la souris dés le lancement de mon
application, pour qu'elle appel, une petite routine de contrôle (mais je ne
sais pas dérouter l'interruption, et encore moins rendre le focus au champ à
l'origine.
2/ Mettre dans tous mes bouton un appel a cette petite routine, cela me
parait plus facile à mettre au point, mais la mise en place sur toutes les
touches, champs et autre sera un vrai casse-tête!!!
3/qu'il existe une solution Windev...Mais je n'ai pas trouvé,
4/Que quelqu'un ici est déja eu ce genre de problème?! Et, ai trouvé une
solution, et qu'il veuille bien la partager.

bon, je cherche.. Si je trouves, je promet une réponse..

Salutations

Eric Marcastel

10 réponses

1 2
Avatar
SP&B
"Eric Marcastel" a écrit dans le message de
news:
Bonjour,
C'est la journée des questions...

Je cherche a vérouiller mon application soit sur demande, soit aprés une
certaine durée sans action par l'utilisateur.

Biensur il y a la solution de l'écran de veille, mais la sécurité n'est


pas
la même (il peut être désactivé..), que l'obligation de saisir a nouveau


un
mot de passe aplication.

J'ai envisagé plusieurs possibilité, mais je n'ai pas trouvé de solution:

1/ Dérouter l'interuption du clic droit de la souris dés le lancement de


mon
application, pour qu'elle appel, une petite routine de contrôle (mais je


ne
sais pas dérouter l'interruption, et encore moins rendre le focus au champ


à
l'origine.
2/ Mettre dans tous mes bouton un appel a cette petite routine, cela me
parait plus facile à mettre au point, mais la mise en place sur toutes les
touches, champs et autre sera un vrai casse-tête!!!
3/qu'il existe une solution Windev...Mais je n'ai pas trouvé,
4/Que quelqu'un ici est déja eu ce genre de problème?! Et, ai trouvé une
solution, et qu'il veuille bien la partager.

bon, je cherche.. Si je trouves, je promet une réponse..

Salutations

Eric Marcastel





Bonjour,

Voici quelques éléments qui doivent pouvoir apporter un début de solution à
votre problème

Créer un Bouton (Bouton1 par exemple) sans libellé

Dans le code d'initialisation de la fenêtre (ou prise de focus) mettre le
code suivant :
GLOBAL
eX est un entier
eX = 30 // Pour une tempo de 30 secondes
TimerSys(pRebours,100,2) // Pour incrémenter le compteur chaque seconde

Créer une procédure locale pRebours avec le code suivant :
PROCEDURE pRebours()
eX = eX - 1
Bouton1..Libellé = eX
SI eX = 0 ALORS
Ferme()
FIN

Dans le code clic du bouton mettre le code suivant :
FinTimerSys(2) // Arrete le timer sur un clic sur le bouton
eX = 30 // Relance le compteur pour 30 secondes
TimerSys(pRebours,100,2) // Relance le timer

Sincères salutations.
--
Jean-Claude FLAJOULOT
Sécurité, Pointage & Biométrie

enlever _no.spam pour me contacter en PV.
http://perso.wanadoo.fr/securite.pointage.et.biometrie/
Avatar
Fabrice Burghgraeve
bonjour.

"Eric Marcastel" a écrit dans le message de
news:
(...)
Je cherche a vérouiller mon application soit sur demande, soit aprés une
certaine durée sans action par l'utilisateur.


(...)
2/ Mettre dans tous mes bouton un appel a cette petite routine, cela me
parait plus facile à mettre au point, mais la mise en place sur toutes les
touches, champs et autre sera un vrai casse-tête!!!


(...)

4/Que quelqu'un ici est déja eu ce genre de problème?! Et, ai trouvé une
solution, et qu'il veuille bien la partager.

Eric Marcastel



Nous avons deja ete confrontes a cette question, et nous n'y avons pas
trouvé de solution parfaitement satisfaisante.
Le principe est de mettre un timer qui se declanche toutes les secondes pour
decrementer un compteur, et de sortir de l'application des que l'utilsateur
n'a pas fait d'action depuis un certain temps.
Donc de remettre le timer a sa valeur initiale des que l'utilisateur fait
une action.

Toute la difficulte est la :
comment determiner que l'utilisateur a fait une action ?
On pourrait mettre un bout de code dans chaque bouton, chaque modif de
champs etc.
Mais ce serait trop lourd.

La solution que nous avons adoptee est au "cas par cas"

Globalement, dans 90% de l'application, l'utilisateur n'est pas "longtemps"
dans une fenetre.
Il ouvre une fenetre pour consulter/saisir un truc, pour choisir un element
dans une liste...
On peut donc mettre ce bout de code a chaque ouverture et fermeture de
fenetre, en considerant que si l'utilisateur a ouvert la fenetre il y a 10
min (par exemple. le temps de time-out doit etre parametrable je pense) et
qu'il ne l'a pas ferme, alors il n'est plus devant l'ecran.

Reste le cas des fenetres qui peuvent etre ouvertes longtemps.
La il faut determiner quand peut-on considerer que l'utilisateur ne fait
plus rien.
Par exemple en mettant le bout de code sur chaque bouton, ou a chaque sortie
de ligned'une table en saisie...
Et considerer par exemple que l'utilisateur ne fait plus rien quand ca fait
10 min qu'il est occupe a saisir la meme ligne d'une commande... (alors
qu'il peut mettre plus de 10 min pour saisir la commande en totalite)

Voila la methode que nous avons employée.
Elle est un peu "grossiere", mais tres suffisante en pratique...

(Il ne faut pas oublier de desactiver le timer pour des traitements longs.)

--
Fabrice Burghgraeve
Computer & Services
suivez ce lien pour me repondre en prive :
http://cerbermail.com/?I3GMPRuXDD
Avatar
Eric Marcastel
Merci pour votre réponse,

C'est une des solutions de j'ai envisagé, mais il faut que l'appui, de
n'importe quelle bouton provoque le redémarrage du timer, je ne peut pas
obliger les utilisateurs à appuyer toutes les 30 secondes sur un bouton. Il
faudrait rajouter "ExécuteTraitement(Bouton, clic) dans tout les clics des
objets de la fenêtre, et c'est la que cela devient laborieux (170 fenêtres,
pour moi....)

Salutations à vous,
Eric Marcastel

Voici quelques éléments qui doivent pouvoir apporter un début de solution


à
votre problème

Créer un Bouton (Bouton1 par exemple) sans libellé

Dans le code d'initialisation de la fenêtre (ou prise de focus) mettre le
code suivant :
GLOBAL
eX est un entier
eX = 30 // Pour une tempo de 30 secondes
TimerSys(pRebours,100,2) // Pour incrémenter le compteur chaque seconde

Créer une procédure locale pRebours avec le code suivant :
PROCEDURE pRebours()
eX = eX - 1
Bouton1..Libellé = eX
SI eX = 0 ALORS
Ferme()
FIN

Dans le code clic du bouton mettre le code suivant :
FinTimerSys(2) // Arrete le timer sur un clic sur le bouton
eX = 30 // Relance le compteur pour 30 secondes
TimerSys(pRebours,100,2) // Relance le timer

Sincères salutations.
--
Jean-Claude FLAJOULOT
Sécurité, Pointage & Biométrie

enlever _no.spam pour me contacter en PV.
http://perso.wanadoo.fr/securite.pointage.et.biometrie/





Avatar
Eric Marcastel
Bon, Bon, faute de mieux, je pense que la mise en place de mon verrouillage
va se faire au compte-goute.
En tout cas, je vous remercie pour la réponse, et si je trouves quelque
chose de plus facile, je le posterai.
Bonne fin de journée
Eric Marcastel

"Fabrice Burghgraeve" a
écrit dans le message de news:bn0pkd$g94$
bonjour.

"Eric Marcastel" a écrit dans le message de
news:
(...)
> Je cherche a vérouiller mon application soit sur demande, soit aprés une
> certaine durée sans action par l'utilisateur.
(...)
> 2/ Mettre dans tous mes bouton un appel a cette petite routine, cela me
> parait plus facile à mettre au point, mais la mise en place sur toutes


les
> touches, champs et autre sera un vrai casse-tête!!!
(...)

> 4/Que quelqu'un ici est déja eu ce genre de problème?! Et, ai trouvé une
> solution, et qu'il veuille bien la partager.
>
> Eric Marcastel

Nous avons deja ete confrontes a cette question, et nous n'y avons pas
trouvé de solution parfaitement satisfaisante.
Le principe est de mettre un timer qui se declanche toutes les secondes


pour
decrementer un compteur, et de sortir de l'application des que


l'utilsateur
n'a pas fait d'action depuis un certain temps.
Donc de remettre le timer a sa valeur initiale des que l'utilisateur fait
une action.

Toute la difficulte est la :
comment determiner que l'utilisateur a fait une action ?
On pourrait mettre un bout de code dans chaque bouton, chaque modif de
champs etc.
Mais ce serait trop lourd.

La solution que nous avons adoptee est au "cas par cas"

Globalement, dans 90% de l'application, l'utilisateur n'est pas


"longtemps"
dans une fenetre.
Il ouvre une fenetre pour consulter/saisir un truc, pour choisir un


element
dans une liste...
On peut donc mettre ce bout de code a chaque ouverture et fermeture de
fenetre, en considerant que si l'utilisateur a ouvert la fenetre il y a 10
min (par exemple. le temps de time-out doit etre parametrable je pense) et
qu'il ne l'a pas ferme, alors il n'est plus devant l'ecran.

Reste le cas des fenetres qui peuvent etre ouvertes longtemps.
La il faut determiner quand peut-on considerer que l'utilisateur ne fait
plus rien.
Par exemple en mettant le bout de code sur chaque bouton, ou a chaque


sortie
de ligned'une table en saisie...
Et considerer par exemple que l'utilisateur ne fait plus rien quand ca


fait
10 min qu'il est occupe a saisir la meme ligne d'une commande... (alors
qu'il peut mettre plus de 10 min pour saisir la commande en totalite)

Voila la methode que nous avons employée.
Elle est un peu "grossiere", mais tres suffisante en pratique...

(Il ne faut pas oublier de desactiver le timer pour des traitements


longs.)

--
Fabrice Burghgraeve
Computer & Services
suivez ce lien pour me repondre en prive :
http://cerbermail.com/?I3GMPRuXDD




Avatar
Michel Moreno
Bonjour,

Je cherche a vérouiller mon application soit sur demande, soit aprés une
certaine durée sans action par l'utilisateur.



Pour la durée ce que je ferais :
mettre une variable globale dans le projet
TimeOut est une chaine
deux evenements
evenement("ReinitialiseTimetout","*.*",513)
evenement("ReinitialiseTimetout","*.*",256)
513 : clic gauche de la souris , 256 : 1 touche enfoncée
"*.*" : tous les champs de toutes les fenetres
un timer
Timersys("FinTimeout",heureversentier("00050000")) // Appele toutes les
5 minutes

Procedure (Globale) ReinitialiseTimetout()
TimeOut=heuresys()

Procedure (Globale) FinTimeOut()
si heureversentier(heuresys()) - heureversentier(Timeout) >
heureversentier("00300000") alors // 30 Min sans cliquer ou taper 1
caractere
maProcedureClicDroitouTimeOut
fin

pour le clic droit
evenement("maProcedureClicDroitouTimeOut","*.*",516)


Salutations



Salutations
Eric Marcastel




Michel Moreno






Avatar
Pierre-Yves TAVERNIER
bonjour,

pour savoir si l'utilisateur a fait une action, il faut utiliser un hook.

PYT
"Eric Marcastel" a écrit dans le message de
news:
Bon, Bon, faute de mieux, je pense que la mise en place de mon


verrouillage
va se faire au compte-goute.
En tout cas, je vous remercie pour la réponse, et si je trouves quelque
chose de plus facile, je le posterai.
Bonne fin de journée
Eric Marcastel

"Fabrice Burghgraeve"


a
écrit dans le message de news:bn0pkd$g94$
> bonjour.
>
> "Eric Marcastel" a écrit dans le message de
> news:
> (...)
> > Je cherche a vérouiller mon application soit sur demande, soit aprés


une
> > certaine durée sans action par l'utilisateur.
> (...)
> > 2/ Mettre dans tous mes bouton un appel a cette petite routine, cela


me
> > parait plus facile à mettre au point, mais la mise en place sur toutes
les
> > touches, champs et autre sera un vrai casse-tête!!!
> (...)
>
> > 4/Que quelqu'un ici est déja eu ce genre de problème?! Et, ai trouvé


une
> > solution, et qu'il veuille bien la partager.
> >
> > Eric Marcastel
>
> Nous avons deja ete confrontes a cette question, et nous n'y avons pas
> trouvé de solution parfaitement satisfaisante.
> Le principe est de mettre un timer qui se declanche toutes les secondes
pour
> decrementer un compteur, et de sortir de l'application des que
l'utilsateur
> n'a pas fait d'action depuis un certain temps.
> Donc de remettre le timer a sa valeur initiale des que l'utilisateur


fait
> une action.
>
> Toute la difficulte est la :
> comment determiner que l'utilisateur a fait une action ?
> On pourrait mettre un bout de code dans chaque bouton, chaque modif de
> champs etc.
> Mais ce serait trop lourd.
>
> La solution que nous avons adoptee est au "cas par cas"
>
> Globalement, dans 90% de l'application, l'utilisateur n'est pas
"longtemps"
> dans une fenetre.
> Il ouvre une fenetre pour consulter/saisir un truc, pour choisir un
element
> dans une liste...
> On peut donc mettre ce bout de code a chaque ouverture et fermeture de
> fenetre, en considerant que si l'utilisateur a ouvert la fenetre il y a


10
> min (par exemple. le temps de time-out doit etre parametrable je pense)


et
> qu'il ne l'a pas ferme, alors il n'est plus devant l'ecran.
>
> Reste le cas des fenetres qui peuvent etre ouvertes longtemps.
> La il faut determiner quand peut-on considerer que l'utilisateur ne fait
> plus rien.
> Par exemple en mettant le bout de code sur chaque bouton, ou a chaque
sortie
> de ligned'une table en saisie...
> Et considerer par exemple que l'utilisateur ne fait plus rien quand ca
fait
> 10 min qu'il est occupe a saisir la meme ligne d'une commande... (alors
> qu'il peut mettre plus de 10 min pour saisir la commande en totalite)
>
> Voila la methode que nous avons employée.
> Elle est un peu "grossiere", mais tres suffisante en pratique...
>
> (Il ne faut pas oublier de desactiver le timer pour des traitements
longs.)
>
> --
> Fabrice Burghgraeve
> Computer & Services
> suivez ce lien pour me repondre en prive :
> http://cerbermail.com/?I3GMPRuXDD
>
>




Avatar
Eric Marcastel
Bonjour,
Hook?
Fonction permettant le contrôle (monitoring) des messages d'entrée-sortie
d'une application. Autre définition possible : fonction permettant une plus
grande facilité dans l'adjonction de fonctionnalités nouvelles au
programme.(sic internet)

Bien, Mais comment faire sous Windev?

Merci,

eric marcastel


"Pierre-Yves TAVERNIER" a écrit dans le
message de news:3f9412c3$0$10406$
bonjour,

pour savoir si l'utilisateur a fait une action, il faut utiliser un hook.

PYT


Avatar
Eric Marcastel
Bonjour, et merci

ça marche tres bien, c'est tres simple et c'est exactement ce que je
cherchais : Je pense que beaucoups de developpeurs doivent en avoir besoin!!

Voilà une journée qui commence bien.

Bonne journée, Mr Moreno

eric marcastel

"Michel Moreno" a écrit dans le message de
news:bn0tmm$rl6a8$
Bonjour,

> Je cherche a vérouiller mon application soit sur demande, soit aprés une
> certaine durée sans action par l'utilisateur.
>
Pour la durée ce que je ferais :
mettre une variable globale dans le projet
TimeOut est une chaine
deux evenements
evenement("ReinitialiseTimetout","*.*",513)
evenement("ReinitialiseTimetout","*.*",256)
513 : clic gauche de la souris , 256 : 1 touche enfoncée
"*.*" : tous les champs de toutes les fenetres
un timer
Timersys("FinTimeout",heureversentier("00050000")) // Appele toutes les
5 minutes

Procedure (Globale) ReinitialiseTimetout()
TimeOut=heuresys()

Procedure (Globale) FinTimeOut()
si heureversentier(heuresys()) - heureversentier(Timeout) >
heureversentier("00300000") alors // 30 Min sans cliquer ou taper 1
caractere
maProcedureClicDroitouTimeOut
fin

pour le clic droit
evenement("maProcedureClicDroitouTimeOut","*.*",516)

>
> Salutations
>
Salutations
> Eric Marcastel
>
>
Michel Moreno

>
>
>



Avatar
Eric Marcastel
Bonjour,

Dans le cadre de ce blocage d'application, j'ai (nous avons) maintenant la
solution, voir Réponse de Michel Moreno, qui marche trés bien et est facile
à mettre en place.

Mais maintenant, il me manque une autre chose (bon t'es payé pour quoi, t'es
programmeur ou charcutier "Ps: j'ai rien contre les charcutier"):
Il faut verrouiller l'ensemble des fenêtres en cours d'utilisation, là
aussi, j'ai plusieurs idées mais pas de bonne solution, alors!!!

Je précise que je fonctionne avec des fenêtres non modales, et en plus de la
fenêtre "Menu principal", il peut y avoir, plusieurs fenêtres Soeurs (qui
peuvent prendre le focus, indépendament).

1) Ouvrir une fenêtre de verrouillage avec Utilise(NomFenêtre), mais dans ce
cas toutes les autres fenêtres sont fermées. Les utilisateurs vont vite
renvoyer paître le programmeur, il faut pouvoir bloquer les fenêtres, mais
les laisser dans l'état.
2) Trouver une fonction qui me donne la liste des fenêtres ouvertes (j'ai
pas trouvé, si vous me confirmez que cette fonction n'existe pas,
j'enverrais un Mail à la Hot Line)
3) Créer un tableau, des fenêtres actives dans mon appli, Possible, mais
sûrement générateur de Blocage intempestif (et compliqué, il va falloir
programmer, et c'est bien connu les programmeur sont très feignants).
4) Verrouiller l'ensemble des fenêtres par une fonction type fenEtat
(*,Invisible ou grisé ou inactif) -> ça ne marche pas ( je vais envoyer un
Mail à la Hot Line pour le demander)
5) Vous demandez si vous avez une solution, genre fonction Windows de
dessous les fagots ou autre.

Salutations

Eric Marcastel
Avatar
Michel Moreno
Eric Marcastel wrote:
Bonjour,



Bonjour

Il faut verrouiller l'ensemble des fenêtres en cours d'utilisation, là
aussi, j'ai plusieurs idées mais pas de bonne solution, alors!!!

Je précise que je fonctionne avec des fenêtres non modales, et en plus de la
fenêtre "Menu principal", il peut y avoir, plusieurs fenêtres Soeurs (qui
peuvent prendre le focus, indépendament).


ben, il me semble (pratiquement sur en 5.5) que si t'ouvres 1 fenetre
modale , les fenetres filles ou soeurs sont bloquées. Donc dans ton cas,
dans ta procedure "maprocedureclicdroitoutimeout" il te suffit de faire :
ouvre("FenetreBloquante")


Salutations




Salutations

Eric Marcastel




Michel Moreno
1 2