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

MFC Discussion :

Visual C++ v6 + MFC. Réalisation d'un enchaînement de tâches


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut Visual C++ v6 + MFC. Réalisation d'un enchaînement de tâches
    Bonjour,
    Je ne sais pas si je suis dans le bon forum...

    Je voudrais réaliser avec VS6 + MFC (éventuellement) une fonction qui :
    1- Lance un programme Windows en passant un nom de fichier en paramètre
    2 - Ferme une boite de dialogue BDlg1 muni d'un bouton OK, dont je connais le titre, qui s'est ouverte automatiquement dans la fenêtre principale.
    3- Simule le clic sur une ligne (dont je connais également le libellé et le rang) du menu principal.
    4- Ferme une boite de dialogue, dont je connais le nom, qui s'est ouverte
    automatiquement dans la fenêtre principale
    5- Ferme le programme windows qui vient d'être ouvert.

    Je pense que c'est possible mais je ne me souviens plus comment .

    Merci de bien vouloir me le rappeler.
    Robert

    J'ai progressé un petit peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	WinExec ("C:\\Program Files\\PRGME.exe Nom Fic",SW_SHOW);
    	CWnd* pDlg1=FindWindow(NULL,"Libellé BDlg1");
    	CWnd* pWP=pDlg1->GetParent();
     
                 CMenu* pMenu=pWP->GetMenu();
    	CMenu* pMExport=pMenu->GetSubMenu(5);
                 pDlg1->GetDlgItem(IDOK)->PostMessage(WM_LBUTTONDOWN,' ');
                 pDlg1->GetDlgItem(IDOK)->PostMessage(WM_LBUTTONUP,' ');
                 UINT ID=pMenu->GetMenuItemID(5);
                 // Lancer exécution fonction Item 5   Comment?
                 //.....
                 //...
                 pWP->SendMessage(WM_CLOSE,NULL);

    Avec ces lignes je peux ouvrir l'appli, trouver le Handle de la première BDlg qui s'ouvre et celui de la Fenêtre principale.
    Trouver le Handle du Menu Fichier de la fenêtre principale, trouver le Handle de la ligne que je voudrais exécuter et l'ID du MenuItem.

    Mais je ne sais toujours pas comment exécuter la fonction lancée par l' item 5( SendMessage ? si oui lequel ?)

    Pouvez-vous m'aider ?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Pour simuler un menu par l'envoi de message, il s'agit d'un SendMessage(Hwnd, WM_COMMAND,id,0) et GetMenuItemID(HMENU,int Pos) pour retrouver l'Id à partir de la position.

    Cependant, pourquoi ne pas utiliser des logiciels de type AutoIt ?

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    A quoi sont censées servir ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pDlg1->GetDlgItem(IDOK)->PostMessage(WM_LBUTTONDOWN,' ');
    pDlg1->GetDlgItem(IDOK)->PostMessage(WM_LBUTTONUP,' ');

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut
    Merci pour vos réponses mais je n'arrive pas à faire fonctionner les SendMessage pour activer un choix du menu principal.
    Alors j'ai créé une trace qui fait apparaître une anomalie. Je dois faire une erreur en rapport avec le pointeur du menu principal mais je ne vois pas laquelle. Au débugage il paraît valide.

    Les deux SendMessage sur lesquels vous me questionnez sont fait pour fermer la boîte de dialogue d'accueil qui s'ouvre dans la fenêtre principale. Ils marchent.

    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
    WinExec ("C:\\Program Files\\PRGME.exe Nom Fic",SW_SHOW);
     
    //La BDlg1 "Libellé BDlg1" s'ouvre dans la fenêtre principale de PRGME
    CWnd* pDlg1=FindWindow(NULL,"Libellé BDlg1");
    CWnd* pWP=pDlg1->GetParent();
    CMenu* pMenu=pWP->GetMenu();
     
    //Travail sur le menu principal de PRGME
    CString str;
    pMenu->GetMenuString(pMenu->GetMenuItemID(0),str,MF_BYPOSITION);  
    //Anomalie Trace: str vide   
    pWP->MessageBox(str.GetBuffer(50),"",MB_OK);
     
    //Fermer la BDlg1...ça marche
    pDlg1->GetDlgItem(IDOK)->PostMessage(WM_LBUTTONDOWN,' ');
    pDlg1->GetDlgItem(IDOK)->PostMessage(WM_LBUTTONUP,' ');
     
    //UINT ID=pMenu->GetMenuItemID(5);
    // SenMessage(WM_COMMAND,ID,0);
    //.....
    //...
     
    //Fermer l'appli lancée par WinExec. OK
    pWP->SendMessage(WM_CLOSE,NULL);

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par rob24 Voir le message
    Les deux SendMessage sur lesquels vous me questionnez sont fait pour fermer la boîte de dialogue d'accueil qui s'ouvre dans la fenêtre principale. Ils marchent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDlg1->SendMessage(WM_COMMAND,IDOK);
    Devrait marcher et me semble plus lisible.

    Citation Envoyé par rob24 Voir le message
    Merci pour vos réponses mais je n'arrive pas à faire fonctionner les SendMessage pour activer un choix du menu principal.
    Alors j'ai créé une trace qui fait apparaître une anomalie. Je dois faire une erreur en rapport avec le pointeur du menu principal mais je ne vois pas laquelle. Au débugage il paraît valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CString str;
    pMenu->GetMenuString(pMenu->GetMenuItemID(0),str,MF_BYCOMMAND);  
    // ou
    pMenu->GetMenuString(0,str,MF_BYPOSITION);
    Il faut choisir mais pas mixer

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut
    Problèmes résolus grâce à vos réponses . Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/03/2006, 20h34
  2. visual c++ sans mfc ...
    Par fox1976 dans le forum MFC
    Réponses: 1
    Dernier message: 08/01/2006, 06h04
  3. Visual .NET et MFC 71
    Par romeo9423 dans le forum MFC
    Réponses: 5
    Dernier message: 13/06/2005, 11h02
  4. [MFC] Réaliser l'affichage d'un oscilloscope
    Par Racailloux dans le forum MFC
    Réponses: 7
    Dernier message: 04/03/2005, 00h52
  5. Réponses: 3
    Dernier message: 24/02/2004, 15h09

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