OVH Cloud OVH Cloud

comment connaitre le login de la personne connectée localement?

9 réponses
Avatar
Eric B
Bonjour,

Je souhaite que mon application (un service WINDOWS NT/2000 créé en
C++Builder4) puisse différencier l'Administrateur des autres utilisateurs
autorisés sur un ordinateur donné.
Pour bien faire, il faut reconnaitre l'utilisateur dès l'ouverture de la
session locale.
Par ailleurs, existe-t-il un moyen de déterminer si une session locale est
ouverte ou non ?

Merci d'avance pour votre aide,

Eric BILLOT
Conextel
71 rue de Bellevue
92100 Boulogne

9 réponses

Avatar
Patrick Philippot
Eric B wrote:
Pour bien faire, il faut reconnaitre l'utilisateur dès l'ouverture de
la session locale.
Par ailleurs, existe-t-il un moyen de déterminer si une session
locale est ouverte ou non ?



J'utilise actuellement un code similaire à ce qui suit dans un service
NT (il faudra adapter pour BCB)

CString MaClasse::GetCurrentUserName()
{
CString sUserName;
HWND hProgman = FindWindow("Progman", NULL);

if (hProgman != NULL) // Explorer est actif
{
DWORD dwProcessId;
HANDLE hProcess, hToken;
DWORD dwLen;

GetWindowThreadProcessId(hProgman, &dwProcessId);

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken) != 0)
{
dwLen = MAX_PATH;

::ImpersonateLoggedOnUser(hToken); // nécessaire sinon GetUserName va
échouer: nous sommes dans un service
::GetUserName(sUserName.GetBuffer(MAX_USERNAMELEN), &dwLen);
::RevertToSelf();

sUserName.ReleaseBuffer();

::CloseHandle(hToken);
::CloseHandle(hProcess);
}
}
// else : pas de session active

m_bActiveSession = !sUserName.IsEmpty();

return sUserName;
}

Le test sur la fenêtre Progman fonctionne aussi sous Win9x (mais pas le
code qui suit).

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
Arnaud Debaene
Patrick Philippot wrote:
Eric B wrote:
HWND hProgman = FindWindow("Progman", NULL);



Progman ??? Tu utilises encore Progman ?

Arnaud
Avatar
François Müller
Bonjour

"Eric B" escribió en el mensaje
news:bj9bil$fet$
| merci pour cette suggestion, je crois que cela répond précisément à mon
| besoin.

Il y a peut être une autre solution en plus de celle décrite par
P.Philipppot : utiliser le LsaEnumLogonSession (j'ai pas aprofondi)

François
Avatar
Patrick Philippot
François Müller wrote:
"Eric B" escribió en el mensaje
news:bj9bil$fet$
Il y a peut être une autre solution en plus de celle décrite par
P.Philipppot : utiliser le LsaEnumLogonSession (j'ai pas aprofondi)



Bonjour,

LsaEnumerateLogonSessions?

Requirements
Windows NT/2000/XP: Included in Windows XP and Windows .NET Server.

Ah, béni soit le jour où il n'y aura plus d'utilisateurs Win9x, NT4 ou
2000 :-)

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
François Müller
Bonjour

"Patrick Philippot" escribió en el mensaje
news:bj9qs5|
| LsaEnumerateLogonSessions?
|
| Requirements
| Windows NT/2000/XP: Included in Windows XP and Windows .NET Server.
|
| Ah, béni soit le jour où il n'y aura plus d'utilisateurs Win9x, NT4 ou
| 2000 :-)

Oupss... au temps pour moi ...

François
Avatar
Patrick Philippot
François Müller wrote:
Oupss... au temps pour moi ...



Tiens, c'est rare quelqu'un qui orthographie correctement cette
expression d'origine militaire ou musicale. Quoiqu'il y ait encore débat
sur ce point. Voir http://www.langue-fr.net/index/A/au_temps-autant.htm

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
Arnaud Debaene
Patrick Philippot wrote:
Arnaud Debaene wrote:
Progman ??? Tu utilises encore Progman ?



Eh oui, toi aussi d'ailleurs :-)). Cette fenêtre existe toujours dès
que Explorer tourne que ce soit sous Win9x, NT, 2000 ou XP. Regarde
avec Spy++.



Exact, autant pour moi! J'ai réagi instinctivement en pensant au programme
Progman de Win 3.1 (touours distribué dans Windows d'ailleurs)....

Arnaud
Avatar
Patrick Philippot
Arnaud Debaene wrote:
Exact, autant pour moi! J'ai réagi instinctivement en pensant au
programme Progman de Win 3.1 (touours distribué dans Windows
d'ailleurs)....



Je dois dire que j'ai été surpris quand j'ai découvert cette fenêtre
cachée récemment. Mais je suis bien content qu'elle soit là car cela
résout de manière simplissime mon problème qui est identique à celui
d'Eric. D'autant plus que mon service NT fonctionne aussi en
pseudo-service sous Win9x (exe unique).

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
Eric B
La suggestion de Patrick a parfaitement fonctionné pour mon service.
Ce problème est maintenant résolu!

Merci encore

Eric

"Patrick Philippot" a écrit dans le message
de news: bjah6i$q22$
Arnaud Debaene wrote:
> Exact, autant pour moi! J'ai réagi instinctivement en pensant au
> programme Progman de Win 3.1 (touours distribué dans Windows
> d'ailleurs)....

Je dois dire que j'ai été surpris quand j'ai découvert cette fenêtre
cachée récemment. Mais je suis bien content qu'elle soit là car cela
résout de manière simplissime mon problème qui est identique à celui
d'Eric. D'autant plus que mon service NT fonctionne aussi en
pseudo-service sous Win9x (exe unique).

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)