IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outlook Discussion :

Outlook en C/C++ : comment obtenir le hWnd d'un _Explorer ou d'un _Inspector ?


Sujet :

Outlook

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Outlook en C/C++ : comment obtenir le hWnd d'un _Explorer ou d'un _Inspector ?
    Bonjour

    Tout est dans le titre, que je répète ici :
    - Comment obtenir le hWnd d'un _Explorer ou d'un _Inspector en C/C++ ?

    Je lis partout qu'en VB on a accès directement à la propriété hWnd, mais je n'ai rien trouvé en C/C++, à part la recherche hasardeuse par un FindWindow, ce qui est quand même assez étonnant .

    Quelqu'un connait-il une méthode, une propriété, enfin quelque chose qui m'aurait échappé?

    Merci.

    ---------------------
    Ah tiens...

    Outlook does not enable an extension to access the product's user interface; that is, to directly manipulate HWNDs.
    (source)
    Comment faire alors pour envoyer une MessageBox modale par rapport à la bonne fenêtre sans le hWnd? Le modèle objet Outlook (ou Office) fournit-il une méthode adaptée?

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    alors, on peut y arriver, d'une manière un peu détournée, mais bien plus propre que FindWindow

    - Créer des EventHandler sur les _Explorer ou _Inspector

    - dans le Initialize du handler, ajouter ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	pExplorer->QueryInterface(IID_IOleWindow, (void **)&pOleWindow);
    	pOleWindow->GetWindow(&hWnd);
    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
    	Outlook::_ExplorerPtr pExplorer = m_pApplication->ActiveExplorer();
    	if ( pExplorer != NULL ) {
    		// This is self-Releasing when the Explorer closes
    		m_pMainExplorerEventHandler = new
    				CExplorerEventHandler(pExplorer);
    		fHasMainWindow = true;
    	}
    }
    catch(...) {}
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class CExplorerEventHandler : public EventHandler {
    public:
    	CExplorerEventHandler(Outlook::_Explorer *pExplorer);
    	~CExplorerEventHandler() {}
    
    	HWND GetHWnd(void) { return m_hWnd; }
    
    protected:
    	virtual void Initialize(LPDISPATCH lpDispatch);
    
    private:
    	HWND m_hWnd;
    };
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void CExplorerEventHandler::Initialize(LPDISPATCH lpDispatch) {
    	Outlook::_Explorer *pExplorer = (Outlook::_Explorer *)lpDispatch;
    
    	if ( NULL != pExplorer) {
    		m_hWnd=0;
    		IOleWindow *pOleWindow = NULL;
    		try {
    			pExplorer->QueryInterface(IID_IOleWindow,
    					(void **)&pOleWindow);
    			if ( NULL != pOleWindow ) {
    				pOleWindow->GetWindow(&m_hWnd);
    				pOleWindow->Release();
    			}
    		}
    		catch(...) {}
    	}
    }
    Hope this helps, comme ils disent

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Oeuf corse.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/01/2008, 19h40
  2. comment obtenir un polynome de regression
    Par evariste_galois dans le forum Mathématiques
    Réponses: 17
    Dernier message: 19/01/2007, 15h06
  3. Réponses: 5
    Dernier message: 18/01/2004, 16h25
  4. Comment obtenir l'heure du serveur avec flash ?
    Par Michaël dans le forum Flash
    Réponses: 9
    Dernier message: 23/12/2003, 17h50
  5. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo