2013-02-11 2 views
0

J'ai trouvé ces deux API au http://linux.die.net/man/3/xgetpointermapping. Je pense qu'ils peuvent être utilisés pour échanger des boutons de souris sur le système Linux ou Mac. Je l'ai utilisé de la manière suivante:Utilisez XGetPointerMapping/XSetPointerMapping pour échanger les boutons de la souris

  Display * curdisp; // Current display. 
    char  curmap[MAX_NUM];// Current mapping. 
    int   nmap;  // number of mappings. 

curdisp = XOpenDisplay(NULL); 

nmap = XGetPointerMapping(curdisp, curmap, MAX_NUM); 
if(!nmap) 
    return -1; 

if(curmap[0] == '1' && curmap[2] == '3') { 
    curmap[0] = '3'; 
    curmap[2] = '1'; 
} else { 
    curmap[0] = '1'; 
    curmap[2] = '3'; 
} 

//Set the mapping. 
nmap = XSetPointerMapping(curdisp, curmap, nmap); 

Mais le XSetPointerMapping d'appel renvoie 0 et il n'y a aucun effet sur le bouton de la souris. Quelqu'un peut-il donner un exemple d'échange de bouton de la souris en utilisant XSetPointerMapping? ou Comment l'utiliser correctement? Est-ce que ça va fonctionner immédiatement?

Le système d'exploitation utilisé est Mac OS X 10.7.4.

Répondre

1

Les numéros de bouton sont stockés en tant que caractères non signés mais ne sont pas stockés en tant que caractères. Remplacez '1' et '3' par 1 et 3.

Votre code les associe aux boutons 49 et 51 et affecte les boutons rendant les boutons 1 et 3 inutilisables.

+0

Merci pour la réponse. J'ai changé '1' à 1 et '3' à 3. Mais XSetPointerMapping retourne 0. Même après l'avoir exécuté sous sudo, il retourne zéro et il n'y a aucun impact sur le bouton de la souris. Quelle est la signification de 0 comme valeur de retour? Je suis tout à fait nouveau à la programmation X Windows. – doptimusprime

+0

Fonctionne pour moi et je reçois un retour de zéro alors je pense que c'est ok. Essayez d'imprimer les valeurs de la carte pour les vérifier. Le seul autre changement que j'ai fait était d'utiliser char non signé. – parkydr

+0

Le même programme fonctionne-t-il bien pour vous? Est-ce que je manque quelque chose pour curdisp? Je cours ce code sur Mac OS (Mountain Lion 10.7.4). Sur cette machine, il ne fonctionne pas. Je n'ai pas testé jusqu'à présent dans la machine Linux. – doptimusprime

Questions connexes