CreateProcess

Résolu
genoudr Messages postés 8 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 17 octobre 2007 - 16 oct. 2007 à 15:54
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 oct. 2007 à 09:05
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 oct. 2007 à 19:16
ShellExecute devrait aller.

ciao...
BruNews, MVP VC++
3
genoudr Messages postés 8 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 17 octobre 2007
17 oct. 2007 à 09:49
Merci, c'est exactement se que je cherchais !
0
genoudr Messages postés 8 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 17 octobre 2007
17 oct. 2007 à 11:24
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 !
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
17 oct. 2007 à 14:41
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++ (@++)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
genoudr Messages postés 8 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 17 octobre 2007
17 oct. 2007 à 15:20
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...
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
17 oct. 2007 à 17:39
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++ (@++)
0
genoudr Messages postés 8 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 17 octobre 2007
17 oct. 2007 à 18:26
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 oct. 2007 à 00:58
ShellExecuteEx avec recup d'un processID
EnumWindows
PostMessage d'un WM_CLOSE

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

C++ (@++)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 oct. 2007 à 19:23
Plus rapide pour un TerminateProcess() à la sauvage ?

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

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

C++ (@++)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 oct. 2007 à 09:05
OUPS c'est un hprocess qu'on récupère.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous