AW: NUMLOCK-Taste dauerhaft aktivieren
01.05.2011 21:01:32
Hajo_Zi
Halo Franz,
dann nächstes Beispiel, das geht unter Windows 7
Option Explicit
Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
Private Declare Function GetKeyState Lib "user32" _
(ByVal nVirtKey As Long) As Integer
Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" (lpVersionInformation As _
OSVERSIONINFO) 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)
Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
' Numlock
Private Const VK_NUM = &H90
Private keys(0 To 255) As Byte
' Großbuchstaben
Private Const VK_CAPS = &H14
' Rollen
Private Const VK_SCROLL = &H91
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 oSv As OSVERSIONINFO
Private Function KeyStatus(NumKey) As Boolean
Dim bInsertKeyState As Boolean
oSv.dwOSVersionInfoSize = Len(oSv)
GetVersionEx oSv
GetKeyboardState keys(0)
KeyStatus = keys(NumKey)
End Function
Private Sub Switch(NumKey, OnOff As Boolean)
If (KeyStatus(NumKey) OnOff) Then
If (oSv.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) Then
keys(NumKey) = 1
SetKeyboardState keys(0)
ElseIf (oSv.dwPlatformId = VER_PLATFORM_WIN32_NT) Then
keybd_event NumKey, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event NumKey, &H45, KEYEVENTF_EXTENDEDKEY Or _
KEYEVENTF_KEYUP, 0
End If
End If
End Sub
Private Sub KeyOn()
' Numlock
Switch VK_NUM, 1
' Großbuchstabe
'Switch VK_CAPS, 1
' Rollen
'Switch VK_SCROLL, 1
End Sub
Private Sub KeyOff()
' NumLock
Switch VK_NUM, 0
' GroßBuchstabe
'Switch VK_CAPS, 0
' Rollen
'Switch VK_SCROLL, 0
End Sub
Public Sub NumStatus()
' NumLock
If KeyStatus(VK_NUM) = False Then
' GroßBuchstabe
'If KeyStatus(VK_CAPS) = False Then
' Rollen
'If KeyStatus(VK_SCROLL) = False Then
Call KeyOn
End If
End Sub
' Will
' http://clever-forum.de/ _
read.php?11,237481,237501#msg-237501
Gruß Hajo