Stato del tasto INS

di il
17 risposte

Stato del tasto INS

Stò scrivendo la mia prima app console doce, è noto, bisogna scrivere del codice per ogni occorrenza.

Ora,mi trovo a dover gestire l'inserimento o la sovrascrittura di una parte di una stringa ed ho la necessità di acquisire quindi  di conoscere lo stato del tasto INS (false per la sovrascrittura, true per l'inserimento).

Ho cercato anche su Copilot una soluzione ,ma nessuna di quelle proposte è corrispondente alle mie necessita.

Questo codice ,ad esempio, 

    <DllImport("user32.dll", SetLastError:=True)>
    Public Function GetKeyState(ByVal nVirtKey As Integer) As Short
    End Function

    Const VK_INSERT As Integer = &H2D

dopo aver cliccato sul tasto INS alterna lo stato tra vero e falso ,ma all'avvio dell'app mi restituisce false, anche se sulla tastiera mi risulta true.

Qualche suggerimento? Grazie anticipatamente. 

17 Risposte

  • Re: Stato del tasto INS

    Soluzioni possibili:

    1. All'avvio setta a true di default
    2. Lancia la funzione all'avvio e setta il valore giusto.
  • Re: Stato del tasto INS

    Prova con il valore restituito da

    Control.IsKeyLocked(Keys.Insert)
  • Re: Stato del tasto INS

    16/11/2024 - oregon ha scritto:


    Prova con il valore restituito da

    Control.IsKeyLocked(Keys.Insert)

    Non so come usarlo (non mi riconosce il comando) , ma se ho ben capito da google si può utilizzare solo con block num, scroll e caps.

    Grazie ,Oregon.

    16/11/2024 - sihsandrea ha scritto:


    Soluzioni possibili:

    1. All'avvio setta a true di default
    2. Lancia la funzione all'avvio e setta il valore giusto.

    SihAndrea, sono ore che ci sto provando ma senza risultati. Lo stato reale del tasto non viene acquisito (o forse sono io incapace!).Grazie.Continuerò a provarci. 

  • Re: Stato del tasto INS

    16/11/2024 - Jan ha scritto:


    Non so come usarlo (non mi riconosce il comando) , ma se ho ben capito da google si può utilizzare solo con block num, scroll e caps.

    Dato che usi un progetto Console, devi esplicitamente aggiungere il riferimento a System.Windows.Forms visto che Control lo richiede.

    Quindi aggiungi la linea

    Imports System.Windows.Forms

    all'inizio del codice e aggiungi un riferimento a System.Windows.Forms da

    Progetto … Aggiungi riferimento

    Poi potrai scrivere

    Console.WriteLine(Control.IsKeyLocked(Keys.Insert))

    Anche se la documentazione parla solo di quei tre tasti, anche il tasto INS viene monitorato. L'unica cosa è che questo avviene solo all'interno del programma, mentre lo stato iniziale è sempre uguale.

    Vedi se ti può servire

  • Re: Stato del tasto INS

    Oregon, Imports system.windows.forms lo avevo già inserito e non capisco quindi quale riferimento devo aggiungere al progetto.

    Mi dai qualche informazione in più in modo che possa testare il tuo codice? Grazie.

  • Re: Stato del tasto INS

    Hai usato il menu

    Progetto … Aggiungi riferimento

    come ti ho detto?

  • Re: Stato del tasto INS

    16/11/2024 - oregon ha scritto:


    Hai usato il menu

    Progetto … Aggiungi riferimento

    come ti ho detto?

    Scusa, avevo capito perfettamente quello che mi avevi scritto, ma avendo ricevuto questo messaggio di errore, ho pensato che avrei dovuto aggiungere una diversa libreria.

  • Re: Stato del tasto INS

    Ho aggiunto il riferimento all'assembly e ho quindi aggiuntoi il rtiferimento.

    Ora provo. Grazie, Oregon.

  • Re: Stato del tasto INS

    Ricevo questo errore.

    Però ,dal momento che ho risolto (così mi sembra(!!)) -anche se devo fare ancora qualche aggiustamento, non voglio che tu perda altro tempo con il mio problema. Grazie,Oregon. Sei sempre presente e propositivo,

  • Re: Stato del tasto INS

    Se hai risolto dovresti dire come.

    Per la questione del riferimento, dovevi dire prima di quell'errore. Come hai aggiunto il riferimento? Per caso hai usato un riferimento COM? Sarebbe sbagliato, devi scegliere tra gli Assembly 

  • Re: Stato del tasto INS

    16/11/2024 - Jan ha scritto:


    dopo aver cliccato sul tasto INS alterna lo stato tra vero e falso ,

    Se questa affermazione è vera, invia un paio di sendkey simulando la pressione del tasto ins e alla fine hai il flag settato correttamente e lo stato ins on / ins off ripristinato.

  • Re: Stato del tasto INS

    17/11/2024 - oregon ha scritto:


    Per la questione del riferimento, dovevi dire prima di quell'errore. Come hai aggiunto il riferimento? Per caso hai usato un riferimento COM? Sarebbe sbagliato, devi scegliere tra gli Assembly 

    E sì Oregon, proprio così! Come i fatti dimostrano, non sono che un novellino (di 78 anni, ma sempre novellino in informatica!).

  • Re: Stato del tasto INS

    17/11/2024 - sihsandrea ha scritto:


    Se questa affermazione è vera, invia un paio di sendkey simulando la pressione del tasto ins e alla fine hai il flag settato correttamente e lo stato ins on / ins off ripristinato

    Siccome console non supporta sendkey, ha scaricato WindowsInput, che ha le stesse funzioni, ma il problema non cambia, giacchè ho bisogno di sapere in ogni momento ed in qualsiasi circostanza se il tasto è in on o off. 

    Purtroppo, console non dispone di eventi.

    La soluzione che al momento ho trovato è di gestire il tasto INS solo in fase di immissione e modifica dei dati per poter mostrare a monitor lo stato del tasto, come ho fatto per blockNum.

    Sembra che funzioni, ma devo scrivere ancora il codice per la modifica dei dati.

    Grazie,sihandrea.Grazie mille.

  • Re: Stato del tasto INS

    17/11/2024 - Jan ha scritto:


    E sì Oregon, proprio così!

    Dato che a me interessa che si arrivi a conclusione, vorrei capire se hai corretto e se adesso il codice che ti ho proposto compila.

    Ho impiegato un minimo di tempo per farlo, tuttavia vorrei sapere se ti è servito.

    Il codice provato è questo

    Imports System.Windows.Forms
    Imports System.Threading
    
    Module Module1
    
        Sub Main()
            Dim x As Integer
    
            For x = 1 To 50
                Console.WriteLine(Control.IsKeyLocked(Keys.Insert) & " ")
                Thread.Sleep(500)
            Next
        End Sub
    
    End Module

    e il riferimento aggiunto, per evitare incomprensioni, è questo

Devi accedere o registrarti per scrivere nel forum
17 risposte