Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Outlook
Outlook Forum d'entraide sur Microsoft Office Outlook
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/06/2007, 11h38   #1
Invité de passage
 
Inscription : mars 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 15
Points : 4
Points : 4
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...

Citation:
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?
Sxilderik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 15h05   #2
Invité de passage
 
Inscription : mars 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 15
Points : 4
Points : 4
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 :
1
2
3
	pExplorer->QueryInterface(IID_IOleWindow, (void **)&pOleWindow);
	pOleWindow->GetWindow(&hWnd);
Par exemple:

Code :
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 :
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 :
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
Sxilderik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 15h25   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 351
Points : 29 264
Points : 29 264
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h17.


 
 
 
 
Partenaires

Hébergement Web