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

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

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.