OVH Cloud OVH Cloud

Déconnexion automatique d'un utilisateur sur inactivité souris c la

4 réponses
Avatar
isa
Bonjour,

Je développe une application VB6 avec gestion de droit d'accès utilisateur.
Je souhaiterais pouvoir déconnecter un utilisateur au bout d'un certain
temps d'inactivité souris ou clavier.

Existe t'il une solution API, dll... ?

La solution d'un timer relancé sur chaque mouvement de la souris ne me
convient pas puisqu'il faut la mettre sur chaque objet de chaque form, ce qui
est plutôt lourd.

Quelqu'un aurait il une idée ?

Merci d'avance.

Isabelle

4 réponses

Avatar
LE TROLL
Salut,

Tu as l'API GetKeyState, mais avec un timer... Par
contre ça marche il me semble pour l'application, et non pas
juste pour un objet...
Peut être que d'autres auront une solution, mais je ne vois
pas trop comment interroger une application sans aller
dedans, ou sans lui demander d'envoyer des signaux
régulièrement (des états), d'où la nécessité d'un Timer...

' etat clv + mouse
'
Private Declare Function GetKeyState Lib "user32" (ByVal
nVirtKey As Long) As Integer
Const VK_LBUTTON = 1
'
Sub Form_Activate()
Timer1.Interval = 100
Timer1.Enabled = True
End Sub

Sub Timer1_Timer()
Text1 = "G enfoncé"
If GetKeyState(VK_LBUTTON) >= 0 Then Text1 = "souris
lâchée"
End Sub
----------

"isa" a écrit dans le
message de news:

Bonjour,

Je développe une application VB6 avec gestion de droit
d'accès utilisateur.
Je souhaiterais pouvoir déconnecter un utilisateur au bout
d'un certain
temps d'inactivité souris ou clavier.

Existe t'il une solution API, dll... ?

La solution d'un timer relancé sur chaque mouvement de la
souris ne me
convient pas puisqu'il faut la mettre sur chaque objet de
chaque form, ce qui
est plutôt lourd.

Quelqu'un aurait il une idée ?

Merci d'avance.

Isabelle


Avatar
ng
Salut,

Personnellement, j'utilise la solution suivante :

Un timer avec un interval de 1 min qui va chercher les coordonnées de la
souris (API GetCursorPos()) et qui les compare de minutes en minutes, s'il y
a eu aucun changement j'en déduis que l'utilisateur est "absent" (c'était,
dans mon cas, pour un logiciel de messagerie instantanné).

Ce ce système à ses limites :

* par un heureux hasard, toutes minutes l'utilisateur recolle la souris au
mm endroit (bon d'accord c'est difficilement possible)
* l'utilisateur tape un texte sans utiliser le clavier (dans ce cas on
pourra utiliser GetAsyncKey() pr resourdre le problème).
* l'utilisateur regarde une vidéo.

Dans mon cas le fait qu'il y ait une erreur d'évaluation de la présence de
l'utilisateur sur l'ordi n'avait que peu d'importance (chgement du statut à
absent ds le prog de messagerie instantanné) mais si c'est pour le
déconnecter il faudra faire plus attention (par exemple je n'aimerai pas me
retrouvé deconnecté pendant mon film préféré :D )...



--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

isa wrote:
Bonjour,

Je développe une application VB6 avec gestion de droit d'accès
utilisateur. Je souhaiterais pouvoir déconnecter un utilisateur au
bout d'un certain temps d'inactivité souris ou clavier.

Existe t'il une solution API, dll... ?

La solution d'un timer relancé sur chaque mouvement de la souris ne me
convient pas puisqu'il faut la mettre sur chaque objet de chaque
form, ce qui est plutôt lourd.

Quelqu'un aurait il une idée ?

Merci d'avance.

Isabelle


Avatar
dark poulpo
api windows , cherche des infos sur MOUSEHOOKSTRUCT , SetWindowsHookEx() et
WH_KEYBOARD

voici aussi des exemples c++
http://www.cppfrance.com/auteurdetail.aspx?ID6773

ce que tu peux faire, c'est d'utiliser (je pense) ses dll pour ton prog à
toi.

pas de quoi d'avance,

--
-----
http://dark.freezee.org/
- Dark Update v2.0
- Dark Emule v0.44b r4
- Dark 3D-X 0.7beta
- Dark Shell 1.20
Avatar
Isa
Merci pour vous réponses, j'ai trouvé une solution avec les Hooks.
Voici mon code pour ceux que ça pourraient intéresser.

Isabelle


' ***********************************************
' ***********************************************
' A mettre dans un module
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal
ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA"
(ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal
dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As
Long

Public hHookClavier As Long
Public hHookSouris As Long
Public Const WH_KEYBOARD_LL = 13
Public Const VK_RWIN = &H5B
Public Const VK_LWIN = &H5C
Public Type HOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type

Public Function SurveillanceHook(ByVal idHook As Long, ByVal wParam As Long,
ByVal lParam As Long) As Long
Dim p As HOOKSTRUCT ' variable pour récupérer le vk code
'si idhook < 0 alors pas de traitement
If idHook < 0 Then
'appeler le hook suivant
KeyboardLowLevelProc = CallNextHookEx(hHook, idHook, wParam, ByVal
lParam)
Else
FormAccueil.LancementTimerConnexion
'appeler le hook suivant
KeyboardLowLevelProc = CallNextHookEx(hHook, idHook, wParam, ByVal
lParam)
End If
End Function


' ***********************************************
' ***********************************************
' A mettre dans une form
Private Sub Form_Load()
' ***********************************************
' Chargement de la form
' ***********************************************
' Activer le hooking sur le clavier

hHookClavier = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf
SurveillanceHook, App.hInstance, 0&)
' Activer le hooking sur la souris
hHookSouris = SetWindowsHookEx(WH_MOUSE_LL, AddressOf SurveillanceHook,
App.hInstance, 0&)
End Sub

Private Sub Form_Unload(Cancel As Integer)
' ***********************************************
' Déchargement de la form
' ***********************************************
' Ne pas oublier : retirer le hooking
UnhookWindowsHookEx hHookClavier
UnhookWindowsHookEx hHookSouris
End Sub




"isa" a écrit :

Bonjour,

Je développe une application VB6 avec gestion de droit d'accès utilisateur.
Je souhaiterais pouvoir déconnecter un utilisateur au bout d'un certain
temps d'inactivité souris ou clavier.

Existe t'il une solution API, dll... ?

La solution d'un timer relancé sur chaque mouvement de la souris ne me
convient pas puisqu'il faut la mettre sur chaque objet de chaque form, ce qui
est plutôt lourd.

Quelqu'un aurait il une idée ?

Merci d'avance.

Isabelle