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 le clavier sur une fenêtre plein-écran ?


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 25
    Points
    25
    Par défaut Simuler le clavier sur une fenêtre plein-écran ?
    Bonjour à tous,

    Je cherche à afficher une fenêtre existante en plein-écran. Je ne veux pas mettre une fenêtre en plein-écran, mais simplement l'afficher . en utilisant SetForegroundWindow(), la fenêtre plein-écran est juste "sélectionnée", elle ne s'affiche pas !

    Dans mon cas, je cherche simplement à afficher la fenêtre d'un jeu vidéo. Une idée ?


    Merci de vos réponses

    EDIT

    J'ai pu afficher ma fenêtre comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                 ShowWindow(hBf2, SW_SHOWNORMAL);
                 SetForegroundWindow(hBf2);
    J'ai par contre toujours un problème, impossible de "simuler" la pression sur la barre d'espace dans cette fenêtre, par exemple.

    De plus, il arrive que la fenêtre n'ait pas le focus, bien qu'elle soit au premier plan... Le problème serait là ?

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Points : 76
    Points
    76
    Par défaut
    tu veux dire par afficher en pleine ecran que la fenetre prenne toute la place sur l'ecran et que l'on voit encore ses rebords c'est ca??

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Justement non . J'essaie de monter un petit programme me permettant de simuler la pression de quelques touches après l'ouverture d'un jeu.

    Le problème, je dois obligatoirement afficher la fenêtre du jeu au premier-plan et lui donner le focus, comme si je jouais. Je pense que j'ai dû oublier un élément, car je n'arrive à rien...

    Si mon code peut-être utile (C++) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>
    int main&#40;int argc, char * argv&#91;&#93;&#41;
    &#123;
         HWND hFore;
         char szBuffer&#91;128&#93;;
         int iNbChar;
         
         //on cherche le nom de la fenetre en fg après 10 sec
         
         Sleep&#40;10000&#41;;
         
         hFore = GetForegroundWindow&#40;&#41;;
         iNbChar = GetClassName&#40;hFore,szBuffer,128&#41;;
         
         Sleep&#40;5000&#41;;
         
         HWND hBf2 = FindWindow&#40;szBuffer,NULL&#41;;
         
         //actions
         
         while&#40;1&#41;
         &#123;
                 if&#40;GetKeyState&#40;VK_ESCAPE&#41;&#41;
                 &#123;
                       break;
                 &#125;
                 
                 ShowWindow&#40;hBf2, SW_SHOWNORMAL&#41;; //affiche la fenêtre même si minimisée
                 SetForegroundWindow&#40;hBf2&#41;;
                 //BringWindowToTop&#40;hBf2&#41;; <-- ça sert à qqch ça ?
                 
                 Sleep&#40;200&#41;;
                 
                 //clavier
                 keybd_event&#40;VK_SPACE,0,0,0&#41;;
                 keybd_event&#40;VK_SPACE,0,KEYEVENTF_KEYUP,0&#41;;
                 
                 //variante... marche tout aussi bien que celle ci-dessus
                 //SendMessage&#40;hBf2,WM_KEYDOWN,'5',0&#41;;
                 //Sleep&#40;500&#41;;
                 //SendMessage&#40;hBf2,WM_KEYUP,'5',0&#41;;
                 
                 Sleep&#40;7000&#41;;
         &#125;
         
         Sleep&#40;1000*60*5&#41;;
         
         return 0;
    &#125;
    J'ai testé mon programme en ouvrant une application comme Notepad. Cela fonctionne à merveille, un espace s'ajoute bien toutes les 7 secondes.


    PS : Désolé d'avoir posté mon message dans le mauvais forum.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Si c'est un "vrai" jeu video, basé sur DirectX/Direct Input, il me semble que c'est normal que keybd_event ne fonctionne pas. Faut voir du côté de Direct Input il me semble, mais je n'y connais pas grand chose...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Je vais me renseigner, merci beaucoup pour la piste .

  6. #6
    mat.M
    Invité(e)
    Par défaut
    en plus le code source donné en exemple c'est un projet en mode console c.a.d texte donc les API de gestion de fenetres ne fonctionneront pas

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Rebonjour,

    J'ai fait ma petite recherche sur DirectInput. Les jeux sont bien basés sur DirectX, et l'utilisation de DirectInput ne sert qu'à créer un autre programme, pas possible d'éditer un jeu...

    Et là, ça sent pas très bon, j'ai trouvé un poste d'une personne dans la même situation (mais en delphi), on lui conseille carrément de hacker le jeu !

    Je vais partir en quête de tutorials de "game hacking", merci de ta réponse .

  8. #8
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    La question m'intéresse également.

    en plus le code source donné en exemple c'est un projet en mode console c.a.d texte donc les API de gestion de fenetres ne fonctionneront pas
    Non, c'est faux. Le fait d'avoir un programme console ne change rien. L'appel des API se fait toujours et je ne vois pas pourquoi avec un programme console, tu serais limité à quelques API.

    Dans ton code, es tu sûr de bien récupérer le bon handle de fenêtre déjà ?
    Tu peux utiliser spy++ pour connaitre le nom de class et la légende de la fenêtre à fournir dans FindWindow sinon. Ensuite, pas besoin d'utiliser ShowWindow dans ta boucle normallement. Le sendMessage devrait fonctionner a prioris mais je me rappelle avoir déjà essayé quelque chose dans le genre et j'avais rencontré des problèmes....

  9. #9
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par SteelBox
    La question m'intéresse également.

    Non, c'est faux. Le fait d'avoir un programme console ne change rien. L'appel des API se fait toujours et je ne vois pas pourquoi avec un programme console, tu serais limité à quelques API.
    Parce qu'on n'obtient pas de Handle sauf avec Findwindow.
    Mais je ne vois pas ce que veut faire l'auteur de ce post

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    SteelBox :

    Aucun problème pour récupérer la fenêtre. J'ai testé mon code sur le notepad, il me rajoute bien un espace toutes les 7 secondes.

    Sinon je crois que SendMessage permet de simuler la touche espace sans avoir mis la fenêtre choisie en fg. Ca m'importe peu dans mon cas, ces deux fonctions ne pouvant rien faire si le jeu est basé en DirectX. De même pour le contrôle de la souris, lorsqu'elle est utilisée comme un joystick (pointeur invisible, sert à déplacer le point de vue, par exemple).


    mat.M :

    Je cherche à développer un concept de macros externes pour un jeu ; avec ma boucle, je répète la macro voulue toutes les N secondes.

  11. #11
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Sinon je crois que SendMessage permet de simuler la touche espace sans avoir mis la fenêtre choisie en fg.
    Ben oui, tu donnes un handle de fenêtre à ton sendMessage.

Discussions similaires

  1. Réduire proprement une fenêtre plein écran
    Par Spidyy dans le forum Windows
    Réponses: 2
    Dernier message: 09/03/2010, 18h30
  2. Réponses: 7
    Dernier message: 08/07/2009, 18h22
  3. Simuler un ShortCut sur une autre fenêtre
    Par Sundark dans le forum Débuter
    Réponses: 2
    Dernier message: 27/05/2008, 13h52
  4. Réponses: 5
    Dernier message: 26/04/2007, 21h53
  5. Réponses: 4
    Dernier message: 25/07/2005, 14h24

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