PDA

Vollständige Version anzeigen : Großschreibtaste bei Paßwort ausschalten


schlarb
06.10.2000, 10:18
Hallo,
Habe ein Paßwortformular, über dieses melden sich die Benutzer an. Nun ist es aber dunn, wenn die Großschreibtaste an ist, und das Kennwort numerisch ist, kommt logischerweise
falsches Paßwort.
Frage:
Wie kann ich beim öffnen des Paßwortsformulars diese Taste ausschalten und nachher wieder einschalten.
Besten Dank im vorraus.
Michael

Manuela Kulpa
06.10.2000, 12:23
Hallo Michael!

Ist nicht ganz einfach ;). Ich hoffe du verstehst was von VBA und API. Anbei der Code um die CapsLock-Taste umzuschalten:

Option Explicit

Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type

Private kbArray As KeyboardBytes

Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1
Private Const VK_SCROLL As Long = &H91
Private Const VK_CAPITAL As Long = &H14
Private Const VER_PLATFORM_WIN32_NT As Long = 2

Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Function CapsLock() As Boolean
'// ==========================================================================
'// Funktion ermittelt den Status der CapsLock-Taste und gibt
'// True (eingeschaltet) oder False (ausgeschaltet) wieder.
'// ==========================================================================
CapsLock = GetKeyState(VK_CAPITAL) And 1 = 1

End Function

Function SetCapsLock(bState As Boolean) As Boolean
'// ==========================================================================
'// Funktion setzt den Status der CapsLock-Taste anhand des über-
'// gebenen Statuswertes bState=True (eingeschaltet) oder
'// bState=False (ausgeschaltet). Bei Erfolg gibt Funktion True
'// bzw. False zurück.
'// ==========================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ==========================================================================
If Not IsWinNT Then
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = 1
SetKeyboardState kbArray
If bState = True Then
SetCapsLock = IIf(CapsLock() = 1, True, False)
Else 'If bState = False
SetCapsLock = IIf(CapsLock() = 0, True, False)
End If
Else
'// ======================================================================
'// Simmulation des Tastendrucks nur wenn notwendig!
'// ======================================================================
SetCapsLock = True 'da ohne Prüfung
If bState = CapsLock Then Exit Function
ToggleCapsLock
End If

End Function

Sub ToggleCapsLock()
'// ==========================================================================
'// Funktion schaltet den Status der CapsLock-Taste ein- bzw. aus.
'// ==========================================================================
'// Achtung: Funktioniert nur korrekt unter Windows 9x/ME!
'// Unter WinNT wird der Status gesetzt aber die Kontroll-Lampe
'// nicht ein-/ausgeschaltet!
'// ==========================================================================
If Not IsWinNT Then
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1)
SetKeyboardState kbArray
Else
'// ======================================================================
'// Simmulation: Taste wird gedrückt
'// ======================================================================
Call keybd_event(vbKeyCapital, _
MapVirtualKey(vbKeyCapital, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0)
'// ======================================================================
'// Simmulation: Taste wird freigegeben
'// ======================================================================
Call keybd_event(vbKeyCapital, MapVirtualKey(vbKeyCapital, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End If

End Sub

Property Get IsWinNT() As Boolean

Dim uOSVer As OSVERSIONINFO
uOSVer.dwOSVersionInfoSize = Len(uOSVer)
GetVersionEx uOSVer
IsWinNT = (uOSVer.dwPlatformId = VER_PLATFORM_WIN32_NT)

End Property

Falls du Probleme mit der Umsetzung hast, melde dich!

slg
Manuela