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 :

Récupérer la position absolue du curseur de saisie texte


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 9
    Points
    9
    Par défaut Récupérer la position absolue du curseur de saisie texte
    Bonjour à tous !

    Voilà quelques temps que je cherche (en vain ) à récupérer la position du curseur clignotant qui apparaît lorsqu'on saisit du texte ( | clignotant) , et ce depuis n'importe quelle application.
    Il y a t-il un appel système pour récupérer cette position, un hook à installer... ?

    Le but est d'afficher une fenêtre en overlay à côté de celui-ci et qui se déplace au fur et à mesure de la frappe.
    Je peux positionner cette fenêtre à l'écran en coordonnées absolues avec 0<= X < ResolutionEcranX et 0<= Y < ResolutionEcranY.

    Merci beaucoup

    Edit : les plateformes cibles sont Windows >= XP

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 111
    Points
    111

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 9
    Points
    9
    Par défaut
    Lightness1024, merci de ta réponse.

    Je ne peux pas essayer pour le moment, mais j'ai l'impression que ces méthodes ne sont valables que pour les applications console.

    Il faudrait que ça marche surtout pour les applications graphiques Windows, style Word, Excel, IE, Chrome, Firefox... en fait le curseur de l'invite de commande ne m'intéresse pas.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 672
    Points : 25 483
    Points
    25 483
    Par défaut
    Dans ton application, sur ces controles type EDIT ou MEMO, GetCaretPos devra te donner la position du | du contrôle ayant le Focus

    Pour une fenêtre d'une application, il faut déjà connaître la fenêtre ayant le Focus, GetForegroundWindow, par contre connaître le EDIT et MEMO sous-jacent contenant réellement le focus, ça dépend de ta lib (MFC, VCL, ...)

    Pense en plus que certaines applications n'utilisent pas des contrôles windows mais dessinent tout à l'écran (le cas du Python par exemple)
    FireFox ou IE idem, utilise leurs propres controles (pur dessin), il est donc difficile de récupérer les controles
    Pour IE, avec l'ActiveX, il est possible de parcourir les IHTMLElement mais c'est très spécifique
    Pour Word et Excel, idem, c'est une tambouille interne, difficile de dépasser la^speudo fenêtre MDI
    avec des classes au nom claires et explicites comme Excel7 pour le formulaire courant et _WwB pour le document Word

    En fait, parmis toute les applications que tu as cité, cela doit être celles qui justement ont la gestion de contrôles visuels les plus complexe et les moins accessible de l'extérieur !
    Toute son conçu pour une utilisation par Automation, d'un point de vue logique des élements (Noeud HTML, Cells, Range, Paragraph, Line) mais pas d'un point de vue Handle de Control


    Pour le Hook avec SetWindowsHookEx en mode WH_GETMESSAGE, tu peux dans la CallBack intercepté les WM_SETFOCUS
    Perso, j'avais pour le fun intercepté les WM_PAINT, pour écrire le nom de la classe de chaue contrôle, c'est la que j'ai vu que pour IE par exemple, cela s'arrête à 'Internet Explorer_Server'

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 9
    Points
    9
    Par défaut
    ShaiLeTroll, merci beaucoup de tes explications, cela confirme bien ce que je craignais : Il n'y a apparemment pas de méthode simple, ou du moins générique (quoique je pensais bien à une reconnaissance des formes en temps réel sur le framebuffer mais pour la légèreté on repassera ) pour récupérer la position de ce curseur.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 111
    Points
    111
    Par défaut
    ah pardon j'avais pas tout lu. en effet c'est pas évident.
    tu veux faire un truc genre IME si je comprend bien. (ctfmon.exe)
    ... oué, ptet en hookant la dll qui fait le edit control ?

Discussions similaires

  1. [Plugin] Récupérer la position du curseur
    Par Amon dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 12/02/2009, 10h38
  2. position absolue d'un champs de text
    Par john_wili dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/02/2009, 19h00
  3. récupérer la position absolue d'un div
    Par natoine dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/02/2008, 16h12
  4. [C#]Comment récuperer la position absolue du curseur de la souris?
    Par PerpetualSnow dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/08/2006, 11h13

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