Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/08/2015, à 15:16

Draguld

C++ avec lsfml, gerer les output d'une manette vers l'os (Apis ?)

Bonjour a tous !

Je me presente,
Draguld codeur néophyte a l'orthographe discutable.

Je viens vous voir car aprez avoir poster sur le forum de la SFML on m'a rapidement annoncé,
que la lib ne gèrent pas les "clique factice" et que peut être une Apis de mon OS pourrais faire le taf.

Je suis donc sur Ubuntu 14.04LTS et je me tournent donc vers vous smile

Je souhaite faire un petit programme qui me permettras d'utiliser une manette pour déplacer le curseur de la souris (sa j'y arrivent avec la sfml) et lorsque j'appuierais sur un bouton (X ou autre) cela produirais un clique de souris smile

Merci de m'avoir lus ! smile

Hors ligne

#2 Le 11/08/2015, à 12:12

elburgos

Re : C++ avec lsfml, gerer les output d'une manette vers l'os (Apis ?)

C'est assez bas niveau ce que tu veux faire ...

Soit tu utilises une frameworks type qt,gtk qui peut gérer ça (même si c'est lourd de linker de telles lib juste pour un click).

Soit tu passes à la Xlib ,et c'est déjà moins évident.

Soit tu passes par une apli externe comme xdotool que tu appelles depuis ton programme,d'ailleurs tu peux regarder le code ici (ça utilise Xlib)

Quelques liens :

Simuler un click de souris sous ubuntu
Simuler un click de souris sous linux
Utiliser la Xlib en c++

ou peut être  qu'une lib c++ de gestion d' événements X existe


Envoyé depuis mon Windows Phone

Hors ligne

#3 Le 11/08/2015, à 14:33

Draguld

Re : C++ avec lsfml, gerer les output d'une manette vers l'os (Apis ?)

Merci beacoup pour toute ces piste !
Je vais creuser sa pour voir laquelle de ces piste serais la plus adapté
a mon programme et a mon niveau smile

Si j'arrive a faire un chouette petit programme je le mettrais sur license libre,
et le lien sur le post.

Si jamais d'autre piste existerais je vous invite a les poster !
Ce topic serviras peut être a un autre bidouilleur de code smile

A bientôt !

Hors ligne

#4 Le 11/08/2015, à 19:19

elburgos

Re : C++ avec lsfml, gerer les output d'une manette vers l'os (Apis ?)

Pour info la fonction mouseClick() du premier lien marche très bien !

pour tester on peut faire

click.h :

#ifdef __cplusplus
extern "C" {
#endif

void mouseClick(int button);

#ifdef __cplusplus
}
#endif

click.c :

#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);
}

Comme ça tu déclare tes fonctions en C et elles sont utilisable en c++

On créer un programme en c++ qui ne fait qu'appeler notre fonction.

main.cpp :

#include "click.h"

int main()
{
	mouseClick(1);
	return 0;
}

On compile :

gcc -c click.c 
g++ -c main.cpp
g++ click.o main.o -o click -lX11

Et  tu peux tester en lançant ton programme et en pointant la souris sur un bouton par exemple, ou n'importe quoi qui réagit a un clic de souris  :
Dans un terminal, dans le dossier contenant ton exécutable

./click

ça marche ! donc tu n'as qu'a appeler la fonction mouseClick() depuis ton programme.


Envoyé depuis mon Windows Phone

Hors ligne

#5 Le 12/08/2015, à 01:28

Draguld

Re : C++ avec lsfml, gerer les output d'une manette vers l'os (Apis ?)

Je teste sa demain ! smile
Grand merci !

Hors ligne