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 :

SendMessage & Handle de fenêtre et ses champs


Sujet :

C

  1. #21
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    Je sais plus quoi faire. C'est peut être à cause de dev c++ tout pourris.
    Pourquoi ne pas utiliser Visual C++ 2008 express?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  2. #22
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    j'ai toujours utilisé dev, je vais mettre vc++
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  3. #23
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Pour les prochains : SOUS DEV C++

    Pour inclure les SendIndputs, inclure avant windows.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _WIN32_WINNT 0x0500
    Mon code ne marche pas... Je devrais bien voir les caractères s'afficher dans notepad ? c'est pas caché ou quoique ce soit d'autre ?
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  4. #24
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Vu que SendInput() n'est pas destiné à un handle de fenêtre, tu dois d'abord t'assurer que la fenêtre de Notepad est au premier plan (SetForegroundWindow(), GetForegroundWindow() pour vérifier, etc.)
    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.

  5. #25
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    J'ai rajouté des informations pour essayer de comprendre ce qui ce passe.

    wVk est un type WORD alrs que VkKeyScan retourne un short... Je sais pas trop comment faire ? forcer la cast ?

    KeyboardEvent marche et me réecrit mystream : SendInput ne fait rien.

    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
    52
    #include <stdio.h>
    #include <stdlib.h>
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
    #include <wchar.h>
    #include <Winuser.h>
     
    using namespace std;
     
     
    int main (void)
    {
         char Stream[]   = "MyStream"                 ;
         int  StreamSize = sizeof(Stream)/sizeof(char);
     
         printf("\nTaille : %d", StreamSize);
     
         INPUT *Letter     ;
     
     
         Letter->type       = INPUT_KEYBOARD;
         Letter->ki.wVk     = 0             ;
         Letter->ki.dwFlags = 0             ;
         Letter->ki.time    = 0             ;
         Letter->ki.wScan   = 0             ;
     
     
         HWND Handle = FindWindow("Notepad", NULL);
         SetForegroundWindow(Handle);
     
         _sleep(1000);
     
         int i=0;
         for ( i=0; i<(StreamSize-1) ; i++ )
             {
                   Letter->ki.wVk = VkKeyScan(Stream[i]);
                   short CodeLetter = VkKeyScan(Stream[i]);
                   Letter->ki.dwExtraInfo = 0;
                   SendInput(1,Letter,sizeof(Letter));
                   Letter->ki.dwExtraInfo = KEYEVENTF_KEYUP;
                   keybd_event(VkKeyScan(Stream[i]),0,0,0);
                   _sleep(500);
                   keybd_event(VkKeyScan(Stream[i]),0,KEYEVENTF_KEYUP,0);
                   printf("\n_____________________", i);
                   printf("\n\n i : %d", i);
                   printf("\ncode lettre : %u  ", CodeLetter);
     
             }
     
         printf("\n\nTerminee");
         getchar();
    }
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  6. #26
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    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
    52
    #include <stdio.h>
    #include <stdlib.h>
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
    #include <wchar.h>
    #include <Winuser.h>
     
    using namespace std;
     
     
    int main (void)
    {
         char Stream[]   = "MyStream"                 ;
         int  StreamSize = sizeof(Stream)/sizeof(char);
     
         printf("\nTaille : %d", StreamSize);
     
         INPUT Letter[StreamSize]     ;
     
         HWND Handle = FindWindow("Notepad", NULL);
         SetForegroundWindow(Handle);
     
         _sleep(1000);
     
         int i=0;
         for ( i=0; i<(StreamSize-1) ; i++ )
             {
                   Letter[i].type       = INPUT_KEYBOARD;
                   Letter[i].ki.dwFlags = 0             ;
                   Letter[i].ki.time    = 0             ;
                   Letter[i].ki.wScan   = MapVirtualKey(Stream[i], 0);
     
                   Letter[i].ki.wVk = VkKeyScan(Stream[i]);
                   short CodeLetter = VkKeyScan(Stream[i]);
     
                   Letter[i].ki.dwExtraInfo = 0;
                   SendInput(1,Letter,sizeof(Letter));
                   Letter[i].ki.dwExtraInfo = KEYEVENTF_KEYUP;
     
                   keybd_event(VkKeyScan(Stream[i]),0,0,0);
                   _sleep(500);
                   keybd_event(VkKeyScan(Stream[i]),0,KEYEVENTF_KEYUP,0);
     
                   printf("\n_____________________", i);
                   printf("\n\n i : %d", i);
                   printf("\ncode lettre : %u  ", CodeLetter);
     
             }
     
         printf("\n\nTerminee");
         getchar();
    }
    Toujours la même chose, j'ai regardé l'exemple de la FAQ et je vois pas ce qui cloche.
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  7. #27
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Voilà sa fonctionne ...

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
    #include <wchar.h>
    #include <Winuser.h>
     
     
    using namespace std;
     
     
    int main (void)
    {
         char Stream[]   = "MyStream"                 ;
         int  StreamSize = sizeof(Stream)/sizeof(char);
     
         printf("\nTaille : %d", StreamSize);
     
         INPUT Key={0};
         KEYBDINPUT ki={0};
     
         HWND Handle = FindWindow("Notepad", NULL);
         SetForegroundWindow(Handle);
     
         _sleep(2000);
     
         int i=0;
         for ( i=0 ; i<(StreamSize-1) ; i++ )
             {
     
                   Key.type       = INPUT_KEYBOARD;
                   Key.ki.wVk = VkKeyScan(Stream[i]);
     
                   Key.ki.dwExtraInfo = 0;
                   SendInput(1,&Key,sizeof(Key));
                   Key.ki.dwExtraInfo = KEYEVENTF_KEYUP;
     
             }
     
         printf("\n\nTerminee");
         getchar();
    }

    EDIT : plus propre comme ça si y'en a qui cherche une réponse un jours, enfin je crois...

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define _WIN32_WINNT 0x0500
    #include <windows.h>
    #include <wchar.h>
    #include <Winuser.h>
     
    void UseSendInput( char *Stream, int StreamSize );
     
    using namespace std;
     
     
    int main (void)
    {
         char Stream[] = "MyStream"                 ;
         int  StreamSize = sizeof(Stream)/sizeof(char);
     
         HWND Handle = FindWindow("Notepad", NULL);
         SetForegroundWindow(Handle);
     
         _sleep(2000);
     
         UseSendInput( Stream, StreamSize );
     
    }
     
     
    void UseSendInput( char *Stream, int StreamSize )
    {
     
     
         INPUT Key={0};
         KEYBDINPUT ki={0};
     
         int i=0;
         for ( i=0 ; i<(StreamSize-1) ; i++ )
             {
     
                   Key.type       = INPUT_KEYBOARD;
                   Key.ki.wVk = VkKeyScan(Stream[i]);
     
                   Key.ki.dwExtraInfo = 0;
                   SendInput(1,&Key,sizeof(Key));
                   Key.ki.dwExtraInfo = KEYEVENTF_KEYUP;
     
             }
    }
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  8. #28
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Putin mais en fait je m'en bas les steaks de SendInput, pourquoi je me suis pris la tête avec cette daub ?, si j'ai choisi d'utiliser sendmessage c'est bien parce que je veux que ça simule les touches tout en me laissant la possibilité de faire autre chose sur le pc
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  9. #29
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    EDIT : plus propre comme ça si y'en a qui cherche une réponse un jours, enfin je crois...
    non, ce n'est pas plus propre.
    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
    #define _WIN32_WINNT 0x0500
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #include <tchar.h>
    #include <windows.h>
     
    static void SendInputString(TCHAR const * input)
    {
       INPUT key = {INPUT_KEYBOARD, {0, 0, 0, 0, KEYEVENTF_KEYUP}};
     
       while(*input != 0)
       {
          key.ki.wVk = VkKeyScan(*input);
          SendInput(1, &key, sizeof(key));
          input++;
       }
    }
     
    int _tmain(void)
    {
       TCHAR input[] = _T("MyStream");
       HWND  handle  = FindWindow(_T("Notepad"), NULL);
     
       if(handle != NULL)
       {
          SetForegroundWindow(handle);
          Sleep(200);
          SendInputString(input);
       }
     
       return 0;
    }
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Attention Nicolas, on ne fait pas de CloseHandle() sur un HWND.
    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.

  11. #31
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    ça ne m'intéresse pas sendinput en fait! c'est presque pareil que keyboard même si vous le prosvrivez et c'est relou à utiliser en plus.

    Faut que je fasse fonctionner sendmessage.
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  12. #32
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais comme dit dans le message vers lequel j'ai lié, ça ne marche pas correctement avec SendMessage() qui n'est pas fait pour ça.

    Un truc que je sais par expérience, c'est qu'on ne peut pas envoyer une majuscule avec ça. Eh oui, tes conneries, je les ai essayées aussi "dans ma jeunesse"...
    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.

  13. #33
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Attention Nicolas, on ne fait pas de CloseHandle() sur un HWND.
    autant pour moi, je ne code plus pour Windows depuis un bon moment, autrement, sais tu pourquoi il faut absolument faire une temporisation entre le SetForegroundWindow et le SendInput?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  14. #34
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Sa tombe bien les majuscules ne font pas partie dans ce dont j'ai besoin ! pas de caractère spéciaux non plus ! donc...A

    J'aimerais savoir comment faire pour simuler l'appuis de 'TAB' par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SendMessage(Handle, WM_KEYDOWN, VK_TAB,0);
    _sleep(100);
    SendMessage(Handle, WM_KEYUP  , VK_TAB,0);
    Si SendMessage n'est pas fait pour ça, connais-tu une autre fonction qui le serait ! Y'a plein de programme codée en cpp je suppose qui font ce genre de truck alors je comprends pas pourquoi j'y arriverais pas avec le cpp non plus !

    Je pige pas pourquoi ça ne marche pas !
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  15. #35
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Tu veux bien m'aider dans mes conneries ou je dois aller chercher de l'aide ailleur ?

    Sinon tu connais un livre, une newsgroup qui puisse m'aider s'il te plait ? car j'ai vraiment besoin de réussir cette fonction.

    Sinon tant pis et merci quand même.
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  16. #36
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    C'est bon j'ai trouvé la réponse tout de suite dans un newsgroup...

    @
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  17. #37
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par darkwall_37
    C'est bon j'ai trouvé la réponse tout de suite dans un newsgroup ...
    Tu peux la poster (la réponse, la solution) ?

  18. #38
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Oui désolé


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(Handle,WM_CHAR,VkKeyScan(Flux[i]),0);

    Cordialement
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [VB.Net] "Impossible de créer le handle de fenêtre"
    Par cedric_g dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/04/2006, 12h49
  2. Focus fenêtre + accès aux champs
    Par Pymm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/07/2005, 12h07
  3. comment changer le handle de fenêtre
    Par latisane dans le forum MFC
    Réponses: 21
    Dernier message: 20/01/2005, 18h42
  4. [Window] Handle de fenêtre
    Par el_diablos dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/07/2004, 14h12
  5. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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