begin process at 2012 02 10 07:43:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > NAVIGATEUR WEB (API)

NAVIGATEUR WEB (API)


 Information sur la source

Note :
9,09 / 10 - par 11 personnes
9,09 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :02/02/2005 Date de mise à jour :02/02/2005 17:49:59 Vu / téléchargé :11 735 / 1 991

Auteur : racpp

Ecrire un message privé
Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Suite à mon précédent code source (Conteneur Activex), voici un navigateur web utilisant le même Activex (WebBrowser), la même interface (IWebBrowser2) avec, en plus, la gestion des événements grâce à l'interface DWebBrowserEvents2. L'interception des événements est assurée par une petite classe (contenue dans evenem.h) exposant l'interface IDispatch et surtout la méthode Invoke. Cette dernière est appelée par notre instance de l'objet WebBrowser chaque fois qu'un événement survient, comme le début ou la fin de navigation , du téléchargement etc...Le constructeur de cette classe prend, comme seul paramètre, le HWND de notre fenêtre principale. Ainsi, tous les événements seront envoyés puis traités dans la procédure de notre fenêtre sous forme de messages.
Comme vous le voyez, la gestion des événements d'un objet Activex, COM ou OLE n'est pas trop compliquée.
Pour empêcher le lancement d'Internet Explorer, toutes les fenêtres popup, désirées ou non, seront bloquées. Le but de cette limitation est de ne pas compliquer inutilement ce code. A vous de le perfectionner comme vous voulez.
Code compilé sous Visual C/C++ 6 et testé sans problème sur Windows 98, 2000 et XP.




 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

02 février 2005 17:49:59 :

 Sources du même auteur

Source avec Zip Source avec une capture SOUS-CLASSEMENT DE FENÊTRE D'UN AUTRE PROCESS PAR INJECTION ...
Source avec Zip Source avec une capture FENÊTRE FLOTTANTE SANS FOCUS (WIN32 API)
Source avec Zip Source avec une capture SERVICE WINDOWS DANS UNE DLL LANCÉ PAR SVCHOST.EXE
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI...

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

Commentaires et avis

Commentaire de Arnaud16022 le 02/02/2005 18:13:52

si je comprends bien, tu crées la fenetre et gere les events, et la lib fait le reste?

Commentaire de Urgo le 02/02/2005 18:46:16

Y'a un gros plantage de ton prog sur certains sites.. je sais pas si tu l'as remarqué?

Commentaire de racpp le 02/02/2005 18:51:29 administrateur CS

Oui, mais plutot la classe et non la lib. Après avoir obtenu un pointeur sur l'interface DWebBrowserEvents2, on crée une instance de notre classe puis on commence l'interception des événements en appelant la méthode Advise()  de l'interface DWebBrowserEvents2. Cette méthode prend en paramètre le pointeur de notre instance de classe. Cette dernière capte alors tous les événements  et les transmet à la procédure de notre fenêtre. C'est  dans la méthode Invoke que tout se passe. Regarder dans "evenem.h".

Commentaire de racpp le 02/02/2005 18:55:55 administrateur CS

Urgo > tu peux me donner les URLs de ces sites? J'avais fait des tests sur des sites trop chargés, sans rien remarquer.

Commentaire de Urgo le 03/02/2005 18:39:50

Bizarre, cela ne me le fait plus aujourd'hui sur les mêmes sites...
Par contre il plante lorsqu'on clique sur certains liens (genre fenêtre popup) mais ça c'est normal... me trompe-je?

Commentaire de racpp le 03/02/2005 23:48:20 administrateur CS

Urgo > Oui c'est normal. Dans la présentation de ce code source j'ai précisé  que toutes les fenêtres popup (désirées ou non) seront bloquées pour éviter le lancement d'Internet Explorer et ne pas compliquer le code.  Pour bloquer une popup, on intercepte le message DISPID_NEWWINDOW2. Malheureusement ce dernier ne fournit pas l'URL du site bloqué. Je ne comprends pas pourquoi Microsoft l'a enlevé car dans la précédente version (IWebBrowser), le message DISPID_NEWWINDOW fournissait  cet URL et nous permettait d'ouvrir  le site correspondant dans la fenêtre courante. Pour ouvrir le site sur la même fenêtre avec  IWebBrowser2, il faut créer une nouvelle instance de IWebBrowser2 et l'attacher à notre conteneur. Ceci compliquera davantage le code. Mon but étant de montrer comment réaliser un navigateur basé sur  l'activex WebBrowser avec gestion des événements. Il faut rappeler que ce programme ne fait que communiquer avec cet activex. Il hérite donc de tous les défauts d'Internet Explorer puisque il en fait partie.

Commentaire de Urgo le 05/02/2005 00:08:00

racpp > Oui, merci pour la description claire, c'est très agréable à lire!

Commentaire de manta7 le 07/02/2005 17:41:40

C'est quoi la librairie exdisp ?

Commentaire de MangaII le 07/02/2005 19:29:44

Question hors sujet : Je cherche à faire un webbrowser, mais je souhaite pouvoir intercepter le code html (et pouvoir le modifier) avant de l'afficher ! J'ai pas trouvé à la faire avec les classes de l'api (CHtmlView ...)
Qqun aurait-il une idée ????

Commentaire de racpp le 07/02/2005 20:59:58 administrateur CS

manta7 > Le fichier "exdisp.h" est fourni avec Visual C/C++ dans le dossier "Include". Il contient les définitions des interfaces (comme IWebBrowser2) et des identificateurs (comme IID_IWebBrowser2 etc...). Aucune idée pour les autres compilateurs mais il doit y avoir un équivalent. En tous cas, le voici:
http://doc.ddart.net/msdn/header/include/exdisp.h.html
Tu peux copier le contenu de cette page ( entre les deux barres bleues horizontales), puis le coller dans le Bloc-Notes et enfin l'enregistrer avec l'extension ".h". J'espère que ça marchera.

MangaII > En API (sans MFC), tu peux utiliser l'interface "IHTMLDocument2", elle te permet de lire et modifier les éléments d'un document HTML déjà chargé avec l'interface "IWebBrowser2" sans qu'il soit obligatoirement affiché. Tu tapes les mots "ihtmldocument2" et "msdn" dans Google et tu obtiendras toute la documentation sur cette interface dans le site MSDN.

Commentaire de lnbuzzi le 09/03/2005 15:43:40

Je ne sais pas si le problème vient de toi ou non, mais je ne peux pas télécharger tes sources.
Auraient-elles été supprimées?

Commentaire de BruNews le 09/03/2005 16:10:05 administrateur CS

Je viens de tester, ce zip se télécharge (lien à gauche au dessus de la capture d'écran) et s'ouvre impec.

Commentaire de lnbuzzi le 09/03/2005 16:13:39

OK! J'avais pas vu ce lien. Je regardais dans la partie "sources".
Merci

Commentaire de supergrey le 30/05/2005 16:58:34

Je serais très intéresser de savoir comment récupérer l'url des popups, tu en parle vaguement, pourrais tu m'en dire plus?
Merci

Commentaire de victorcoasne le 02/08/2005 22:54:26

In file included from NavWeb.cpp:4:
evenem.h: In member function `virtual HRESULT Evenem::Invoke(DISPID, const IID&, LCID, WORD, DISPPARAMS*, VARIANT*, EXCEPINFO*, unsigned int*)':
evenem.h:85: error: `DISPID_DOWNLOADBEGIN' undeclared (first use this function)
evenem.h:85: error: (Each undeclared identifier is reported only once for each function it appears in.)

evenem.h:90: error: `DISPID_DOWNLOADCOMPLETE' undeclared (first use this function)
evenem.h:95: error: `DISPID_NAVIGATECOMPLETE2' undeclared (first use this function)
evenem.h:112: error: `DISPID_COMMANDSTATECHANGE' undeclared (first use this function)

Voici les erreurs sous Dev-C++ !

Commentaire de racpp le 07/08/2005 21:34:02 administrateur CS

Salut,
Tous ces identificateurs sont déclarés et définis dans le fichier "exdispid.h" de Visual C/C++ 6. Il parait que celui de Dev-C++ n'est pas complet. Puisqu'il est petit, je le mets dans le post suivant. Il suffit de tout copier puis coller dans le bloc-notes et enfin sauvegarder avec l'extension *.h

Commentaire de racpp le 07/08/2005 21:34:34 administrateur CS

#ifndef EXDISPID_H_
//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright 1995 - 1998 Microsoft Corporation. All Rights Reserved.
//
//  File: exdispid.h
//
//--------------------------------------------------------------------------


//
// Dispatch IDS for IExplorer Dispatch Events.
//
#define DISPID_BEFORENAVIGATE     100   // this is sent before navigation to give a chance to abort
#define DISPID_NAVIGATECOMPLETE   101   // in async, this is sent when we have enough to show
#define DISPID_STATUSTEXTCHANGE   102
#define DISPID_QUIT               103
#define DISPID_DOWNLOADCOMPLETE   104
#define DISPID_COMMANDSTATECHANGE 105
#define DISPID_DOWNLOADBEGIN      106
#define DISPID_NEWWINDOW          107   // sent when a new window should be created
#define DISPID_PROGRESSCHANGE     108   // sent when download progress is updated
#define DISPID_WINDOWMOVE         109   // sent when main window has been moved
#define DISPID_WINDOWRESIZE       110   // sent when main window has been sized
#define DISPID_WINDOWACTIVATE     111   // sent when main window has been activated
#define DISPID_PROPERTYCHANGE     112   // sent when the PutProperty method is called
#define DISPID_TITLECHANGE        113   // sent when the document title changes

#define DISPID_FRAMEBEFORENAVIGATE    200
#define DISPID_FRAMENAVIGATECOMPLETE  201
#define DISPID_FRAMENEWWINDOW         204

#define DISPID_BEFORENAVIGATE2      250   // hyperlink clicked on
#define DISPID_NEWWINDOW2           251
#define DISPID_NAVIGATECOMPLETE2    252   // UIActivate new document
#define DISPID_ONQUIT               253
#define DISPID_ONVISIBLE            254   // sent when the window goes visible/hidden
#define DISPID_ONTOOLBAR            255   // sent when the toolbar should be shown/hidden
#define DISPID_ONMENUBAR            256   // sent when the menubar should be shown/hidden
#define DISPID_ONSTATUSBAR          257   // sent when the statusbar should be shown/hidden
#define DISPID_ONFULLSCREEN         258   // sent when kiosk mode should be on/off
#define DISPID_DOCUMENTCOMPLETE     259   // new document goes ReadyState_Complete
#define DISPID_ONTHEATERMODE        260   // sent when theater mode should be on/off
#define DISPID_ONADDRESSBAR         261   // sent when the address bar should be shown/hidden

// define the events for the shell folder view
#define DISPID_SELECTIONCHANGED     200     // The Selection Changed

// define the events for the shell wiwndow list
#define DISPID_WINDOWREGISTERED     200     // Window registered
#define DISPID_WINDOWREVOKED        201     // Window Revoked


#define DISPID_RESETFIRSTBOOTMODE       1
#define DISPID_RESETSAFEMODE            2
#define DISPID_REFRESHOFFLINEDESKTOP    3
#define DISPID_ADDFAVORITE              4
#define DISPID_ADDCHANNEL               5
#define DISPID_ADDDESKTOPCOMPONENT      6
#define DISPID_ISSUBSCRIBED             7
#define DISPID_SHELLUIHELPERLAST        7


#define EXDISPID_H_
#endif // EXDISPID_H_

Commentaire de victorcoasne le 08/08/2005 00:13:47

Merci ça marche nickel.
Je l'ai inclu dans le même répertoire que le projet en rajoutant :
#include "exdispid.h"
avant
#include "evenem.h"
et voilà !

Pour la peine je met un 10/10 !

Commentaire de salber le 08/08/2005 15:17:25

Merci bien, mais est qu'on peut rajouter des méthodes qui seront appelés depuis un script(VBScript ou JScript) par exemple ??
Merci bien pour le code.

Commentaire de racpp le 09/08/2005 22:20:18 administrateur CS

salber >> Désolé, aucune idée à ce sujet.

Commentaire de thunderfear le 11/08/2005 15:56:25

hello,
Quand j'ai une erreur de script sur une page web, le programme le signale et bloque le chargement de la page. Comment masquer cette erreur et laisser charger la page??

Merci d'avance.
a bientot.

Commentaire de victorcoasne le 11/08/2005 19:18:31

Bonjour th,

C'est la même erreur que Internet Explorer car c'est Internet Explorer.
Il n\'y a apparement pas de check box pour pas qui réapparaisse mais si il y a une solution l'expert des activeX va te le dire.

Bonne prog,
@++

Commentaire de racpp le 12/08/2005 17:27:53 administrateur CS

Salut,
Exactement ce code ne fait qu'utiliser l'activex WebBrowser d'Internet Explorer. Il hérite donc malheureusement de tous ses défauts.

Commentaire de ultraLek le 04/12/2005 00:14:25

Bonsoir j'ai essayer le code : nickel. J'aimerais offrir une navigation avec un max de sécurité : est ce que quelqu'un saurait comment faire pour interdire l'interprétation des javascripts, de java, et des activeX contenus dans les pages web?

Commentaire de BruNews le 04/12/2005 18:27:03 administrateur CS

Onglet "avancé" de IE, il y a ce qu'il faut.

Commentaire de ultraLek le 04/12/2005 21:17:51

oui mais est ce possible de coder cela?

Commentaire de BruNews le 04/12/2005 21:42:55 administrateur CS

Je pense qu'il faut regarder les clés BDR écrites quand on modifie les options IE et reproduire cela.

Commentaire de ultraLek le 05/12/2005 09:38:04

ok merci : je vais voir ce que cela donne : mais cela veut dire que je ne pourrais pas paramétrer le comportement pour une seule instance de IE...

Commentaire de BruNews le 05/12/2005 10:39:58 administrateur CS

A vérifier mais je ne pense pas.

Commentaire de theXman le 22/01/2006 18:16:16

comment utiliser un poxy avec cet activex???

Commentaire de victorcoasne le 24/02/2006 22:21:09

Bonjour,

C'est pour savoir si je veux donner un autre nom au navigateur comment je fais ?

Ex : Au lieu de Mozilla/4.0 (..... je veux WebBrownser

Bonne prog,
@++

Commentaire de OGL le 27/02/2006 16:50:46

Bonjour,

J'essaie de simuler un click droit de l'utilisateur sur la fenetre conteneur de l'ActiveX IWebBrowser2. j'ai repris tout bêtement le code zippé et j'ai rajouté quelquepart ces lignes de code:

HWND hh;
pIWeb->get_HWND((long*)(&hh));
SendMessage(hh,WM_RBUTTONDOWN,(WPARAM)0,(LPARAM)MAKEWORD(10,10));
SendMessage(hh,WM_RBUTTONUP,(WPARAM)0,(LPARAM)MAKEWORD(10,10));

Et cela ne fonctionne pas. j'ai essayé ensuite:

SendMessage(hConteneur,WM_RBUTTONDOWN,(WPARAM)0,(LPARAM)MAKEWORD(10,10));
SendMessage(hConteneur,WM_RBUTTONUP,(WPARAM)0,(LPARAM)MAKEWORD(10,10));

Il m'ouvre le menu contexte de n'importe quel Edit donc du conteneur au lieu de m'ouvrir le menu contextuel des sites Internet donc du contenu).

Quel quelqu'un serait me dire pourquoi?
Il y a t-il un autre moyen d'envoyer des messages ou de récupérer le handle de cette fenetre?

Merci d'avance.

Commentaire de vecchio56 le 23/07/2006 16:40:37 administrateur CS

J'aurais aimé modifier quelques trucs mais je n'y arrive pas
Par exemple, ajouter la status bar:
J'ajoute donc la ligne pIWeb->put_StatusBar(VARIANT_TRUE); (ca semble marcher, hr = S_OK), mais je ne la vois pas

Quelqu'un a une idée?

Commentaire de pow le 12/01/2007 16:50:05

Sympa ton code, ma question: comment faire pour eviter les freezes lors du chargement de la page ?
Ce problème se produit typiquement lorsque on accède à des pages contenant des videos, mais survient aussi lors du chargement de nombreuses images.
L'interface se retrouve complètement figée le temps que le controle windows media player soit chargé (par exemple: plus moyen de déplacer la fenetre).

Aurais-tu une solution (probablement à base de threading) ?

Commentaire de tigrou1825 le 05/02/2008 15:22:08

Merci pour ce post très clair.
J'en profite car dans mon application il faut que j'ouvre les pop up dans le meme browser.
J'ai essayé de faire comme indiqué dans le MSDN
ms-help://MS.VSCC/MS.MSDNVS.1036/ProgIE/workshop/browser/hosting/wbcustomization.htm#Controlling_New_Windows

ou ils indiquent qu'il faut fournir au premier paramètre de l'interface le pointeur sur le IDispatch de notre control WebBrowser mais sans succès. Avez vous une idée SVP

Merci d'avance

Commentaire de HeavenForsaker le 06/10/2009 12:30:29

Bravo racpp pour cet excellent code.

Quand on sélectionne du texte sur la page puis clique droit, la fonction copier coller ne fonctionne pas (c'est la seule d'ailleurs), y a t-il moyen de l'activer ?

Commentaire de DxShadow le 22/12/2009 20:34:19

@HeavenForsaker:

utilise CTRL+C (copier) et CTRL+V (coller).
Y'a d'autres raccourcis:

CTRL+A: tout sélectionner
CTRL+X: couper

etc.

Commentaire de HeavenForsaker le 23/12/2009 20:51:28

Bonjour DxShadow,

merci pour la réponse mais je connais déjà ces combinaisons, elles ne fonctionnent pas dans l'application, d'où ma question.

++

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,418 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales