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 :

keybd_event()/PostKeybdMessage() vers une application.


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut keybd_event()/PostKeybdMessage() vers une application.
    J'aimerais faire un keybd_event dans une application minimisée.
    J'utilise devcpp.

    Supposons que l'application est déjà ouverte et se nomme: "test.txt - Bloc-notes".

    Pour pouvoir faire celà, il faut plutôt utiliser PostKeybdMessage() et pas keybd_event().
    Voilà la fonction sur msdn:
    http://msdn.microsoft.com/en-us/library/aa922170.aspx

    Mais je n'arrive pas à utiliser cette fonction.

    Quelqu'un pourrait-il montrer un exemple de PostKeybdMessage() qui envoye une pression sur 'z' au Notepad?

    Donc:
    - trouver le handle de "test.txt - Bloc-notes".
    - envoyer "z" avec PostKeybdMessage() au Notepad.

    Pour trouver le handle je ferais:
    HWND handleNotepad;
    handleNotepad = FindWindow(NULL, "test.txt - Bloc-notes");

    mais déjà pas sûr que ça fonctionne bien avec les espaces dans le titre de la fenêtre.

    Si ça peut aider pour les VkKey, avec keybd_event c'est:
    keybd_event(VkKeyScan('z'),1,0,0);
    keybd_event(VkKeyScan('z'),1,KEYEVENTF_KEYUP,0);
    envoye "z" à l'écran actif.

    J'ai pourtant fait pas mal de recherche.
    Merci d'avance.

  2. #2
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Salut,

    j'ai déjà réalisé un programme qui ressemble à ce dont tu parles. En l'occurence, il détecte l'activité clavier et souris, et quand il n'en trouve pas pendant trop longtemps, il écrit des 'a' dans un Notepad.

    Ce que j'ai à dire qui peut t'aider :

    1 - pour faire ce programme, je me suis aidé de cet excellent article

    Citation Envoyé par Hoplalol Voir le message
    Pour pouvoir faire celà, il faut plutôt utiliser PostKeybdMessage() et pas keybd_event().
    2 - moi j'ai utilisé PostMessage

    Citation Envoyé par Hoplalol Voir le message
    handleNotepad = FindWindow(NULL, "test.txt - Bloc-notes");
    3 - dans l'article sus-mentionné, tu trouveras de l'aide pour cela aussi. Si tu veux savoir si FindWindow a réussi, il te suffit de tester sa valeur de retour. Tu peux aussi utiliser des fonctions comme SetWindowPos pour vérifier que tu as le bon handle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HWND hNotepadWnd = FindWindow("Notepad",NULL);
    if (hNotepadWnd)
    {
    SetWindowPos(hNotepadWnd,HWND_BOTTOM,0,0,100,100,SWP_NOACTIVATE);
    }

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut
    Merci de t'intéresser à la question et de m'avoir indiqué cet article!

    J'ai donc fais quelques essais, mais non-concluants avec PostMessage().
    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
     
    #include <iostream.h>
    #include <stdlib.h>
    #include <windows.h>
     
    int main()
    {
          HWND hNotepadWnd = FindWindow("Notepad",NULL);
     
          Sleep(2000);
     
          while(true)
          {
                PostMessage(hNotepadWnd,WM_KEYDOWN,VK_SPACE,0);
                Sleep(2000);
          }
     
          return 0;
    }
    Pour tester, il faut ouvrir un fichier notepad.
    Et cela devrait faire la touche espace dans ce fichier notepad.

    J'ai aussi testé la méthode ci-dessus du SetWindowPos() pour vérifier que j'ai le bon handle.

    Quelqu'un pourrait tester? Le problème vient peut-être de chez moi.
    Ou bien ai-je fait une erreur évidente?

  4. #4
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    HWND hNotepadWnd = FindWindow("Notepad",NULL);
    if (hNotepadWnd)
    {
    	HWND hPrev = GetForegroundWindow();
    	SetForegroundWindow(hNotepadWnd);
    	Sleep(100);
    	PostMessage(hNotepadWnd,WM_KEYDOWN,'A',0);
    	Sleep(100);
    	PostMessage(hNotepadWnd,WM_KEYUP,'A',0);
    	SetForegroundWindow(hPrev);
    }

Discussions similaires

  1. [1.x] Redirection vers une application
    Par LordBob dans le forum Symfony
    Réponses: 2
    Dernier message: 01/07/2008, 14h13
  2. Lien vers une application
    Par Baka59 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 08/01/2008, 10h55
  3. Réponses: 6
    Dernier message: 12/12/2007, 16h10
  4. [FLASH MX] Lien vers une application
    Par mzt.insat dans le forum Flash
    Réponses: 4
    Dernier message: 15/03/2005, 19h18
  5. Faire un raccoucis vers une application sous wine
    Par zamanika dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 01/10/2004, 14h10

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