Rilevare la pressione di un tasto

venerdì 18 agosto 2006 - 12.39

forno Profilo | Junior Member

Ciao a tutti, sono di nuovo in difficoltà.
Ho creato un'applicazione con un form che, quando viene ridotto a icona, si trasferisce sulla System Tray dove appare una NotifyIcon.
Vorrei sapere come posso fare per rilevare la pressione di un tasto quando il form non è visibile ed appare solo l'icona vicina all'orologio.
Grazie
Enrico Fornasier

alextyx Profilo | Expert

Se capisco bene, il tuo form è una semplice icona e il focus può essere su qualunque altra finestra attiva, quindi non hai modo di rilevare la pressione di un tasto mediante gli eventi del form, ma piuttosto devi rivolgerti a funzioni di sistema. In particolare devi usare una API che intercetti la tastiera e la notifichi alla tua applicazione. La questione dell'intercettazione dei tasti è un argomento controverso, anche per le possibili applicazioni 'malevole' che possono nascere dall'uso di una funzione di 'keylogging' e pertanto non si trovano facilmente notizie sull'argomento. In bocca al lupo!

forno Profilo | Junior Member

Ho risolto con:
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Short
Ora devo solo capire il valore numerio del tasto stamp ed è fatta! Grazie mille per l'aiuto!

alextyx Profilo | Expert

Grazie per i ringraziamenti!
Ho dato un'occhiata a ciò che hai scovato. Per curiosità, devi effettuare un test in polling, con un timer, oppure con quella API riesci a far scatenare un evento che intercetti (così a occhio mi sembra la prima ipotesi)?

forno Profilo | Junior Member

Io l'ho messo sotto un timer, credo sia il sistema migliore, poi gli altri metodi non li conosco.
Inoltre ho scoperto un'altra piccola cosa:
sostituendo

ByVal vKey As Long

con

ByVal vKey as Key

è molto più facile da usare perché VB riconosce la vKey come un tasto e non come un numero e ti aiuta mostrandoti l'elenco dei tasti di una tastiera

alextyx Profilo | Expert

Ok...in bocca al lupo e buon lavoro, allora!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5