Pb shellexecuteex

Signaler
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
voici un bout de mon code :

#include <windows.h>
#include <stdio.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   SHELLEXECUTEINFO info = {sizeof(info)};
   info.lpVerb = "open";
   info.lpFile = "iexplore";
   info.lpParameters = "-nohome";
   info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_DDEWAIT;
   info.nShow = SW_HIDE;

   if (!ShellExecuteEx(&info))
   {
      MessageBox(0,"Erreur lors de l'execution de IE","info",0);
      DWORD err = GetLastError();
      char texte[200];
      sprintf(texte,"valeur : %d\n",err);
      MessageBox(0,texte,"info",0);
      return 0;
   }
   HANDLE Proc = info.hProcess;

...

   CloseHandle(Proc);
   return 0;
}


le problème est que de manière assez aléatoire, shellexecuteex ne marche pas. GetLastError renvoie alors 5, cad ERROR_ACCESS_DENIED.

le truc c'est que je vois pas du tout pourquoi !! (aléatoire = en général ca marche, desfois non... ca a pas l'air de dépendre si une fenetre de IE est déja ouverte ou non)

quelqu'un a une idée ?!?

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
hProcess:
Handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if a document to be launched is a URL and an instance of Microsoft Internet Explorer is already running, it will display the document. No new process is launched, and hProcess will be NULL.

EN RESUME: faut enlever SEE_MASK_NOCLOSEPROCESS.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
non je pense pas, car la, le verbe c'est "open" sur le programme, pas sur un document. et j'ai besoin de l'handle du process lancé donc... ('For example, if a document to be launched is a URL' -> j'ouvre pas une URL la, mais iexplore)
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
ok je pense que c'est par ce que j'avais pas 'fait' : info.cbSize = sizeof(SHELLEXECUTEINFO);

enfin j'ai l'impression ;)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Ben oui en effet va impec, je viens de lancer 20 fois de suite et pas une fois hprocces null, et meme en mettant une adresse valide en param.
Bizzare...

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
cbSize etait mis exact par ta 1ere ligne:
SHELLEXECUTEINFO info = {sizeof(info)};

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
"cbSize etait mis exact par ta 1ere ligne: SHELLEXECUTEINFO info = {sizeof(info)};"
peut etre mais il est possible que qd ca marchait pas je n'avais pas mis ca mais :
SHELLEXECUTEINFO info;// = {sizeof(info)};
ZeroMemory(&info,sizeof(SHELLEXECUTEINFO));

est ce que 'SHELLEXECUTEINFO info = {sizeof(info)};' mets a zero les autres champs de info, ou ca se contente d'initialiser le premier champ a sizeof(info) ?

en tout cas je ne reussis plus a avoir d'erreurs... ca signifie presque que le prob est reglé ;)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Une liste d'initialisation ou une partie seulement des membres est specifiee place les autres a 0 donc doit aller bon.

ciao...
BruNews, Admin CS, MVP Visual C++