CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] simuler une pression une touche

Koyo-K
Koyo-K
Niveau 9
30 août 2004 à 01:49:56

Cette question ne m´est pas venue par hasard, c´est en jouant à un petit jeu flash où il fallait appuyer le plus vite possible sur 2 touches l´une apres l´autre et repetitivement, que je me le suis demande. En plus de gagner la medaille d´or du 100m :cool: c´est une bonne occasion d´enrichir ma connaissance generale :)

L´annee scolaire passée moi et des potes on se passait le temps quelques fois a taper le code binaire sur 1 ligne sur nos caltos ( je crois qu´il y avait 10 chiffres sur une ligne => le même nombre de bits => 1024 lignes à se taper à la main :fou: ) .
Ca c´etait la petite historie pour que vous compreniez pourquoi je vais demander ce qui suit :p)
Mais depuis que je connais les boucles ( oui oui j´ai commencé le C++ il y a plus d´1 an et je ne connais les boucles que depuis quelques mois...) et que j´ai vu sur le tuto de JeanYvesYves qu´il est possible d´afficher differents types en castant dans une boucle j´aurais bien essayé de prendre ma revanche puisque j´ai reseté la caltos et j´en étais à plus des 3/4 ! !!
Ce serait pour le plaisir de voir défiler les chiffres à toute berzingue que je me ferais bien un ch´ti prog... histoire de délirer le temps de l´exécution de quelques lignes de code.
Je tiens à préciser : quand j´ai écris ces lignes j´avais encore toute ma tête.

LGV
LGV
Niveau 28
30 août 2004 à 01:56:03

je ne vois pas tres bien le problème, en fait, ni trop le rapport entre afficher en bouclant et lire une entrée clavier :/
quand tu lis une entre clavier, tu vas y aller à coup de getc ( C), ou dans le style, ou de cin > > ( C++), mais pour ce que tu veux faire, tu n´as pas vraiment besoin de " lire" de valeurs, tu peux faire évoluer des variables pour représenter les codes alphanumériques par ex.
à priori un simple
for ( int index = 0; index < limite_que_je_veux; +index, cout < < des_valeurs);
devrait suffire :-?
mais je ne suis pas sur de bien comprendre le chose en fait...
si tu pouvais préciser ce que tu attends exactement en sortie, ça pourrait aider.

Koyo-K
Koyo-K
Niveau 9
30 août 2004 à 02:20:10

En fait j´ai demandé 2 trucs séparés par 1 ligne. Le premier prob est écrit dans le titre et le second - qui ne meritait selon moi pas de topic à lui tout seul - est d´afficher bêtement TOUTES les possibilites d´un nombre binaire de 0 à tel nombre... J´ai toujours eu du mal a expliquer les choses donc en gros c´est pour faire comme ça :
00 0000 0000..... à 11 1111 1111 en passant par 00 0000 0001, 00 0000 0010 etc...

Et par la suite je demanderais jusqu´à quel nombre de bits il ( l´utilisateur) souhaiterais aller au lieu de le borner à 10 bits...

dnob700
dnob700
Niveau 10
30 août 2004 à 11:35:59

en visual basic, il y a une commande : sendkeys qui permet de faire ce que tu veux,

En C++ il y a la fonction SetKeyboardState qui permet PEUT-ÊTRE de le faire.

Par contre, tu peut utiliser SendMessage ou PostMessage qui lui s´est sur fera ce que tu veux si tu envoie le bon message.

Mais il te faut l´ID de processus de l´application a laquel tu veux envoyer le message ( c´est a dire la pression sur une touche). En VB, ça l´envoie à l´application qui a le focus et il y a un paramètre booléen qui permet de choisir entre Send... et Post... mais en C++ il y a peut être unne fonction qui permet de récupérer l´ID.

. ..
du temps passe
. ..

GetForegroundWindow c´est la fonction que je cherchais. Avec ça tu as le hwnd de la fenêtre qui est en premier plan. Alors toit tu fait un bouton sur ton programme qui active un timer. Pendant ce temps là tu sélectionne la bonne fenêtre puis au bout du timer tu active d´abord cette dernière fonction et tu passe ce qu´elle retourne en paramètre de l´une des 2 première fonction autant de fois qu´il y a de touche à envoyer.

Quelle est la diférence entre post et send ? post continue l´exécution du programme sitot après l´appel de la fonction alors que send attend que l´application cible ets traité le message, je te conseille cete deuxième solution pour ne pas surchargez le PC.

LGV
LGV
Niveau 28
30 août 2004 à 11:50:43

pour une appli console, je ne suis pas certain que tout cela passe.. Mais dans l´absolu cela ne sert à rien ! Dans une appli qui lit le clavier, tu récupères un état, tu le stockes dans une structure perso, et tu t´en sers dans la suite ; dans un prog qui ne lit pas le clavier, tu sautes la premières étapes et tu remplis ta structure avec ce que tu veux...

JeanYvesYves
JeanYvesYves
Niveau 10
30 août 2004 à 14:28:25

Sinon, tu veux afficher des nombres en binaires ?
voici un petit code :

/ / dans ton main :

for(i=0,i<(1<<max);i++)
{
printbin(i,8);
}

/ / la fonction printbin :

void printbin(unsigned long n,int nbchiffres)
{
int i;
for(i=nbchiffres-1;i>=0;i--)
{
cout < < ( (n>>i)&1);
}
cout < < endl;
}

nbchiffres : nombres de chiffres afficher :
exemple :
000101 --> nbchiffres = 6
101 --> nbchiffres = 3

max : jusqu´ou va ta boucle :
exemple
111 --> max = 3
11111 --> max = 5

bonne boucle :)

dnob700
dnob700
Niveau 10
30 août 2004 à 14:32:42

lgv : si, une appli console peut utiliser ces fonctions et il veut les envoyer [les messages] à une autre appli qui est un jeu de je ne sais pas quoi mais je doute que ce soit une appli console.

Mais c´est vrai que ça serait interessant de voir pour une appli console. Est ce que le traitement des message est fait par windows ? ou bien est ce que c´est fait à un autre niveau, tel est la question. Mais les appli console réagisse au messages vu qu´un WM_QUIT la fera quitter on peut penser qu´on peut aussi envoyer des messages du clavier...

LGV
LGV
Niveau 28
30 août 2004 à 14:38:02

ben pour une appli console, c´est une boucle standard de message qui est utilisée, donc ça doit réagir à qq msg standard, mais impossible de redéfinir le comportement, à priori. Pratique cela dit qu´on puisse en envoyer à d´autre fenetres.

Koyo-K
Koyo-K
Niveau 9
31 août 2004 à 01:54:47

Merci JeanYvesYves je vais tester ça demain :p)
L´histoire du hwind me parait un peu compliquée mais je me renseignerai !

Koyo-K
Koyo-K
Niveau 9
01 septembre 2004 à 02:56:08

Marki ^______^ CA MAAAARCHE ( la boucle) !
Ainsi je vois le système de décalage de bit en action ! Je ne comprends pas bien cette ligne
cout < < ( (n>>i)&1);
le n > > i ça va mais ça mis entre parenthèses puis le &1 ( c´est bien " aller à l´adresse de 1 ? ") je bloque.

LGV
LGV
Niveau 28
01 septembre 2004 à 02:59:03

nan, ici le & est l´opérateur binaire AND qui s´applique bit à bit ; autrement dit, apres le décalage à droite, on ne conserve que la valeur du 1er bit ( on masque).

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment