Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB2010 Windows Form] riconoscere tasto premuto

    Ciao a tutti!

    vorrei poter riconoscere nell'evento keydown della form la pressione di un tasto del tastierino numerico in maniera univoca, in qualsiasi condizione del bloc num e senza che si confonda con altri tasti; ho pensato di valutare il valore di e.KeyCode, e ho quasi ottenuto quello che mi serve
    codice:
    Select Case e.KeyCode:
    Case Keys.NumPad0:
    'hai premuto 0 con bloc num attivo
    
    Case Keys.Insert:
    'hai premuto 0 con bloc num disattivato
    
    End Select
    Il problema è che Keys.Insert mi si può confondere con il tasto "Ins" che vorrei destinare ad un'altra operazione.

    Spero che possiate darmi qualche suggerimento
    Grazie in anticipo

  2. #2
    Ciao di nuovo!

    ho pensato di verificare ciclicamente lo stato del blocnum e qualora fosse disattivato, lo riattivo; che ne pensate? così funziona, ma se avete qualche idea migliore sono tutt'orecchi

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Ciao, grazie al tuo post mi è venuto in mente di inserire questa funzione nel mio programma. Su msdn http://msdn.microsoft.com/it-it/library/ms127850.aspx ho trovato il codice:
    codice:
    If My.Computer.Keyboard.NumLock Then
        MsgBox("NUM LOCK on")
    Else
        MsgBox("NUM LOCK off")
    End If
    e smanettando un pò ho scritto questo:
    codice:
    Private Sub textBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    
            Select Case e.KeyData
    
                Case Keys.D0 To Keys.D9 And My.Computer.Keyboard.NumLock = False
                    Console.WriteLine("tasti normali e tastierino spento")
    
                Case Keys.D0 To Keys.D9 And My.Computer.Keyboard.NumLock = True
                    Console.WriteLine("tasti normali e tastierino acceso")
    
                Case Keys.NumPad0 To Keys.NumPad9 And My.Computer.Keyboard.NumLock = False
                    Console.WriteLine("tasti tastierino e tastierino spento")
    
                Case Keys.NumPad0 To Keys.NumPad9 And My.Computer.Keyboard.NumLock = True
                    Console.WriteLine("tasti tastierino e tastierino acceso")
    
            End Select
    
        End Sub
    Purtroppo con il portatile non posso provare tutti i Case ma sembra che vada bene...dei tasti rimane fuori la "virgola/DEL" ma non credo sia un gran problema.
    Volevo chiederti come fai ad attivare/disattivare il NumLock compreso il LED.
    Grazie

    Vincenzo

  4. #4
    Ciao Vincenzo,

    girando e rigirando su internet ho trovato questa API per la gestione della tastiera

    codice:
    ' dichiarazione costanti per la gestione della tastiera:
     Const VK_NUMLOCK As Integer = &H90
     Const VK_SCROLL As Integer = &H91
     Const VK_CAPITAL As Integer = &H14
     Const KEYEVENTF_EXTENDEDKEY As Integer = &H1
     Const KEYEVENTF_KEYUP As Integer = &H2
     Const VER_PLATFORM_WIN32_NT As Integer = 2
     Const VER_PLATFORM_WIN32_WINDOWS As Integer = 1 '
    
    ' dichiarazione API per la gestione della tastiera:
     Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte, _ ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    poi ho messo nell'evento Tick di un controllo Timer questo codice che verifica lo stato del bloc num e se è spento lo riattiva
    codice:
    Sub CTRLBlockNumTick(ByVal sender As Object, ByVal e As EventArgs)
     If My.Computer.Keyboard.NumLock = False Then
      'simula la pressione del numlock
      keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
    
      'simula il rilascio del numlock
      keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _ Or KEYEVENTF_KEYUP, 0)
     End If
    End Sub
    con l'intervallo impostato a 500 ms, si vede proprio che se provi a spegnere il bloc num, lo riattiva subito

    Buona giornata, buon fine settimana e (ovviamente ) buon Natale a tutti !!!
    Mauro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.