IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

J'ai reussi à faire du clic automatique, mais.


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut J'ai reussi à faire du clic automatique, mais.
    Bonjour les gens,
    Je ne sais pas encore programmer en C ni C++, mais une petite tâche ludique peut m'y aider
    (je programme déjà en php au boulot et surtout pour moi depuis des années, j'ai mangé beaucoup de java et de perl en études avant, et j'ai fais un tit peu de python récemment en apprenant tout seul, ce sont des langages avec une syntaxe très proche donc ca ira )

    Je cherchais une méthode pour faire un simple clic de souris automatiquement toutes les x secondes. Je suis tombé sur un bout de code libre permettant de dessiner une croix avec la souris et faire un double-clic, j'ai donc installé un compilateur (mingw), j'ai lu un peu la doc, reussi a en faire un executable, ca marche au poil, je l'ai alors modifié (j'ai viré le dessin de croix et la boite de dialogue, j'ai rajouté une boucle et un temps aleatoire entre les clics), ca marche impécable dans windows (je teste en laissant mon pointeur de souris sur le bouton du menu démarrer de windows, je le vois ainsi s'ouvrir et se fermer), MAIS quand j'ouvre un jeu en plein écran les clics ne se font plus, j'en viens à la question:

    A quel "niveau" dans le système les clics de souris sont-ils éffectués par un tel programme ?

    Voilà où j'en suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <conio.h>
    #include <iostream>
     
    int STDCALL
    WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
    {
    	ShowCursor(TRUE);
    	Sleep(60000);
    	srand(time(NULL));
    	for (int i=0; i<500; ++i)
    	{
    		int nombre = 12000 + (int)((double)rand() / ((double)RAND_MAX + 1) * 15000);
    		mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); //boutton gauche appuyer
    		mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); //boutton gauche relacher
    		Sleep(nombre);
    	}
     
    	return 0;
    }


    Si je ne peux pas faire un programme qui gère la souris à un niveau assez bas pour qu'une appli sous windows ni voit que du feu, je pense aussi à une méthode qui marchera assurément mais qui est aussi plus contraignante:
    - je branche sur mon pc une souris sur port serie
    - je trouve le type de signal utilisé sur le port serie lors d'un clic gauche
    - je crée un programme qui envoie le bon signal sur son port serie (avec une boucle et un timer, toujours pareil), je le fais tourner sur une autre machine (2 autres dispo, linux et windows), je relie les deux par un cable serie (dispo aussi), logiquement mon pc pensera que c'est une souris qui clique.

    Ca me ferait un bon travaux pratique aussi

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ils se font dans la boucle de gestion des événements, en gros pas du tout là où tu l'as mis dans ton code - et beurk pour la macro qui devrait être une variable constante globale et pas plantée en plein milieu du code -

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    La boucle de gestion des évènements, c'est pas plutôt pour detecter les actions souris/clavier ? (là je veux créer un clic, pas en detecter un)

    edit: oups j'avais laissé des vieux commentaires complètement innaproprié de l'ancien code, dsl

    Je vais aller lire ça, je viens de tomber dessus en cherchant dans google:
    http://tcharles.developpez.com/simul/#controlesouris

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Et dans le lien précédent, voici un début d'élément de réponse à ma question:

    Le clavier dans tous ses états

    Dans cette partie, nous allons voir comment faire croire au système qu'une touche est pressée ou non. Si je parle ici de système et non pas d'application, c'est parceque la fonction que nous allons utiliser n'a pas conscience d'une telle chose. Pour elle, il n'y à qu'un seul logiciel en cours : Windows ; et elle se contente de lui indiquer les modification d'état du clavier. Il faudra donc prendre en compte lors des futurs développements qu'il n'est pas possible de dire "je veux simuler telle action pour telle fenêtre".

    Pour comprendre le fonctionnement du principe que nous allons voir, il faut considérer que le programme qu'on est en train de réaliser est en réalité le pilote d'un périphérique réel et agir en tant que tel. Les pilotes de périphérique des claviers utilisent la fonction keybd_event() pour indiquer au système l'état des différentes touches. Comme son nom l'indique, cette fonction ne signalera au système que les changements d'état des touches. Il n'y aurra donc pas à intercepter les significations d'état que pourraient être amenés à faire d'autres pilotes de périphériques si le système avait voulu qu'on l'informe toutes les n millisecondes de l'état de chacune des touches.


    Ce que j'aimerai savoir, c'est si la fonction mouse_event gère la souris au niveau du pilote de peripherique, ou à plus haut niveau dans windows ?



    edit: j'ai reussi à trouver toutes les docs que je veux en partant du nom de la fonction dans google, j'arrive à faire ce que je veux, mais aucun fonctionnement dans le jeu auquel je veux gruger, manifestement y'a une protection contre ce genre de chose, ca serait trop facile
    Je vais tenter l'autre solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire une sauvegarde automatique ?
    Par Neal Morse dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/12/2005, 19h29
  2. créer des liens automatiquement mais sans boucle
    Par psychoBob dans le forum Langage
    Réponses: 8
    Dernier message: 15/12/2005, 15h20
  3. Faire un filtre automatique comme dans Excel
    Par ptitdav dans le forum Access
    Réponses: 2
    Dernier message: 19/09/2005, 13h29
  4. Faire des calculs automatiques en JavaScript
    Par yoyot dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2005, 10h31
  5. [VB6] Ne pas faire de retour automatique dans un RichTextBox
    Par Arthaniel dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 20/01/2005, 03h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo