Entrée automatique du login et du pass sur les systèmes nt

Soyez le premier à donner votre avis sur cette source.

Vue 11 262 fois - Téléchargée 959 fois

Description

Le titre n'est pas très clair mais j'ai pas trouvé mieux !
Le but de ce programme est de pouvoir entrez un login et un password dans la boite d'identification au démarrage de windows (XP ou 2000 peut-être NT mais pas sur...).
Ainsi on peut concevoir toute sorte de méthode d'identification pour remplacer celle du mot de passe (Carte à puce etc...)
L'avantage de ma méthode est d'utiliser les identifiants des Dialogues ce qui permet d'être compatible avec n'importe quelle langue... S'il on avait utiliser l'API FindWindow() en ayant entré le titre de la fenêtre cela aurait marché seulement pour l'OS français... !
Avec ma méthode tous les Windows sont compatible (basé sur NT seulement)
Pour que cela fonctionne il faut que le programme soit exécuter en même temps que l'affichage de la boîte de Login.. C'est ici le plus gros problème...
Pour contourner le problème j'ai fait une petite DLL GINA qui exécute le programme au démarrage..
Je posterais cette DLL ce soir sur cppfrance car la j'ai pas le temps..

Malgré ces belles choses :) il y a un quand même un bug:
Lors du vérouillage de l'ordinateur, la fonction n'arrive pas à détecter si l'identification à réussie ou pas..A corriger donc... si quelqu'un arrive n'hésiter pas ;)

J'attend vos commentaires (et vos questions car c'est dur d'être clair sur cette source mais en testant vous comprendrez !!!)

MISE A JOUR DU 22.01.2004
---------------------------------

J'ai mis dans le zip la dll pour éexcuter son programme au démarrage de windows... et aussi un programme pour installer tout ça.. voir mon dernier commentaire... !

Laissez vos commentaires & remarques

Source / Exemple :


Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" ( _
                 ByVal hwnd As Long, _
                 ByVal lpClassName As String, _
                 ByVal nMaxCount As Long) As Long
Public Declare Function GetWindow Lib "user32" ( _
                 ByVal hwnd As Long, _
                 ByVal uCmd As Long) As Long

Public Const WM_SETTEXT  As Long = 12
Public Const BM_CLICK = &HF5
'Fonction réalisée par Cyberdevil - Copyright  2003 Xwave Network
'Elle ne peut en aucun cas être appropriée à un autre nom que celui d'Xwave Network
'http://www.xwaves.net - http://jetforce.xwaves.net
'--------------------------------------------------
Public Function Loginner(ByVal login As String, ByVal password As String, Optional locked As Boolean = False) As Boolean
    Dim hWNDuser As Long, hWNDpass As Long, hWNDok As Long, hWNDgina As Long, ret As Long, ret2 As Long, ret3 As Long
    Dim hWNDlogon As Long, hWNDErreur As Long
    Dim error As Boolean
    hWNDgina = FindWindow("#32770", vbNullString)    'recherche du handle de la fenêtre de login
    If locked = False Then    'si pas vérouillé
        hWNDuser = GetDlgItem(ByVal hWNDgina, 1502)    'recherche du handle du textbox Login de la fenêtre de login
        hWNDpass = GetDlgItem(ByVal hWNDgina, 1503)    'idem que ci-dessus sauf qu'ici, c'est pour le password
        hWNDok = GetDlgItem(ByVal hWNDgina, 1)    'idem que ci-dessus sauf qu'ici, c'est pour le bouton OK
    Else    'si vérouillé
        hWNDuser = GetDlgItem(ByVal hWNDgina, 1953)    'recherche du handle du textbox Login de la fenêtre de login
        hWNDpass = GetDlgItem(ByVal hWNDgina, 1954)    'idem que ci-dessus sauf qu'ici, c'est pour le password
        hWNDok = GetDlgItem(ByVal hWNDgina, 1)    'idem que ci-dessus sauf qu'ici, c'est pour le bouton OK

    End If

    ret = SendMessage(ByVal hWNDuser, WM_SETTEXT, 0, ByVal login)    'on envoie le login

    ret2 = SendMessage(ByVal hWNDpass, WM_SETTEXT, 0, ByVal password)    'on envoie le password

    ret3 = SendMessage(ByVal hWNDok, BM_CLICK, 0, 0)    'on valide le toute
    
    
    hWNDgina = FindWindow("#32770", vbNullString)    'recherche du handle de la fenêtre de login
    hWNDlogon = 0
    If locked = False Then
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1502)
    Else
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1953)
    End If
    While hWNDlogon <> 0

    If locked = False Then
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1502)
    Else
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1953)
    End If
        If isLoginError() = True Then
        error = True
        GoTo apr:
        End If
        xWait 100
        DoEvents
    Wend
apr:
    If error = False Then
        Loginner = True
    Else
debutfaux:
    hWNDgina = FindWindow("#32770", vbNullString)
         hWNDok = GetDlgItem(ByVal hWNDgina, 2)
         ret3 = SendMessage(ByVal hWNDok, BM_CLICK, 0, 0)    'on valide le toute
         DoEvents
         If isLoginError = True Then GoTo debutfaux:
        Loginner = False
    End If
End Function
'********************************************************************************************
' Name     : xWait
' Purpose  : Wait for the time requested without
'        stopping the execution of other functionsfuck
' Syntax   : xWait(MilsecToWait)
' Parameters : MilsecToWait : Time to wait in millisecond
' Return   : /
'********************************************************************************************
Public Sub xWait(ByVal MilsecToWait As Long)
    Dim lngEndingTime As Long

    lngEndingTime = GetTickCount() + (MilsecToWait)
    Do While GetTickCount() < lngEndingTime
        DoEvents
    Loop
End Sub

Private Function isLoginError() As Boolean
    Dim hWNDgina As Long
    Dim ret As String
    hWNDgina = FindWindow("#32770", vbNullString)    'recherche du handle de la fenêtre de login
    ret = GetDlgItem(hWNDgina, CLng("65535"))
    If ret <> "0" Then
    isLoginError = True
    Else
    isLoginError = False
    End If
End Function

Conclusion :


Je mettrai une mise à jour ce soir en ajoutant un utilitaire permettant d'installer le programme à l'exécution.. Promis pour ce soir !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

jon256
Messages postés
43
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
20 décembre 2003
-
ça a l'air très interressant tout ça ... mais au fait la mise à jour tu la faite ou pas ? (bon 21 jours après que tu ai posté le msg on va dire que oui )

Merci pour la source je cherchais un truc du genre. ;-)
Cyberdevil
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006
-
je susi vraiment désolé mais j'ai pas encore fait la mise à jour je suis vraiment débordé mais je la met demain !
A+
jon256
Messages postés
43
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
20 décembre 2003
-
je l'attends avec impatience !
Mast3rbug
Messages postés
3
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
25 janvier 2004
-
Est-ce que ca fonctionne pour vrai? PArce que j'essaie avec win2000 et ca ne fonctionne pas. Le handle de la boite de dialogue n'est pas trouvé. Si quelqu'un l'a fait fonctionner, j'aimerais bien le savoir, et sur quel systeme d'exploitation.

Parce que ce que j'ai entendu a date sur l'authentifiaction windows, c'est qu'elle ne peut etre géré par aucun messages standatds de la boucle de messages...
Cyberdevil
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006
-
Le truc c'est que j'ai pas testé sous windows 2000 les Handle sont ptetre différent...
Je viens de mettre à jour... Pour tester il suffit de lancer le programme Install Loginer.exe et de lcique sur INstall Gina...
Ensuite tout sijnhstall (très rapide)...
plus qua redémarrer...
magie le programme se lance en meme temps que la boite de login et ovus pouvez entrez votre mot de passe et logn dans le progz.. et il les enverra a la boite de login !

Bon test et redite moi si ça marche po !

A+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.