Skip to main content

AccessTr.neT


Access Formda Numlock Sorunu

Access Formda Numlock Sorunu

#6
Ofisin bazı sürümlerinde Sendkeys kodu numlock, scrolllock veya capsyocku kapatıp açabiliyor.

Bunu önlemek için sendkeys kodunu kullanmamalısın. Yerine sendkeys harici komut kodları kullanabilirsin. mesela Sendkeys {f5} kodu yerine

me.requery


Veya bilinen farklı bir sendkeys benzeri api var. Bu kodu da kullanabilirsin. Numlock, capslock veya scrollock kapatmaz.


 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 VK_SCROLL = &H91
     Const VK_CAPITAL = &H14
     Const KEYEVENTF_EXTENDEDKEY = &H1
     Const KEYEVENTF_KEYUP = &H2
     Const VER_PLATFORM_WIN32_NT = 2
     Const VER_PLATFORM_WIN32_WINDOWS = 1

Function IsCapsLockOn() As Boolean
       Dim o As OSVERSIONINFO

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

Sub ToggleCapsLock()
       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
       'Toggle capslock
           keys(VK_CAPITAL) = Abs(Not keys(VK_CAPITAL))
           SetKeyboardState keys(0)
       ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
         'Simulate Key Press>
           keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
         'Simulate Key Release
           keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
              Or KEYEVENTF_KEYUP, 0
       End If
End Sub

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 Sub

Function IsScrollLockOn()
       Dim o As OSVERSIONINFO
       
       o.dwOSVersionInfoSize = Len(o)
       GetVersionEx o
       Dim keys(0 To 255) As Byte
       GetKeyboardState keys(0)
       IsScrollLockOn = keys(VK_SCROLL)
End Function

Sub ToggleScrollLock()
       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_SCROLL) = Abs(Not keys(VK_SCROLL))
           SetKeyboardState keys(0)
       ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
           'Simulate Key Press
           keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
           'Simulate Key Release
           keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
       End If
End Sub

Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)
Dim bNumLockState As Boolean
Dim bCapsLockState As Boolean
Dim bScrollLockState As Boolean
   bNumLockState = IsNumLockOn()
   bCapsLockState = IsCapsLockOn()
   bScrollLockState = IsScrollLockOn()
   SendKeys sKeys, bWait
   If IsNumLockOn() <> bNumLockState Then
       ToggleNumLock
   End If
   If IsCapsLockOn() <> bCapsLockState Then
       ToggleCapsLock
   End If
   If IsScrollLockOn() <> bScrollLockState Then
       ToggleScrollLock
   End If
End Sub

Function fSendKeys(sKeys As String, Optional bWait As Boolean = False)
' Function to make it callable from macros
   mySendKeys sKeys, bWait
End Function
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da

Bu Konudaki Yorumlar
Access Formda Numlock Sorunu - Yazar: cagatay1234 - 27/05/2017, 13:28
Cvp: Access Formda Numlock Sorunu - Yazar: atoz112 - 28/05/2017, 15:22
Cvp: Access Formda Numlock Sorunu - Yazar: cagatay1234 - 29/05/2017, 13:36
Cvp: Access Formda Numlock Sorunu - Yazar: atoz112 - 29/05/2017, 14:01
Cvp: Access Formda Numlock Sorunu - Yazar: cagatay1234 - 29/05/2017, 18:31
Cvp: Access Formda Numlock Sorunu - Yazar: ozanakkaya - 30/05/2017, 00:16
Cvp: Access Formda Numlock Sorunu - Yazar: cagatay1234 - 30/05/2017, 10:28
Task