Pb shellexecuteex

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 4 juil. 2004 à 01:11
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 4 juil. 2004 à 13:20
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2004 à 09:03
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++
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
4 juil. 2004 à 12:08
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)
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
4 juil. 2004 à 12:40
ok je pense que c'est par ce que j'avais pas 'fait' : info.cbSize = sizeof(SHELLEXECUTEINFO);

enfin j'ai l'impression ;)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2004 à 12:47
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++
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2004 à 12:50
cbSize etait mis exact par ta 1ere ligne:
SHELLEXECUTEINFO info = {sizeof(info)};

ciao...
BruNews, Admin CS, MVP Visual C++
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
4 juil. 2004 à 13:14
"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é ;)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2004 à 13:20
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++
0
Rejoignez-nous