CreateProcess

Résolu
Signaler
Messages postés
8
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
17 octobre 2007
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,

J'aimerais me connecter, à l'aide d'Internet Explorer, sur plusieurs URL sans devoir recréer de processus IE...
Je me suis basé sur la source de BruNews (disponible ici).

Je cherche une méthode permettant de récupérer mon processus, de modifier son URL et de l'exécuter à nouveau (me connecter sur la nouvelle adresse), afin de ne pas recréer de processus IE pour chaque nouvelles connexions.

J'ai chercher du côté de l'OpenProcess et de l'OpenThread sur le site MSDN, mais je n'arrive à rien...

D'avance merci pour votre aide !

12 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
ShellExecute devrait aller.

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
17 octobre 2007

Merci, c'est exactement se que je cherchais !
Messages postés
8
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
17 octobre 2007

J'ai encore un petit problème :

En utilisant la fonction ShellExecute, je me rend compte que, comme pour le CreateProcess, un nouveau processus est à chaque fois recréé.

J'ai vu sur MSDN, que la fonction retourne un HINSTANCE...
Je le caste en HANDLE afin de pouvoir le supprimer après son exécution, mais l'erreur First-chance exception at 0x7c91eb74 in Monprog.exe: 0xC0000008: An invalid handle was specified est à chaque fois levée !

Voici mon code actuel :



...
handleIE = ( HANDLE )ShellExecute( hwnd, "open", "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE", req, NULL, SW_HIDE );
ResumeThread( handleIE );
Sleep( 4000 ); // Laisse 4[s] à IE pour son execution
CloseHandle( handleIE );
...







Je n'ai pas envie de parcourir tous les processus pour le fermer d'après son nom car, dans le cas où j'utiliserai aussi IE, j'ai peur qu'il ferme ma fenêtre plutôt que le processus créé par la fonction ShellExecute...





Comment corriger mon erreur ? J'aimerais éviter de devoir créer puis fermer un processus pour chaque URL visitée afin d'optimiser au maximum mon code...

Merci d'avance pour votre réponse !
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
ShellExecute ne retourne aucun HANDLE. C'est simplement un code d'erreur qu'il fait passer pour un HINSTANCE pour question de compatibilité je crois.

C++ (@++)
Messages postés
8
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
17 octobre 2007

Ok merci pour l'info !

Malheureusement je n'arrive pas à consulter la fonction ShellExecute sur la MSDN pour le moment, apparement le site à un problème (uniquement avec cette fonction )...

Comment je peux faire pour fermer ce processus ?
Je suis obligé de passer par CreateProcess ?

Mon but serai d'ouvrir un seul processus IE, d'aller sur une ou plusieurs URL, puis de le fermer...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Il y a plusieurs autre fonctions auquelles il est impossible d'acceder à leur documentation.

Si tu veux avoir un HANDLE, je crois que tu n'aura pas d'autre choix que d'utiliser CreateProcess.

C++ (@++)
Messages postés
8
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
17 octobre 2007

Merci pour ta réponse !

Ok alors je vais retourner du côté des CreateProcess...

Tu sais s'il est possible, une fois le processus créé, de reprendre la main juste pour lui donner une autre URL ?

Comme ça je peux le créer dans mon constructeur, le tuer dans mon destructeur et l'utiliser sans autre à l'intérieur de mes méthodes...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
ShellExecuteEx avec recup d'un processID
EnumWindows
PostMessage d'un WM_CLOSE

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Pas plus rapide d'utiliser CreateProcess et de récupérer le handle par la structure PROCESS_INFORMATION ?

C++ (@++)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Plus rapide pour un TerminateProcess() à la sauvage ?

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Non erreur de frappe. Je voulais parlez du membre dwProcessId.

Comment fais-tu pour récupérer un process id avec ShellExecuteEx ?

C++ (@++)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
OUPS c'est un hprocess qu'on récupère.

ciao...
BruNews, MVP VC++