Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1

    [ C/C++ ] come inviare un segnale di tastiera

    salve, ho un problema un po' particolare, non so neppure se fattibile:

    ho necessita' di inviare tramite un programmino in C un segnale da tastiera...mi spiego meglio, sarebbe stupendo se potessi generare la pressione di un determinato tasto dalla tastiera, senza che questo venisse premuto "realmente", tramite un programma C.

    ho citato il linguaggio C perche' penso che, se fattibile, il problema si risolva con istruzioni di medio-basso livello, se nn addirittura in assembler...sono ben accolte comunque anche soluzioni riguardo ad altri linguaggi di programmazione...

    ringrazio anticipatamente chiunque mi voglia aiutare, anche dandomi solo qualche dritta o informazioni !

  2. #2
    Su Windows puoi usare la API SendInput (o keyb_event, ma quest'ultima è deprecata).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Per simulare (in dos con asm) se non erro si chiama il servizio 2 dell'int 16h ...
    Ma visto che Mitaly ti ha consigliato un'api, puoi usare quella senza tanti problemi (con l'asm si richiede il codice di scansione del tasto)
    Experience is what you get when you don’t get what you want

  4. #4
    mm ok, anzitutto utilizzo windows (aime') e l'applicazione e' a riga di comando...

    pultroppo, non ho mai utilizzato le api, e d'altro canto scriverei in asm solo se fosse l'unica strada...anche se cmq mi divertirei...(mi impegnerebbe un po' piu' del dovuto pero'...)

    se mi deste qualche info su come usare il SendInput o qualche link utile ve ne sarei grato!

  5. #5
    Non ho mai lavorato in assembly, ma credo che sotto Windows (specialmente la famiglia NT) non sia possibile "sintetizzare" la pressione di un tasto semplicemente usando interrupt, perché in molti casi Windows parla direttamente con l'hardware, bypassando alcune routine del BIOS. Per usare le API hai bisogno di header e librerie statiche contenuti nel Platform SDK (scaricabile gratuitamente dal sito della Microsoft); esso include anche la documentazione in linea, che puoi consultare per avere informazioni sull'uso della SendInput (tale documentazione è disponibile anche online).
    Tuttavia se non usi API mi chiedo a cosa ti possa servire sintetizzare la pressione di tasti... nel senso, con le API puoi impostare il focus su un'altra finestra e farle credere che l'utente ci stia digitando qualcosa, ma limitandoti alla tua applicazione a cosa può servire tale operazione?
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    be la cosa che voglio fare e' un po' particolare, in poche parole vorrei che, dato il mio programma eseguito in background, il focus e' quindi su altre finestre anzi applicazioni!, questo programma, in determinate condizioni, causi la pressione di un tasto di tastiera...cio' e' possibile con API oppure occorre far ricorso a metodi di livello + basso?

  7. #7
    Si può fare, ma non puoi farlo con un'applicazione console... devi usare un'applicazione GUI (anche senza finestre).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    non puoi farlo con un'applicazione console... devi usare un'applicazione GUI
    xke'?

    nn mi intendo molto di queste applicazioni pero' specifico uteriormente che la pressoine di un determinato tasto deve essere sentita anche quando l'applicazione in questione nn e' in focus, ma si sta lavorando con un'altro programma...

    t ringrazio x l'interessamento e x l'aiuto e t chiedo se cmq sia, utilizzando un'applicazione GUI, dovrei usufruire del SendInput

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, ma a quale applicazione deve arrivare il tasto? Come fa il programma in background a sapere a quale processo inviare il tasto? Cosa fa in particolare (a cosa serve) l'applicazione in background?

  10. #10
    quello che volevo e' trovare un modo per eseguire determinate azioni di un programma(non scritto da me) tramite la pressione di tasti(quando premo q esegue una determinata azione etc...), questi pero' non devono essere premuti dalle mie sante manine ma da un programma che e' in esecuzione in background che fara' il suo dovere "pigiando" di tanto in tanto dei tasti. manco a dirlo, e qui sta il punto, la pressione non deve essere locale al mio programma ma la deve sentire l'applicazione su cui lavoro...nn sono proprio certo che cio' sia possibile...forse e' possibile utilizzando un'interrupt, pero' nn ne sono molto convinto...che ne pensate?

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.