Manipulations IE6 par le code C++

Manipulations IE6 par le code C++ - C++ - Programmation

Marsh Posté le 19-07-2007 à 15:54:27    

Bonjour, voilà mon code :
 
(qui permet d'ouvrir une fenetre internet à une adresse specifiee)
 

Code :
  1. LPSTR urlComplete = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE http://www.test.fr";
  2. LPSTR urlComplete2 = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE http://www.test2.fr";
  3. STARTUPINFO si = {sizeof(si)};
  4. si.dwFlags = STARTF_USESHOWWINDOW;
  5. si.wShowWindow = SW_SHOWNORMAL;
  6. if (&pi
  7.    && !(pi.hProcess))
  8. {
  9.  CreateProcess(0, urlComplete, 0, 0, 0, CREATE_SUSPENDED, 0, 0, &si, &pi);
  10.  ResumeThread(pi.hThread);
  11. }
  12. else
  13. {
  14.  //TerminateProcess(pi.hProcess,0);
  15.  UpdateResource(pi.hProcess, RT_RCDATA, 0, 0, urlComplete2, 0);
  16. }


 
Je cherche desesperement à mettre à jour ma fenetre IE avec l'adresse : urlComplete2
mais je ne trouve rien pour le faire, TerminateProcess fonctionne bien sur la bonne fenetre IE (ferme ma fenetre),
mais je ne sais pas me servir de UpdateResource et ne suis pas sur que ce ca permettre de rafraichir IE6 a la nouvelle adresse...
 
Please Help !

Reply

Marsh Posté le 19-07-2007 à 15:54:27   

Reply

Marsh Posté le 20-07-2007 à 10:37:27    

euh, tu te gourres sur toute la ligne là :
1) ton code n'est pas du C++ mais du C
2) CreateProcess() permet juste de créer et de lancer le processus IE, éventuellement avec une page d'accueil en argument, mais en aucun cas il ne te permet de communiquer avec IE. si tu veux communiquer avec IE, soit tu utilises le controle que IE expose (bon courage pour l'utiliser en C), soit tu utilises la librairie WinINet, faite pour ça : http://msdn2.microsoft.com/en-us/library/aa385331.aspx
3) UpdateResource ne sert pas du tout à rafraichir IE6, c'est juste pour mettre à jour les ressources contenues dans un exécutable (images, texte, etc...)

Reply

Marsh Posté le 21-07-2007 à 17:15:57    

1) je ne vois pas trop pourquoi ce que ce code serait plus C que C++ ... Tu prends VStudio, tu ouvres un projet MFC et tu mets ce code dans une méthode ... ca marche, non ?
 
2) Je ne vois pas pourquoi on ne pourais pas utiliser un ActiveX depuis du C : COM n'est pas reservé au C++, aucun problème en C.
 
3) WinINet ne sert pas à 'communiquer' avec IE. IE repose sur Wininet qui est la DLL de Windows comprenant les protocoles internet (HTTP, FTP ...).

Reply

Marsh Posté le 23-07-2007 à 13:33:12    

Ok merci,
 
Effectivement, mon prog est sous visual studio, je n'utilise pas les MFC, mais ca fonctionne
quand même.
 
C'est du code qui fait parti d'une de mes methode (appelée pour l'ouverture de IE à une adresse
qui correspond à une autre appli intranet) ca fonctionne avec les bons #include (windows.h)
 
Je vais chercher du côté de l'ActiveX expose par IE alors !
 
Merci de votre aide

Reply

Marsh Posté le 23-07-2007 à 14:27:34    

Bon,
 
en fait, j'ai cherché du côté de la librairie WinInet qui effectivement,
et j'ai trouvé quelque chose dans MSDN sur l'utilisation de HINTERNET Handles
 
Ceci dit, j'ai intégré ce qu'il y a dans MSDN à mon code :
 

Code :
  1. HINTERNET hRootHandle, hOpenUrlHandle;
  2. hRootHandle = InternetOpen(
  3.                            TEXT("Example" ),
  4.                            INTERNET_OPEN_TYPE_DIRECT,
  5.                            NULL,
  6.                            NULL,
  7.                            0);
  8. hOpenUrlHandle = InternetOpenUrl(
  9.                               hRootHandle,
  10.                               TEXT("http://www.server.com/default.htm" ),
  11.                               NULL,
  12.                               0,
  13.                               INTERNET_FLAG_RAW_DATA,
  14.                               0);
  15. // Close the handle created by InternetOpenUrl, so that the
  16. // InternetOpen handle can be closed.
  17. InternetCloseHandle(hOpenUrlHandle);
  18. // Close the handle created by InternetOpen.
  19. InternetCloseHandle(hRootHandle);


 
 et ca compile, mais au moment de faire le link,
il n'arrive pas à résoudre les liens externes pour
 
InternetCloseHandle
InternetOpenA
InternetOpenUrlA
 
Je n'arrive pas à comprendre pourquoi, pourtant j'ai bien fait l'include du Wininet.h
 
 

Reply

Marsh Posté le 23-07-2007 à 17:30:11    

Oups,
 
ca ne fonctionne pas, j'ai l'impression que WinInet ne fonctionne que sous Windows CE...
 
C'est rageant car ca avait l'air de bien faire ce que je souhaitais.

Reply

Marsh Posté le 23-07-2007 à 21:45:14    

Pourquoi ne pas fermer le processus de ton url 1 et en relancer un autre avec l'url 2 en argument ?

Reply

Marsh Posté le 24-07-2007 à 00:06:38    

katopex a écrit :


il n'arrive pas à résoudre les liens externes pour
 
InternetCloseHandle
InternetOpenA
InternetOpenUrlA
 
Je n'arrive pas à comprendre pourquoi, pourtant j'ai bien fait l'include du Wininet.h
 
 


inclure le .h ne suffit pas, il faut aussi rajouter wininet.lib dans la liste des libs à linker

Reply

Marsh Posté le 24-07-2007 à 00:11:32    

nmeuret a écrit :

1) je ne vois pas trop pourquoi ce que ce code serait plus C que C++ ... Tu prends VStudio, tu ouvres un projet MFC et tu mets ce code dans une méthode ... ca marche, non ?
 
2) Je ne vois pas pourquoi on ne pourais pas utiliser un ActiveX depuis du C : COM n'est pas reservé au C++, aucun problème en C.
 
3) WinINet ne sert pas à 'communiquer' avec IE. IE repose sur Wininet qui est la DLL de Windows comprenant les protocoles internet (HTTP, FTP ...).


1) oui ça marche, mais un projet MFC utilise les ... MFC, donc des classes qui encapsulent Win32 (et donc du C++). on utilise Win32 en C, et les MFC en C++
2) j'ai pas dit que ça marchait pas, mais que c'était un poil plus chiant à utiliser en C qu'en C++ ou autre langage objet
3) là encore, je n'ai pas dit que Wininet servait à communiquer avec IE, mais à gérer les échanges avec le protocole HTTP, entre autres, et donc permettait de communiquer avec le web

Reply

Marsh Posté le 24-07-2007 à 09:06:05    

ok pour la lib wininet.lib j'avais fini par comprendre qu'il fallait la rajouter,
 
mais sinon, mon code ne fait rien, c'est pour ca que je pense que, comme  
c'est précisé dans MSDN,
il ne doit fonctionner que sous Windows CE.
 
Va falloir que je cherche encore un peu...
 
Merci bcp de votre interet, et si vous avez encore des idées...

Reply

Marsh Posté le 24-07-2007 à 09:06:05   

Reply

Marsh Posté le 25-07-2007 à 16:26:38    

Je ne comprends toujours pas cette histoire de WinInet ...
 
Dans le code que tu donnes, tu vas ouvrir une session HTTP, et c'est tout. Rien à voir avec IE.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed