Autore Topic: Tasto Caps Lock attivo  (Letto 610 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Tasto Caps Lock attivo
« il: 09 Luglio 2018, 12:06:23 »
Buongiorno a tutti,
avendo la necessità in un mio programma di verificare se attivo il tasto Caps Lock (Maiuscole)
ho fatto una ricerca su Google non avendo trovato niente sul nostro Forum, mi sono imbattuto
su un post della Mailing ufficiale dove un utente faceva riferimento ad un vecchio programma di
un utente di questo Forum (Fsurfing) che aveva utilizzato questo codice
Codice: [Seleziona]
PUBLIC SUB Main()
  DIM sShellOutput AS String
  DIM iKeyLocks AS Integer
 
  SHELL "xset q | grep 'LED mask:'" TO sShellOutput
 
  sShellOutput = Replace(sShellOutput, " ", "")
 
  iKeyLocks = Val(Split(sShellOutput, ":")[3])
 
  SELECT iKeyLocks
    CASE 1
      PRINT "Caps Lock is ON"
    CASE 2
      PRINT "Num Lock is ON"
    CASE 3
      PRINT "Caps Lock is ON"
      PRINT "Num Lock is ON"
   END SELECT       
 END
La mia domanda è: si deve ricorrere obbligatoriamente alla Shell per verificarne lo stato?
Non ho trovato altre soluzioni
« Ultima modifica: 09 Luglio 2018, 12:07:53 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tasto Caps Lock attivo
« Risposta #1 il: 09 Luglio 2018, 13:19:10 »
Non so se questo può servirti:

Codice: [Seleziona]
Private $bMaiusc As Boolean

Public Sub Form_KeyRelease()

  If Key.Code = Key.CapsLock Then
    $bMaiusc = Not $bMaiusc
  Endif
 
  Print $bMaiusc

End

 :ciao: :ciao:

Avevo fatto un errore, scusa  :-[
« Ultima modifica: 09 Luglio 2018, 13:38:18 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Tasto Caps Lock attivo
« Risposta #2 il: 09 Luglio 2018, 18:12:36 »
La mia domanda è: si deve ricorrere obbligatoriamente alla Shell per verificarne lo stato?
Vi è anche la soluzione delle funzioni esterne del sistema SDL:

http://www.gambas-it.org/wiki/index.php?title=Sapere_via_codice_se_il_tasto_%27Blocco_Maiuscole%27_%C3%A8_attivo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Tasto Caps Lock attivo
« Risposta #3 il: 10 Luglio 2018, 20:02:57 »
La mia esigenza è verificare se all'avvio del programma il tasto maiuscole è attivo.

Grazie comunque per i suggerimenti, si apprende sempre qualcosa di interessante.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tasto Caps Lock attivo
« Risposta #4 il: 10 Luglio 2018, 22:55:54 »
La mia esigenza è verificare se all'avvio del programma il tasto maiuscole è attivo.

Grazie comunque per i suggerimenti, si apprende sempre qualcosa di interessante.

Questo potrebbe andare bene?:
Alcune precisazioni occorre attivare il componente gb.desktop dare alla TextBox 1 px di altezza e 1 di larghezza e aumentare i tempi della sospensione ad almeno 0.5.
Codice: [Seleziona]
Public Sub Form_Open()

  Dim s As String

  With TextBox1
    .Border = False
    .Background = Color.Transparent
    .Foreground = Color.Transparent
  End With
  Me.Show
  Wait 0.5
  Desktop.SendKeys("[a]")
  Wait 0.5
  s = TextBox1.Text
  Print s
  If s = "A" Then Message.Warning("ATTENZIONE: Il blocco maiuscole è attivo")
  TextBox1.Delete

End

 :ciao: :ciao:

Così è meglio
« Ultima modifica: 08 Aprile 2019, 00:18:50 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro