|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
- 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
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 !
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
|