Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - CapsLock - Disattivazione via codice a fine programma
Forum - Visual Basic 6 - CapsLock - Disattivazione via codice a fine programma

Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 10:17
Giovedì, 23/04/2009
Buongiorno a tutti, sono alle prime armi con il VB6 e vi sarei grato per un un aiuto.

In un programma che sto preparando ho necessità di attivare via codice il tasto CapsLock e, sempre via codice, disattivarlo alla chiusura del programma.
Finora utilizzando un esempio trovato sul testo "I trucchi di VB"  sono riuscito ad attivare il CapsLock all'avvio del programma.
Però non riesco a capire come fare a disattivarlo. Ho provato inserendo in Form Unload
istruzioni analoghe ma il risultato è sempre negativo.

Grazie a chiunque possa aiutarmi.
Riporto sotto il codice allegato e funzionante per la sola attivazione.

In "Generale":
________________________________________________________________
Sub SetCapsLockKey(ByVal newState As Boolean)
Const KEYEVENTF_KEYUP = &H20 ' e non &H2 come da pag. 176/177 trucchi vb
If CBool(GetKeyState(vbKeyCapital)) <> newState Then
keybd_event vbKeyCapital, 0, 0, 0
keybd_event vbKeyCapital, 0, KEYEVENTF_KEYUP, 0
End If
End Sub
--------------------------------------------------------------------------
Private Sub Form_Load()
' istruzione per premere e rilasciare via codice il CapsLock
SetCapsLockKey (vbKeyCapital)
' e se era spento correggere la casella di testo relativa
If txtCapsLock <> "Acceso" Then txtCapsLock = "Acceso"
End Sub
_________________________________________________________________
E in un "modulo bas":

' API per conoscere lo stato dei tasti Lock
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
' API per attivare lo stato del tasto Capslock
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
     ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
_________________________________________________________________
Ancora grazie.

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:29
Giovedì, 23/04/2009
Ma perche' attivare il CapsLock?

Devi accettare input solo in maiuscolo? Allora trasforma le stringhe dopo (o durante) l'input stesso a prescindere dal Caps Lock ...

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 11:56
Giovedì, 23/04/2009
concordo, così almeno hai anche più sicurezza per l'input dato che nulla impedisce all'utente di disattivare il capslock magari a metà di un inserimento....sempre che sia per questo motivo che ti serve :rotfl:

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 16:13
Giovedì, 23/04/2009
Se ti serve solo per il testo allora convertilo direttamente usando la funzione ucase() ...

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:25
Giovedì, 23/04/2009
Elimina la riga

Text1(Index) = UCase(Mid$(Chr$(KeyAscii), 2, 1))  

e mettici

KeyAscii = Asc(UCase(Chr$(KeyAscii)))

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 7:54
Venerdì, 24/04/2009
OK Perfetto - Ho sostituito la mia istruzione con quella suggerita da TheProgrammer e funziona benissimo.
Comunque, visto che ho impiegato una settimana ad aggirare l'ostacolo per attivare
il CapsLock via codice, c'è il sistema per disattivarlo considerato che lo stesso
problema potrebbe presentarsi, ad es., per NumLock ?
Ancora grazie.

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 10:33
Venerdì, 24/04/2009
Anche per il NumLock non serve ...

PM Quote