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

    [API] Catturare e riconoscere input da tastiera!

    Salve a tutti, è il mio primo post in questo forum e voglio approfittarne per chiedere informazioni a qualcuno che ne sappia più di me sulle api…

    Quello che devo fare è molto semplice: catturare e riconoscere un input da tastiera (penso si chiami hooking sta cosa… :master: )

    Non mi interessa catturare un input con gli eventi della windows form oppure con il DirectInput delle SDK: la prima soluzione è troppo limitata alla form mentre la seconda la ritengo esagerata e non mi va di scomodare le dx visto quello che devo fare.

    A questo punto sono andato a cercare nelle api:
    Inizialmente ho trovato GetKeyboardState e GetKeyState, i due però consentono solo di fare un controllo sulla pressione di un tasto specifico (da quello che ho capito... magari mi sbaglio ), mentre a me serve qualcosa che mi restituisca la situazione globale della tastiera così che io possa ricavare gli input (per farla breve qualcosa che mi restituisca ad esempio il codice del tasto o della combinazione di tasti premuti).

    Ho provato anche GetKeyboardLayout, ma mi dava problemi con l’id del thread e restituiva sempre 0…

    A questo punto vi chiedo se qualcuno sa far funzionare GetKeyboardLayout o comunque ha qualche soluzione alternativa da propormi…

    (Se qualcuno ha presente le SDK mi serve qualcosa di simile al metodo GetCurrentKeyboardState che permette di beccare un generico input da tastiera e poterlo scindere nei singoli tasti o/e combinazione di tasti)

    Grazie in anticipo per eventuali aiuti

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Se usi Windows con almeno una finestra c'è il messaggio WM_INPUT che ti può interessare.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se vuoi "catturare" l'input da tastiera a livello globale di sistema, allora puoi usare SetWindowsHookEx, in particolare vedi gli hook WH_KEYBOARD e WH_KEYBOARD_LL.

    Se l'hook WH_KEYBOARD è impostato globale, allora la procedure deve essere implementata tassativamente in una libreria dinamica (DLL). Mentre per WH_KEYBOARD_LL la procedure può essere implementata anche all'interno di un normale eseguibile, perché viene fatto un context-switch automatico per inviare la notifica. Purché il thread che ha registrato l'hook abbia un proprio "loop dei messaggi".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se devi implementare un hooking globale di sistema (per la tastiera) sappi che le regole da seguire per la scrittura di un codice simile sono molto "precise" e "strette".

    Un qualsiasi errore (anche piccolo) porta sicuramente al blocco del sistema.

    Quindi ti consiglio di adottarlo solo DOPO avere studiato molto bene tutto quello che sta dietro l' hooking dal punto di vista teorico e solo dopo avere preso molta confidenza con API, strutture e costanti coinvolte.

    A questo punto la domanda e' d'obbligo ... perche' mai ti dovrebbe servire un hook globale di tastiera? Per quale tipo di programma (o di necessita') dovresti implementare l' hook (che, tra l'altro, e' una "metodologia" pesante per il sistema, da non usarsi sempre e comunque ...) ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie per le risposte, appena ho 2 minuti provo le soluzioni che mi avete proposto e vi dico...


    Rispondendo a oregon:

    Di recente ho trovato un programmino traduttore che ha la pecularità di aprirsi da solo quando si clicca con lo scroll su una parola da tradurre (in realtà non si "apre" perchè il processo sotto rimane).
    Il meccanismo di questo programmino mi ha ispirato e volevo provare a imitarlo facendone uno simile con la tastiera... una sorta di "scorciatoie" attivabili magari con i tasti F1,F2 ecc...

    Come scritto nel post non posso usare gli eventi della form... una volta che la form perde il focus ovviamente perde la capacità di catturare input... Non voglio neanche usare le sdk per fare un programma che fondalmentalmente è stupido (poi credo abbiamo le stesse limitazioni della form, non ho mai provato ).

    L'unica che mi è venuta in mente sono state le api... spulciando in giro ho sentito di questi "meccanismi di hooking"... ma fondalmentalmente non ne so praticamente nulla, speravo fosse una cosa abbastanza semplice del tipo: importo dll, uso funzione e tanti saluti ...
    Sono sulla strada giusta?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Parli di form ... ma di quale linguaggio/strumento di programmazione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    scusa se stato poco chiaro, era la prima cosa che dovevo dire , non sono abituato ai forum ...

    In ogni caso .NET in generale, prediligo molto C# ma capisco anche VB più o meno...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Concordo con MItaly ... non ti serve un hook globale di tastiera ma la semplice registrazione di qualche hot key.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Non sapevo dell'esistenza di una api già pronta ... non c'è gusto a programmare così però ...

    Grazie a tutti, con questa dovrei risolvere tutti i problemi ;-)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.