PDA

Vollständige Version anzeigen : SendKeys Numlock


tomili
14.02.2001, 07:50
Hallo, ich habe in Access 95 folgendes Problem:
Ich möchte die Numlock-Taste deaktivieren und wieder aktivieren.
Ich habe versucht dies über ein Makro bzw. über die Funktion Sendkeys "{numlock}" zu lösen.
Wenn ich noch im Makro bin und dieses ausführe schreibt mit Access, da wo der Cursor steht, einen "\" !?
Deaktivieren der Numlock-Taste funktioniert meist, nur das wieder aktivieren nicht mehr.
Die Sache wird noch erschwert, da das Ganze ab und zu doch funktioniert - warum weis ich nicht.
Ich habe auch bemerkt, daß die Anzeige in der Statusleiste von Access nicht immer mit der auf der Tastatur übereinstimmt. Z.B. erscheint in der Statusleiste ein "NF" die Numlockanzeige an der Tastatur ist aber ausgeschaltet.

Kann mir da wer weiterhelfen?

Mike
14.02.2001, 09:44
Hallo tomili,
die Funktionen von Lambert Heenan sollten dir weiterhelfen.'--- Posted by Lambert Heenan ---

'Replacement for Sendkeys

' The problem with SendKeys causing NumLock to turn off is well known in the Office/VB environment.
' Here's a custom MySendkeys routine which you can use as a replacement instead.

'Note: Under most circumstances, SendKeys is not recommended in a production environment.
'This is because the keystrokes are processed by whichever window is currently active on the desktop.
'Obviously this will cause unpredictable behavior (to say the least) in case another app receives the focus
'while your code is processing the Sendkeys statement.
'If you're unlucky, the keystrokes when sent to application "y" may cause all documents to be deleted
'or the hard drive to be formatted. So, simply put, try to avoid Sendkeys at all cost.

'******** Code Start ***********
' Declare Type for API call:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage
End Type

' API declarations:
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 GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long

' Constant declarations:
Const VK_NUMLOCK = &H90
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

Function IsNumLockOn() As Boolean
Dim o As OSVERSIONINFO

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
IsNumLockOn = keys(VK_NUMLOCK)
End Function

Sub ToggleNumLock()
Dim o As OSVERSIONINFO

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '=====Win95
keys(VK_NUMLOCK) = Abs(Not keys(VK_NUMLOCK))
SetKeyboardState keys(0)
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '=====WinNT
'Simulate Key Press
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'Simulate Key Release
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If
End SubMike