Oppure

Loading
05/06/10 22:58
blasters
Ciao a tutti,
premetto che vorrei usare questo controllo per riuscire a intercettare 2 tasti ( che avvengono in un periodo di tempo limitato) sulla mia tastiera.
Ho provato sia con GetAsyncKeyState ma funzionando con un timer non mi va bene, e ho anche provato con gli hotKey ma mi blocca il programma.

Vorrei che questo tasto oltre a funzionare normalmente devo poter riuscirlo a registrarlo in una richtextbox.

Io ho utilizzato questo codice:
 Public Enum HotKeyModifiers As Integer

        MOD_ALT = &H1

        MOD_CONTROL = &H2

        MOD_SHIFT = &H4

        MOD_WIN = &H8


    End Enum


Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

        MyBase.WndProc(m)

        If (m.Msg = WM_HOTKEY) Then

            Dim hotKeyId As Integer = m.WParam.ToInt32()


             If hotKeyId = 1025 Then
                RichTextBox1.Text = RichTextBox1.Text & "a"
                SendKeys.Send("a")
            End If
End If
    End Sub
End Class

In questo esempio ho inserito solo il tasto "a" da intercettare, perchè una volta capito come fare con il primo l'altro sarà uguale.

ho inserito SendKeys.Send("a";) perchè una volta intercettato vorrei che lo scrivesse (su un mio programma aperto, tipo il blocco note) come se niente fosse successo. Invece se non lo metto il pulsante viene intercettato dal programma ma non scrive sul blocco note.

Fin qui tutto funziona bene sul mio pc, ma appena eseguo il programma su un altro pc tutto si blocca (Sui 2 pc ho Win7) .
Ho letto che è possibile utilizzare un controllo chiamato keybd_event ma prima di iniziarlo a studiare vorrei sapere se qualcuno conosce un rimedio agli hotkey.
Grazie, e spero di essere stato abbastanza chiaro
Ultima modifica effettuata da blasters 06/06/10 17:53
aaa
06/06/10 6:49
Federico_VbNet_Programmer
Questo programma non è conforme alle regole,comunque devi usare getasynckey con un timer da 1 a 10,per maggiori info addami su msn: fede97lr@hotmail.it
aaa
06/06/10 7:37
nessuno
No Federico ... le "maggiori info" le devi dare nel forum non in privato, altrimenti questo tipo di strumento non ha senso ...


P.S. "addami" non si può leggere ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
06/06/10 8:46
Federico_VbNet_Programmer
Io addami lo leggo...
aaa
06/06/10 10:16
blasters
Postato originariamente da Federico_VbNet_Programmer:

Questo programma non è conforme alle regole,comunque devi usare getasynckey con un timer da 1 a 10,per maggiori info addami su msn: fede97lr@hotmail.it

Scusatemi, non lo sapevo se volete eliminate il post.
Comunque ho provato usando getasynckey ma stando in un timer se l'intervallo è troppo basso le 2 lettere le prende più volte, invece se l'aumento salta le lettere.

Ho letto invece che se io utilizzo keybd_event a ogni pressione di un tasto questo controllo cambia il suo valore. Ma non riesco ad usarlo.
aaa
06/06/10 13:33
nessuno
Postato originariamente da Federico_VbNet_Programmer:

Io addami lo leggo...


Avrai fatto le scuole in qualche altro Paese ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
06/06/10 13:40
Il Totem
Non è possibile implementare hotkeys direttamente dal framework, tranne nel caso una funzione sia legata ad un MenuStrip (in questa situazione, ogni elemento del MenuStrip dispone della proprietà ShortcutKey, che può legare una combinazione di tasti all'evento click di tale elemento).

Penso che la tua soluzione - l'uso di RegisterHotKey - sia una buona idea. keybd_event è una funzione di sistema della libreria user32.dll. Ecco una veloce spiegazione:
totem.altervista.org/appunti/…
Sarebbe la versione nativa del wrapper SendKeys.

P.S.: SendKeys dovrebbe funzionare comunque. Prova ad usare il metodo SendWait anziché Send.
aaa
06/06/10 14:15
Federico_VbNet_Programmer
Postato originariamente da nessuno:

Postato originariamente da Federico_VbNet_Programmer:

Io addami lo leggo...


Avrai fatto le scuole in qualche altro Paese ...


Avevo capito che non lo riuscivi a leggere correttamente,comunque in italiano "aggiungimi" XD
aaa