Newsgroup: it.comp.appl.access
Titolo: SendKeys CAPSLOCK

Perche' non riesco a farlo funzionare?
Nella maschera che mi fa da pannello di controllo su FormOpen ho messo
l'istruzione
    SendKeys "{CAPSLOCK}"
ma a parte un leggero colpo del led della tastiera che poi rimane spento e
alla comparsa della scritta MA sulla barra di stato non ottengo le maiuscole
sempre attivate.
Ho provato anche con true e false come wait ma non ottengo nulla di piu'.
Grazie a tutti
bg

Non e' cosi' semplice.
Se mastichi un po' di VB guarda qui:
http://www.mvps.org/vbnet/code/system/capslock.htm
Contiene l'articolo:
Activating CapsLock and NumLock on Win9x
Da VB funziona, e credo che con poco piu' di un paio di copia-incolla vada anche in access.
Se ce la fai io te lo consiglio
Se invece vuoi la soluzione gia' pronta, io provai il codice che segue.
E' un po' lungo ma gestisce anche il NumLock e dovrebbe andare anche con Windows NT.
Ha il piccolo inconveniente che, a volte per disabilitare manualmente un CAPSLOCK impostato mediante questo codice, devi spingere
il tasto 2 volte.
Per questo l'abbandonai. Ma se a te va bene..
Sostituisci la Sendkeys CAPSLOCK con
   If Not IsCapsLockOn() Then ToggleCapsLock
Poi incolla questo codice in un modulo VB (meglio uno nuovo per chiarezza)
Option Compare Database
Option Explicit
      ' 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 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 IsScrollLock()
        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        IsScrollLock = 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
    bNumLockState = IsNumLockOn()
    SendKeys sKeys, bWait
    If IsNumLockOn() <> bNumLockState Then
        ToggleNumLock
    End If
End Sub
-- 
Posted from [212.210.92.253] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:x4fR5.78419$BF.27...@news.infostrada.it...


 ......
Grazie, provero'  sia il sito che il listato.
Ahh... le Api...
bg