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 :

Simuler l'appui de touche sur une fenêtre précise sous windows


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut Simuler l'appui de touche sur une fenêtre précise sous windows
    Bonjour,
    Je voudrais savoir si il exisait un moyen de simuler l'apuit d'une touche, dans un autre programme, grace aux fonctions présente dans window.h ou une quelquonque autre libraire.

    (En espérent voir poster dans le bon forum )
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    SendMessage/PostMessage

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je crois que la méthode conseillée, c'est SetForegroundWindow() + SendInput()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    D'accord merci, je vias chercher de ce coté là et je prévien si j'ai un problème

    (Nb : J'avais bien poster dans le movais forum >_<)

    Edit : Euh bon je suis complètement perdu ^^ Alors, j'ai crus comrpendre qu'il falais déjà capturer la fenêtre cible via FindWindow(). J'ai esseiller donc :
    HWND hFore = FindWindow(0,(LPCWSTR)"Sans titre - Bloc-notes");
    Mais j'obtien un pointeur null >_< (Oui j'ai pensser à ouvrir le bloque note avent)

    Ensuite, je n'arive pas à trouver grand chose sur les fonctions SetForegroundWindow et SendInput. J'ai seulement trouver que SetForegroundWindow passe la fenêtre au premier plan si j'ai bien comprit. Mais seulement je voudrais pouvoir simuler une touche du clavier, sans pour autant lui doner le focus

    Bref, si vous aviez un petit exemple ou un article qui traite du sujet sa m'aiderai beaucoup
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Aie c'est compliqué à faire en plus il faut utiliser des structures ATOM je crois.
    On peut utiliser FindWindow sinon tu peux avec les API déterminer les processus en exécutions et obtenir les handles.
    Après avoir obtenu le handle on peut prendre effectivement envoyer des messages avec SendMessage.

    Prendre FindWindowEx plutot que FindWindow
    http://msdn.microsoft.com/library/de...ndwindowex.asp

    An application can call this function in the following way.

    FindWindowEx( NULL, NULL, MAKEINTATOM(0x8000), NULL );

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par JC_Master
    Edit : Euh bon je suis complètement perdu ^^ Alors, j'ai crus comrpendre qu'il falais déjà capturer la fenêtre cible via FindWindow(). J'ai esseiller donc :
    Mais j'obtien un pointeur null >_< (Oui j'ai pensser à ouvrir le bloque note avent)
    Chercher une fenêtre (principale) par son titre est quelque peu aléatoire : la plupart des applications n'ont pas un texte prédéfini et constant dans leur barre de titre (sans parler des espacements).

    Je te conseillerais plutôt d'énumérer toutes les fenêtres principales en cours et d'analyser leurs titres afin d'identifier celle(s) qui t'intéresse(nt).

    Ensuite un SetFocus() et un SendMessage()/PostMessage() (faire des essais avec WM_KEYDOWN, WM_KEYUP, WM_CHAR) sur le handle trouvé devraient faire l'affaire.

  7. #7
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par mat.M
    Aie c'est compliqué à faire en plus il faut utiliser des structures ATOM je crois.
    On peut utiliser FindWindow sinon tu peux avec les API déterminer les processus en exécutions et obtenir les handles.
    Après avoir obtenu le handle on peut prendre effectivement envoyer des messages avec SendMessage.

    Prendre FindWindowEx plutot que FindWindow
    http://msdn.microsoft.com/library/de...ndwindowex.asp
    Euh bon je suis pas douer du tout en anglais donc un eut dure pour moi de comprendre les explications de msdn >_<

    Donc, si j'ai comprit, FindWindowEx selectione une fenêtre via un code hexadécimal, mais il faut déjà trouver le code qui corespond, par exemple, au bloque note... Si je n'arive déjà pas à récupèrer un pointeur sur la fenêtre je suis pas pret d'ariver à envoiller une sucession de caractère
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/03/2014, 00h43
  2. probleme avec l'appui sur une touche sur une jframe ou jdialog
    Par jeanfeu dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 05/08/2008, 16h14
  3. simuler l'appui de touches
    Par polo42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/07/2006, 11h47
  4. Simuler un appui de touche clavier
    Par Floo dans le forum Assembleur
    Réponses: 5
    Dernier message: 03/12/2004, 17h04
  5. Simuler l'appui de touches
    Par immerczeck dans le forum Assembleur
    Réponses: 5
    Dernier message: 21/04/2004, 17h23

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