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 :

Modification d'une fonction "ShellExit"


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut Modification d'une fonction "ShellExit"
    Bonjour,
    j'ai trouv� une fonction assez utile, qui permet de terminer un processus. La voici :
    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
    bool ShellExit(char *ExeName) 
    { 
        //Recherche du processus: 
        HANDLE hSnapShot; 
        PROCESSENTRY32 uProcess; 
        bool r; 
        short PID = 0; //variable qui va stocker l'ID du processus de l'application que l'on désire fermer. 
     
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); 
        uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32); 
     
        r = Process32First(hSnapShot, &uProcess); 
        do // Cette boucle énnumère tout les processus 
        { 
            if ( strstr(uProcess.szExeFile, ExeName) )//on cherche le nom de notre application dans le chemin d'accès de l'éxécutable du processus. 
                PID = (short) uProcess.th32ProcessID; 
     
            r = Process32Next(hSnapShot, &uProcess); 
        } while ( r ); 
     
        CloseHandle(hSnapShot); 
     
        if ( PID == 0) 
            return false; 
     
        //Fermeture du processus: 
        HANDLE hTemp; 
     
        hTemp = OpenProcess(PROCESS_ALL_ACCESS, false, (DWORD) PID); 
        TerminateProcess(hTemp,0); 
     
        return true; 
    //Attention: le nom de l'éxécutable est écrit ou tout en majuscule, ou comme il est orthografier sur le disque dur. Il faut parfois faire plusieurs text pour un seul nom d'executable. 
    }
    Je voudrais maintenant modifier cette fonction pour que, au lieu de terminer un processus, elle en lance un nouveau. Je pense que se sont les derni�res lignes qu'il faut changer, mais je n'y arrive pas.
    Pouvez-vous m'aider ?
    Merci.

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Beurk! Cette fonction est horrible (TerminateProcess etc.).
    (Encore que, j'ai fait un truc � la fois plus propre et plus crade: injecter dans le processus un thread qui appelle ExitProcess())

    pour que, au lieu de terminer un processus, elle en lance un nouveau
    Que veux-tu dire par l�? Lancer un nouveau processus � partir du m�me ex�cutable ?
    Bien, si tu as d�j� le nom de l'exe, tu n'as pas du tout besoin de cette fonction-l� (sauf si c'est pour r�cup�rer le chemin complet): Tu appelles CreateProcess() directement...
    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.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut
    Bah en gros je veux faire une fonction qui prend en param�tre un nom d'executable. Ensuite la fonction lance l'executable...et c'est tout.
    Tu as une id�e de comment faire ca ?

  4. #4
    Membre �m�rite Avatar de MatRem
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    750
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 750
    Par d�faut
    C'est de la programmation windows �a ?

    En fait on voit souvent ce genre de post avec de la programmation syst�me qui ne m'a pas l'air portable...

    Je me pose une question est qu'il est possible d'utiliser les Inter Process Communication Posix sur les syst�mes windows?

  5. #5
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Tu trouveras du code pour faire �a dans les FAQs C et VC++.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut
    J'ai essay� la fonction std::system() mais elle me fait appara�tre une console alors que je programme avec l'API Windows. J'ai essay� de cacher la console avec un
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ShowWindow(GetConsoleWindow(),SW_HIDE);
    mais ca ne marche pas. Une id�e ?

  7. #7
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Utilise CreateProcess (c'est indiqu� dans la FAQ non ?).

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut
    CreateProcess lance une appli, c'est vrai, mais il faut avoir le chamin du prog. Or je veux pouvoir lancer une application en ayant juste son nom. J'ai essay� avec ShellExecute, mais je n'arrive pas � l'utiliser.

  9. #9
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Comment voudrais-tu lancer un ex�cutable sans savoir o� il se trouve ?

    Regard� �a par exemple :

    http://c.developpez.com/faq/vc/?page...ead#ProcessNew
    http://c.developpez.com/faq/vc/?page=Registry#RunWord

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par d�faut
    On peut terminer un processus sans cona�tre son adresse, alors pourquoi pas pouvoir le lancer ?
    Merci pour tes deux liens, mais je suis d�j� all� voir. Je n'ai pas r�ussi � utiliser la fonction ShellExecute, la seule qui ne n�cessite pas d'adresse. Ca plante � la ligne CString. Bizar comme type de variable. J'ai fais une recherche sur la msdn pour avoir plus d'info, mais m�me avec les directives et les libs, ca marche pas.

Discussions similaires

  1. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    R�ponses: 9
    Dernier message: 01/08/2007, 15h07
  2. R�ponses: 13
    Dernier message: 11/12/2006, 14h44
  3. Aide sur modification d' une fonction.
    Par superadnan3 dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 12/01/2006, 17h29

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