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

Windows Discussion :

Problème avec SetCursorPos et IAccessible


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 81
    Points
    81
    Par défaut Problème avec SetCursorPos et IAccessible
    Bonjour, et bonne année

    Je souhaite faire un programme en C++ qui fait bouger la souris et qui peut être utiliser avec un lecteur d'écran (NVDA pour être précis).

    Le lecteur d'écran utilise les fonctions de IAccessible pour lire l'élément qui a le focus, j'ai essayer de faire bouger la souris avec toutes les fonctions que j'ai pu trouver (mouse_event, sendMessage, SetCursorPos ...) mais le lecteur d'écran ne me détecte pas les évènements (surtout le "STATE_SYSTEM_FOCUSABLE"). J'ai aussi essayer les fonctions de focus (setFocus ...) mais rien ne change. Je précise aussi que la fonction windows qui permet de faire bouger la souris avec le pavé numérique est très bien détecter pas le lecteur (donc c'est théoriquement possible de le faire)

    Je recherche donc une fonction pour faire bouger la souris qui sera détecter avec IAccessible.


    J'ai comme idée de récupérer le curseur système (récupérer l'ID ne doit pas être un problème) et le faire bouger (là par contre j'ai aucune idée de comment faire).

    Si vous avez une idée de comment faire (ou tout autre technique) je suis preneur.

    Edit : le programme fonctionne avec le lecteur d'écran de Microsoft, mais je cherche quand même un moyen de le faire fonctionner avec NVDA en lecteur d'écran car il est mieux conçu.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    SetFocus ne fonctionnera pas puisque tu n'es pas dans le thread cible. Il faudrait d'abord utiliser AttachThreadInput.
    Quant aux mouvements souris, il n'y aucune raison qu'il génère un événement IAccessible puisque ça ne concerne pas un élément UI. Ton soft intercepte peut-être les mouvements par hook et récupère l'élément sous la souris tout en ignorant ceux injectés.
    Bref, avec Mouse_Event, envois un click gauche après le déplacement et tu devrais retomber sur tes pieds

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 81
    Points
    81
    Par défaut
    Le "mouse_event(MOUSEEVENTF_LEFTDOWN,_point.x,_point.y,0,0);" ne fonctionne pas : ça clic ... et c'est un problème quand on est au dessus d'une icône ou autre chose (ça ne fonctionne pas non plus avec MOUSEEVENTF_LEFTUP).

    Par contre quand je clic ça fonctionne, mais comme ça génère un évènement UI c'est normal.

    En attendant d'avoir d'autres réponses je vais aller voir dans le code source de NVDA s'il y a un moyen de ne pas ignoré les mouvements de souris injecté.

    Edit : J'avance, je viens de voir qu'il est possible d'envoyer des évènements de focus avec IAccessible (ça marche pas encore bien mais c'est un début et cette fois NVDA récupère les évènements).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 81
    Points
    81
    Par défaut
    Finalement le problème est réglé, c'était bien NVDA qui bloqué les évènements simuler, j'ai donc modifier et recompiler le code et maintenant ça fonctionne.

    Si quelqu'un a le même problème que moi : dans le fichier mouseHandler.py, il y a une fonction internal_mouseEvent(msg,x,y,injected), il faut supprimer le "if injected return true".

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Désolé de remonter ce sujet de .... 4 ans xD mais google pert la notion du temps des fois.

    Voila je réponds parce que j'ai exactement le même problème mais avec une autre application. Seulement je ne peu pas décompiler le code et farfouiller pour trouver oû ils bloquent ça.

    Je voulais tout simplement savor s'il y avais un moyen de 'bloquer' la non réception de message simulés ou tout simplement de passer au dessus cette ignorance.

    J'ai un clavier G110 (bien utile pour les macros etc..) qui me permet de simuler un clic lors de l'appui sur une touche programmable. Et lorsque je le fait de la sorte, le clic à bien lieu.

    Les pilotes de ce claviers sont bien obligés de passer par une simulation de clic ou un truc dans le genre non ?

    Merci

    Cordialement.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    3 janvier 2012... Faut pas exagérer non plus

    Non, tu ne peux pas modifier ce flag. Mais si la macro de ton clavier est correctement exécutée c'est que tu as une erreur dans ton code !

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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