Partage
  • Partager sur Facebook
  • Partager sur Twitter

Simuler un click de souris sous QT (ubuntu)

Méthode plus simple que X11..?

Sujet résolu
    14 janvier 2012 à 18:44:14

    Bonjour à tous, Voilà mon problème, j'ai développé une IA pour le démineur de base de Linux en java. Tout marche nickel, j'aimerais maintenant le réaliser en c++. Déjà en c++ pour prendre des screenshots du démineurs et pour manipuler les images (couleurs des pixel pour détecter les couleurs), je suis parti sur Qt, librairie que je découvre mais je connais quand même un peu. Je viens de "finir" l'algo qui retourne les coordonnées des points mais... impossible de simuler un clic avec Qt sur une autre fenêtre aparement...J'ai donc cherché et il faut utiliser X11 :s, déjà il faut l'installer et le configurer, j'ai réussi en prenant un bout de code sur le net de simuler un clic ! (code à la fin) Maintenant je me demande comment inclure tout ça dans mon projet fait en Qt... (les includes de stdio.h, stdlib.h et autres passent pas), quelques conseils svp :)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <unistd.h>
    
    #include <X11/Xlib.h>
    #include <X11/Xutil.h>
    
    void mouseClick(int button)
    {
    	Display *display = XOpenDisplay(NULL);
    
    	XEvent event;
    
    	if(display == NULL)
    	{
    		fprintf(stderr, "error wtf?\n");
    		exit(EXIT_FAILURE);
    	}
    	memset(&event, 0x00, sizeof(event));
    
    	event.type = ButtonPress;
    	event.xbutton.button = button;
    	event.xbutton.same_screen = True;
    
    	XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
    
    	event.xbutton.subwindow = event.xbutton.window;
    
    	while(event.xbutton.subwindow)
    	{
    		event.xbutton.window = event.xbutton.subwindow;
    
    		XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
    	}
    
    	if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "error wtf\n");
    
    	XFlush(display);
    
    	usleep(100000);
    
    	event.type = ButtonRelease;
    	event.xbutton.state = 0x100;
    
    	if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "error wtf\n");
    
    	XFlush(display);
    
    	XCloseDisplay(display);
    }
    
    int main()
    {
    	mouseClick(1);
    	return 0;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2012 à 23:08:26

      Bon problème que j'ai réussi à contourner en créer un executable pour faire en clic utilisant la X11 et en appelant cet exécutable depuis Qt
      • Partager sur Facebook
      • Partager sur Twitter

      Simuler un click de souris sous QT (ubuntu)

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown