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++Builder Discussion :

probleme de recupération de handle


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut probleme de recupération de handle
    Bonjour,

    Je travaille sur BCB6 sous XP.

    Dans mon appli je voudrai lancer une page WEB. puis pouvoir la fermer.
    le handle de process que je recupére aprés un shellexecuteex est NULL.
    je ne comprend pas pourquoi.

    Code ci joint :

    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
    SHELLEXECUTEINFO exe;
     
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    exe.cbSize = sizeof(exe);
    exe.fMask = SEE_MASK_NOCLOSEPROCESS;
    exe.hwnd = NULL;
    exe.lpVerb = "open";
    exe.lpFile = "http://www.fipradio.fr/player";
    exe.lpParameters = NULL;
    exe.lpDirectory = NULL;
    exe.nShow = SW_SHOW;
    exe.hInstApp = NULL;
    ShellExecuteEx(&exe);
    }
    //-------------------------------------------------------------------------
     
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      if(exe.hProcess)
      { TerminateProcess(exe.hProcess,NULL);
        CloseHandle(exe.hProcess);
      }
    }
    Si quelqu'un peu m'expliquer pourquoi

    Cordialement

    EricNo

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exe.lpFile = "iexplore http://www.fipradio.fr/player";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exe.lpFile = "firefox http://www.fipradio.fr/player";
    il est possible qu'en exploitant juste l'association shell cela ne fournisse pas de handle
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    Intéressant ton bug, EricNO. Peut-être es-tu tombé là-dessus:

    http://blogs.msdn.com/b/oldnewthing/...05/590749.aspx

    J'ai bien aimé ce passage:

    "First, as we noted, the HINSTANCE that you get from the ShellExecute function is useless. You have to use the ShellExecuteEx function and set the SEE_MASK_NOCLOSEPROCESS flag in the SHELLEXECUTEINFO structure, at which point a handle to process is returned in the hProcess member, But that still doesn't work."

    Et la conclusion:

    "There is no uniform way to detect that a document has been closed. Each program handles it differently. "

    Hâte de voir la solution*!

    * après coup, j'en voie une (EnumProcesses), je vais tester ça.

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut EricNO
    A l'aide de Spy++ j'ai verifie le Handle renvoye par la fenetre qui s'ouvre
    Je recupere le Handle de cette facon
    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
     
    exe.cbSize = sizeof(exe);
    exe.fMask = SEE_MASK_NOCLOSEPROCESS;
    exe.hwnd = NULL;
    exe.lpVerb = "open";
    exe.lpFile = "<a href="http://www.fipradio.fr/player" target="_blank">http://www.fipradio.fr/player</a>";
    exe.lpParameters = NULL;
    exe.lpDirectory = NULL;
    exe.nShow = SW_SHOW;
    exe.hInstApp = NULL;
    ShellExecuteEx(&exe);
     
     
    Sleep(1000);
    hwnd = FindWindow("IEFrame", "fip - direct - Mercredi 21 Mars 11:54:15 - Windows Internet Explorer");
    hwnd = FindWindow("IEFrame", NULL);
    j'ai mis une tempo et repete deux fois FindWindow sinon on ne recupere pas le bon Handle, ce n'est pas tres propre, mais c'est peut etre un debut de piste
    si tu utilise ce code il faudra reconstruire la date dans le code "Mercredi 21 Mars 11:54:15" avant appel

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut un peu d'avancé
    Avec le code suivant j'arrive à récuperer le handle du process à condition qu'une fenetre IE ne soit pas déja ouverte.

    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
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    exe.cbSize = sizeof(exe);
    exe.fMask = SEE_MASK_NOCLOSEPROCESS;
    exe.hwnd = NULL;
    exe.lpVerb = "open";
    exe.lpFile = "iexplore";
    exe.lpParameters = "http://www.fipradio.fr/player";
    exe.lpDirectory = NULL;
    exe.nShow = SW_SHOW;
    exe.hInstApp = NULL;
    ShellExecuteEx(&exe);
    }
    //-------------------------------------------------------------------------
     
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      if(exe.hProcess)
      { TerminateProcess(exe.hProcess,NULL);
        CloseHandle(exe.hProcess);
      }
    }
    Au lieu de travailler sur le handle du process, n'y aurait il pas après un shellexecueex une fonction pour recuperer l'ID du process et une autre fonction pour tuer le process avec son ID ?

    Merci par avance

    EricNO

Discussions similaires

  1. [debutant]probleme de recupération de données saisies dans une JDialog
    Par melodie53 dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 07/08/2006, 16h32
  2. [Dates] Probleme de recupération de paramètre ...
    Par acado dans le forum Langage
    Réponses: 4
    Dernier message: 05/04/2006, 10h37
  3. Réponses: 19
    Dernier message: 28/06/2005, 14h16
  4. Réponses: 2
    Dernier message: 14/03/2004, 22h04
  5. TThread: probleme de recuperation du Handle
    Par code34 dans le forum Langage
    Réponses: 8
    Dernier message: 07/09/2003, 03h04

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