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++/CLI Discussion :

ShellExecute, position de la fenêtre


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut ShellExecute, position de la fenêtre
    Bonjour,

    donc voilà je suis plus ou moins débutant en C++, et là il me faut lancer une fenêtre depuis mon appli

    Pour se faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(monHandle, TEXT("explore"), "path de mon dossier", NULL, NULL, SW_SHOW);
    Jusque là tout va bien, c'est joli tout plein !

    mais ça ouvre un explorateur windows, et au dernier endroit fermé !
    (c'est àdire vous ouvrez l'explorer à la main et vous le fermez en haut à gauche de vos/votre écran(s), si je fais le shellExe => ma fenêtre s'ouvrira là)

    J'aimerais positionner ma fenêtre ouverte à un endroit précis (devant ma fenêtre principal de mon appli et centré donc)

    j'ai tenté les setWindowPos(), avec du FindWindow() mais du gros soucis puisque ma fenêtre n'est pas trouvé par le find....

    J'ai essayé avec une calculatrice, et là elle n'est positionné que si je appuis une 2eme fois sur le bouton

    si vous me comprenez ou non

    je peux tenter d'expliquer autrement ^^

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Salut,

    bizarre que Find ne trouve rien, tu cherches comment ?

    C'est bourrin, mais tu peux aussi tenter EnumWindows et checker celle qui a le bon titre, qui doit être : "path de mon dossier".

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci de la réponse, j'ai fini par trouver mon bonheur
    Il me fallait juste un poil de repos pour reprendre calmement

    En gros ma fenêtre, pour la trouver ce n'était pas "c:\doc\coucou\toto"
    mais le dernier dossier c'est à dire ici "toto"

    donc un petit parse pour trouver la valeur de ce nom de dossier en gros ça donne un truc du genre pour mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ShellExecute(monHandleMere, TEXT("explore"), nomDeDossier, NULL, NULL, SW_SHOW);
     
    //je fait une pause sinon il va trop vite pour laisser mon handle à NULL
    //je rendrais plus propre avec une boucle, limite de temps, etc ... (brouillon là)
    Sleep(100);
     
    // je récupère mon handle de fenêtre explorateur WinWin
    monHandleFille = FindWindow(NULL,nomDeDossier) ;
     
    //je vais chercher mon RECT de la fenêtre pour ses coordonées dans rectFenetreFille
    GetWindowRect(monHandleFille , &rectFenetreFille);

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    La véritable source du problème était Windows (pour changer )
    En fait dans les options d'affichages, tu peux soit avoir le path, soit le dossier ouvert .....
    Et bien évidemment maintenant sur Seven, tu n'as pas le nom sur la fenêtre directement (contrairement à XP je crois )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monHandleFille = FindWindow(NULL,monPath)
    monHandleFille = FindWindow(NULL,nomDeDossier)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Vous pensez vraiment que vous utilisez la bonne méthode avec votre "ShellExecute + Sleep + FindWindow" ?

    CreateProcess
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    WaitForInputIdle
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    GetProcessId
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    EnumWindows
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    La source du problème (du "Find" qui ne fonctionnait pas) était bien Windows, ça ne veut pas dire qu'ils bossent comme des nuls... Mais que la solution au problème se situait sur une config Windows.... (d'où le post 1 mois après pour expliquer le non fonctionnement de ma fonction. Pour moi sur Windows 7 le nom était le PATH vu que rien n'était affiché en haut de la fenêtre)

    Citation Envoyé par bacelar Voir le message
    Vous pensez vraiment que vous utilisez la bonne méthode avec votre "ShellExecute + Sleep + FindWindow" ?
    Non Justement, c'était des tests non concluant, et bourrin ! Donc j'ai changé tout ça
    J'ai juste posté la réponse pour une future recherche de quelqu'un qui en aurait besoin. J'ai eut du mal à comprendre le problème, j'aime trouver une solution.

    Citation Envoyé par bacelar Voir le message
    CreateProcess / WaitForInputIdle / GetProcessId / EnumWindows
    J'ai essayé tout ça et j'ai trouvé mon bonheur depuis

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pour moi sur Windows 7 le nom était le PATH vu que rien n'était affiché en haut de la fenêtre
    Bin, faudrait penser à lire la documentation, quand ça marche pas comme VOUS pensez.

    J'ai essayé tout ça et j'ai trouvé mon bonheur depuis
    partage.

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Bin, faudrait penser à lire la documentation, quand ça marche pas comme VOUS pensez.
    Ce que j'ai fait, et testé sur deux machines qui m'ont fait comprendre le problème. La doc n'a servis à rien lisez FindWindow : "the window name (the window's title)." j'en voit aucun en haut de la fenêtre sur 7

    Citation Envoyé par bacelar Voir le message
    partage.
    tout est sur internet
    => CreateProcess

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Dans le lien que tu as toi même donné :
    Remarks

    If the lpWindowName parameter is not NULL, FindWindow calls the GetWindowText function to retrieve the window name for comparison. For a description of a potential problem that can arise, see the Remarks for GetWindowText.

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

Discussions similaires

  1. Position d'une fenêtre sur l'écran (left, top)
    Par Daimonji dans le forum MFC
    Réponses: 9
    Dernier message: 18/12/2005, 14h57
  2. ShellExecute , Internet Explorer et fenêtre active
    Par jakouz dans le forum Web & réseau
    Réponses: 6
    Dernier message: 27/10/2005, 15h50
  3. Réponses: 4
    Dernier message: 22/08/2005, 19h19
  4. [ShellExecute] ouvrir une nouvelle fenêtre ie
    Par sony351 dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/11/2004, 18h39
  5. Récuperer la taille & position d'une fenêtre
    Par TheDarkLewis dans le forum Windows
    Réponses: 3
    Dernier message: 20/09/2004, 22h15

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