Problème Windows Mail

Delirium6
Problème Windows Mail

Bonjour,

Développant un outils pour le nouveau Window Mail de Vista (remplaçant d'Outlook Express), je suis a la recherche de la nouvelle version du fichier
appelé msoeapi.h que je n'arrive pas a me procurer car avec l'ancienne version j'ai quelques soucis. Je développe sous Visual Studio .Net 2002. Y aurait-il alors un SDK à installer ou autre?

Merci de votre aide par avance.

Delirium6

fredericmazue

Quote:
Y aurait-il alors un SDK à installer ou autre?

Il est clair que pour ce que tu veux faire, tu dois télécharger la toute dernière Windows SDK sur le site de Microsoft.
La SDK de ton Visual Studio ne peut pas te fournir d'en-têtes pour Vista, c'est sûr.

Delirium6

fredericmazue wrote:
La SDK de ton Visual Studio ne peut pas te fournir d'en-têtes pour Vista, c'est sûr.

Oui je suis d'accord, mais mon application est développée sous visual studio .net 2002, dois je alors porter mon programme sous le 2005 avec le sdk vista ? ou bien, où puis je trouver un fichier d'installation du SDK Vista pour visual studio?

fredericmazue

Quote:
mais

Y a pas de mais ! :twisted: :lol:

Quote:
mon application est développée sous visual studio .net 2002,

Oui oui, on a compris la question.

Quote:
dois je alors porter mon programme sous le 2005 avec

Tu devrais, parce que le compilateur est meilleur, et uniquement pour cette raison.

Quote:
d'installation du SDK Vista pour visual studio?

Ca n'existe pas. La Windows SDK n'est pas mariée à une version de Visual Studio. Ni même à Visual Studio.
Tu peux très bien te servir de la SDK pour développer avec Eclipse, le plugin CDT (C++), le compilateur MinGW et la Windows SDK si le coeur t'en dit
C'est d'autant plus sûr et certain que j'ai fait moi même ce genre de manips des dizaines de fois.

Donc comme je te l'ai dit dans ma première réponse, tu télécharges la SDK et tu t'en sers.
Ca ne peut pas être plus simple.

Delirium6

Voilà je viens de télécharger le dernier SDK pour Vista!
Aucune trace du fichier "msoeapi.h" que je cherchais !
Il n'y a qu'un msoeapi.idl!
Et lorsque que l'on regarde la msdn : http://msdn2.microsoft.com/en-us/library/ms715241.aspx

On voit bien l'include du msoeapi.h que je n'ai toujours pas réussi à trouver!

Pas si simple que ça !!

fredericmazue

Quote:
Pas si simple que ça !!

Ah oui ?...
Bon, je n'ai pas téléchargé la dernière SDK. (D'ailleurs je n'ai pas Vista et si ça se trouve je peux pas installer cette SDK donc je ne vais pas perdre mon temps à risquer d'essayer) Mais j'ai la 2003, qui est donc postérieure à la tienne de 2002

J'y vois bien le msoeapi.h accompagné du msoeapi.idl. ce qui est tout à fait normal puisque c'est du COM tout ça.

Alors là tu me dis que dans la dernière SDK il y a le .idl et pas le .h. Moi c'est simple je ne peux pas le croire.
Dis tu ne me fais pas un coup comme wiss20000 qui as insisté pendant 3 ou 4 posts à dire qu'il n'avait pas un fichier qui était sous son nez ?

Bon tu n'as pas msoeapi.h ? Alors admettons.
Mais comme tu connais bien la programmation Windows, tu sais bien que le .h que tu veux est généré par le compilateur .idl. Celui-ci contenant les définitions des interfaces COM que tu veux utiliser.
Alors au pire tu compiles ce msoeapi.idl pour générer le .h, ce qui revient à dire que tu te sert de ta SDK et c'est tout simple...

Dans mon msoeapi.h, il y a ces indications qui restent probablement valables. Les voici dans l'espoir qu'elles te soient utiles.

/* this ALWAYS GENERATED file contains the definitions for the interfaces */





 /* File created by MIDL compiler version 6.00.0366 */

/* Compiler settings for msoeapi.idl:

    Oicf, W1, Zp8, env=Win32 (32b run)

    protocol : dce , ms_ext, c_ext

    error checks: allocation ref bounds_check enum stub_data 

    VC __declspec() decoration level: 

         __declspec(uuid()), __declspec(selectany), __declspec(novtable)

         DECLSPEC_UUID(), MIDL_INTERFACE()

*/
fredericmazue

Bon, poussé par la curiosité, j'ai booté un Windows (quelle abnegation...) et je suis allé voir sur le site de Microsoft.
Il apparaît qu'avec mon XP je peux télécharger et installer cette fameuse SDK.
Ce que je suis en train de faire.
Affaire à suivre

Delirium6

Je vous assure que le fichier msoeapi.h n'est pas présent!

Par ailleurs, je ne connais pas bien la programmation Windows car je commence juste celle-ci pour ainsi dire!

La je suis en train de regarder au niveau du compilateur midl du SDK Vista pour essayer d'en sortir mon fichier msoeapi.h ainsi que ceux dont il dépend!

Je vous remercie de votre aide en attendant de vos nouvelles!

fredericmazue

Donc voilà, j'ai installé cete fameuse SDK et ... bad news. :(

Quote:
Je vous assure que le fichier msoeapi.h n'est pas présent!

En effet il n'y est pas.
On peut dire que tu joues de malchance car c'est la première fois que je manquant dans une SDK, et si ça se trouve c'est le seul qui n'accompagne son .idl.
Mais, et ça ne va pas te consoler, je ne le vois pas non plus dans la SDK qui accompagne VS 2005

Bref tu va devoir compiler à moins que....
- Je vois dans son copyright que le fichier .idl n'a pas été retouché depuis 2005. Si ça se trouve la version de SDK 2003 (que je peux t'envoyer en privé si ça te rend service) peut convenir.
Tu dis avoir des problèmes et tu attribues ça à un fichier msoeapi.h pas suffisamment récent. Mais si tu débutes la programmation Windows/COM (et soit dit sans vouloir t'offenser), tu as peut être mal cerné ton problème. Tu pourrais pas détailler un peu ici qu'on regardes ?

- Si tu as raison sur la cause du pb alors tu vas devoir compiler l'.idl. Prend un .h qui accompagne son .idl dans la SDK et regarde bien les options de compilation qu'ils ont utilisées, et prend les même. A priori ça ira.
Autre conseil, sous le commutateur /I, veille à bien donner les bons répertoires includes. Ce point n'est pas précisé, je pense, dans les .h que tu pourrais prendre comme modèle.

Bon courage.

fredericmazue

Toujours poussé par la curiosté, j'ai essayé de compiler le fichier.idl
A priori sans problème Comme commande j'ai donné

midl /app_config 
 /I "C:\Program Files\Microsoft SDKs\Windows\v6.\Include"
 /I "C:\Program Files\Microsoft SDKs\Windows\v6.0\VC\INCLUDE"   
 msoeapi.idl

Ce qui est à priori suffisant

Si tu as besoin je t'envoie en privé le msoeapi.h ainsi généré :)

Delirium6

Merci, de vos réponses qui me permettent d'y voir beaucoup plus clair. Il est vrai que j'attribue mon problème à ce fichier msoeapi.h, car en fait je travaille sur un anti-spam qui fonctionne sous Outlook Express mais que je dois rendre compatible pour Windows Mail de Vista.

Ayant deux problèmes de fonctionnalité sous windows mail, je me suis dirigé vers ce fichier qui permet de faire tampon entre mon application et windows mail. Et vu que j'utilisais ce fichier msoeapi.h provenant du SDK de 2003, j'ai pensé qu'en obtenant ce fichier à partir du dernier SDK de Vista mes problèmes seraient résolu (ce que je n'ai pas eu le temps de tester hier soir ) Mais c'est ce que je vais faire maintenant vu que j'ai réussi à créer ce fameux fichier à l'aide du compilateur midl et des options que vous m'avais fournies!

En attendant de tester ceci, je vous remercie car au moins , sur ce forum, on suit les problèmes jusqu'au bout même si des fois les réponses sont un peu séche!

fredericmazue

Quote:
même si des fois les réponses sont un peu séche!

Aurais-je été sec :?:
Peut être ;)
J'essaie d'aider de mon mieux sur ce forum, et ceci bénévolement. Ca me prend beaucoup de temps, alors je ne m'embarrase pas de fioritures.
En outre je suis connu pour dire clairement ce que je pense... Je suis technicien, pas diplomate ;)
Mais bon si je suis sec c'est surtout parce que je dispose de peu de temps. Il n'y a rien de personnel, ni même de volonté d'être désagréable :)

Et l'important c'est ne ne pas sécher sur les questions ;)

Au plaisir de te revoir ici si tu as besoin :)

Delirium6

fredericmazue wrote:
Et l'important c'est ne ne pas sécher sur les questions ;)

Il n'y a aucun doute sur ça, et je suis tout à fait d'accord :D

Bon je viens de tester mon application compilé avec le dernier fichier crée avec le SDK Vista, et cela m'a permis de résoudre un seul de mes deux problèmes!! Dommage j'aurais préféré qu'il me les résolve tous! Bon un c'est déjà pas mal aussi.

Donc maintenant, je vais vous expliquer mon problème, comme je vous l'ai déjà dit, mon application est un Anti-Spam, ainsi à la réception d'un nouveau message dans windows mail, celui-ci doit l'analyser ce qui n'est pas le cas ! (sachant que cela marchait trés bien avec Outlook Express!).

Et là, je suis un peu coincé car je ne sais plus vraiment où chercher!
Ce qui me permettait d'attraper l'arrivée des nouveau messages était tout simplement ce code là :

Quote:
BEGIN_MESSAGE_MAP(COENotifyWnd, CWnd)
ON_MESSAGE(WM_NEWMSGS,OnNewMsgs)
ON_MESSAGE(WM_FOLDERNOTIFY,OnFolderNotify)
END_MESSAGE_MAP()

Mais je me pose aussi la question sur le fait que le nouveau Windows Mail, possède son propre antispam et que celui-ci n'utiliserais pas par hasard la même gestion d'évenement? ce qui expliquerais pourquoi je ne l'intercepterais plus!

fredericmazue

Quote:
Mais je me pose aussi la question sur le fait que le nouveau Windows Mail, possède son propre antispam et que celui-ci n'utiliserais pas par hasard la même gestion d'évenement? ce qui expliquerais pourquoi je ne l'intercepterais plus!

Si on regarde ce qu'il y a dans le fameux msoeapi.h et dans ce que raconte la MSDN, ils n'ont rien changé, et il n'y a pas de raisons que ça ne marche plus.
Normalement le nouveau Windows Mail n'utilisera pas le même gestionnaire d'événements, mais la même notification, ce qui n'est pas la même chose. et ce qui à priori offre à deux applis la possibilité d'être notifiées du même évenement.

Quote:
Et là, je suis un peu coincé car je ne sais plus vraiment où chercher!

Je regarderais qu'un appel à IStoreFolder::RegisterNotification ne manque pas dans ton code.
Je regarderais à un niveau un peu plus haut, non l'événement mais la fenêtre COENotifyWnd. Peut être que l'événement est émis, mais qu'il se perd dans la table de routage pour une raison à déterminer.
J'aimerais bien essayer mais malheureusement (heureusement ?) je n'ai pas de Vista

Si tu as des doutes sur des bouts de codes, n'hésites pas à les poster ici.

Delirium6

Quote:
Normalement le nouveau Windows Mail n'utilisera pas le même gestionnaire d'événements, mais la même notification, ce qui n'est pas la même chose.

J'aimerais savoir où je pourrais trouver de la documentation sur le nouveau gestionnaire d'événement?

Quote:
Je regarderais qu'un appel à IStoreFolder::RegisterNotification ne manque pas dans ton code.

J'ai bien un appel à IStoreFolder::RegisterNotification .

Quote:
Je regarderais à un niveau un peu plus haut, non l'événement mais la fenêtre COENotifyWnd. Peut être que l'événement est émis, mais qu'il se perd dans la table de routage pour une raison à déterminer.

Qu'appelais vous par table de routage? désolé cela peut paraitre implicite, mais je n'en ai aucune idée!

fredericmazue

Quote:
Normalement le nouveau Windows Mail n'utilisera pas le même gestionnaire d'événements, mais la même notification, ce qui n'est pas la même chose.

J'aimerais savoir où je pourrais trouver de la documentation sur le nouveau gestionnaire d'événement?

Il y a incompréhension. j'ai voulu dire que le gestionnaire d'événements de Windows Mail et celui de ton application sont indépendants. Et que si le système envoie le message à Windows Mail, il l'enverra aussi à ton application. En cela les deux sont notifiés de la même façon. C'est ce que j'ai voulu dire par même notification.
Les gestionnaires dévénements c'est ce que fait chaque application quand elle est notifée, c'est à dire quand un événement tel que WM_NEWMSGS lui arrive. ce sont deux choses bien distinctes et c'est ce que j'avais voulu dire.

Quote:
J'ai bien un appel à IStoreFolder::RegisterNotification

Fort bien. As tu vérifié que l'appel retourne bien S_OK ?

Quote:
Qu'appelais vous par table de routage?

La table de routage c'est:
BEGIN_MESSAGE_MAP(COENotifyWnd, CWnd)
ON_MESSAGE(WM_NEWMSGS,OnNewMsgs)
ON_MESSAGE(WM_FOLDERNOTIFY,OnFolderNotify)
END_MESSAGE_MAP()

ce qui fait que quand tel événement arrive, telle méthode de la classe qui encapsule la fenêtre est appelée.
Ce que j'ai voulu dire c'est que si la fenêtre COENotifyWnd a quelque chose qui ne va pas, il est possible que le message n'arrive pas.
Mais je n'y crois pas trop.

La première chose est de bien être sûr que retourne bien S_OK

Delirium6

Quote:
Fort bien. As tu vérifié que l'appel retourne bien S_OK ?

Il est vrai que je n'ai en aucun cas pensé à regarder le retour de cette fonction, et là je ne comprends pas, car elle ne me retourne pas S_OK ni même une des deux erreurs de retou que l'on peut avoir :
http://msdn2.microsoft.com/en-us/library/ms710256.aspx

Voila le code :

	VOID SetFolder(CComPtr<IStoreFolder> pFolder)
	{
		HRESULT hr = S_OK;

		m_pFolder = pFolder;

		if( m_pFolder )
		{
			m_pFolder->AddRef();

			CRect rect(10, 10, 100, 100);

			m_pOENotifyWnd = new (COENotifyWnd);

			if( m_pOENotifyWnd->CreateEx( NULL, AfxRegisterWndClass(0),_T("OENotifyWnd"),WS_POPUP,rect, NULL, NULL ) )
			{
				m_pOENotifyWnd->SetFolder( m_pFolder );

				hr = m_pFolder->RegisterNotification( 0, m_pOENotifyWnd->m_hWnd );
		#ifdef IS_TEST
					FOLDERPROPS props;
					props.cbSize = sizeof(FOLDERPROPS);

					m_pFolder->GetFolderProps( 0, &props );
					if( hr == E_INVALIDARG )
					{
						MessageBox( NULL, props.szName, "E_INVALIDARG : COEFolderWrapper::SetFolder", MB_OK );
					}
					if( hr == E_FAIL )
					{
						MessageBox( NULL, props.szName, "E_FAIL : COEFolderWrapper::SetFolder", MB_OK );
					}

					if( hr == S_OK )
					{
						MessageBox( NULL, props.szName, "S_OK : COEFolderWrapper::SetFolder", MB_OK );
					}
			#endif
			}
		}
}

Comment est-ce possible?

fredericmazue

Quote:
Il est vrai que je n'ai en aucun cas pensé à regarder le retour de cette fonction,

Grave erreur en programmation COM :lol:

Quote:
ni même une des deux erreurs de retou que l'on peut avoir :

Deux erreurs...Quel optimisme...
Certes c'est ce que dis la doc. Mais COM étant ce qu'il est et peut être venant d'être ré-écrit en partie pour Vista, faut s'attendre à en voir de belles :lol:
Quote:
Comment est-ce possible

Tout est possible en programmation Windows.

m_pOENotifyWnd = new (COENotifyWnd);
[...]
m_pOENotifyWnd->m_hWnd

Il y a gros à parier qu'à la ligne ci-dessus, m_Hwnd n'est pas initialisé correctement ou que la fenêtre ne plait pas à l'API COM.
Je ne suis pas sûr que le style WS_POPUP convienne très bien.
As tu essayé WS_POPUPWINDOW ou d'autres styles ?
Delirium6

Quote:
Tout est possible en programmation Windows.

Oui c'est ce que je commence à comprendre car aprés un an de prog sous Fedora Core ca change!!

Quote:
Je ne suis pas sûr que le style WS_POPUP convienne très bien.
As tu essayé WS_POPUPWINDOW ou d'autres styles ?

Non je n'ai pas regardé mais c'est ce que je vais faire tout de suite !

Il faut aussi savoir aussi que cette application, ce n'est pas moi qu'il l'ai développée, je ne fais que la reprendre pour débugguer et la rendre compatible Vista, alors j''ai encore énormément de chose à découvrir et à comprendre.

fredericmazue

Quote:
Oui c'est ce que je commence à comprendre car aprés un an de prog sous Fedora Core ca change!!

Pour ça oui...
Quote:

Il faut aussi savoir aussi que cette application, ce n'est pas moi qu'il l'ai développée, je ne fais que la reprendre pour débugguer et la rendre compatible Vista,

J'avais bien compris.
Quote:
alors j''ai encore énormément de chose à découvrir et à comprendre.

La programmation Windows c'est un monde à part entière.
Enfin, un monde entièrement à part, je veux dire.

Et puisque tu es dans les découvertes, hâte toi de découvrir que MFC c'est un gros tas de boue. Et que ça vaut le coup de découvrir d'autres toolkits.

Delirium6

Quote:
As tu essayé WS_POPUPWINDOW ou d'autres styles ?

Je viens d'essayer les différents styles mais rien n'y fait!

J'ai affiché le numéro de l'erreur que me retourne le RegisterNotification avec ce code la :

	CString str;
	str.Format("%d",hr);
	MessageBox( NULL, str, "S_OK : COEFolderWrapper::SetFolder", MB_OK );

et j'obtiens ça: -2147467263 !!!
Déjà je ne sais pas si ce code là existe et de plus je n'ai rien trouvé comme informations avec lui!

Quote:

m_pOENotifyWnd = new (COENotifyWnd);
[...]
m_pOENotifyWnd->m_hWnd

Il y a gros à parier qu'à la ligne ci-dessus, m_Hwnd n'est pas initialisé correctement ou que la fenêtre ne plait pas à l'API COM.

je vais regarde à ce niveau là maintenant!

fredericmazue

Quote:

et j'obtiens ça: -2147467263 !!!
Déjà je ne sais pas si ce code là existe

Ma foi ça ressemble bien à un code d'erreur COM, ya pas à dire.
Pas le temps de regarder dans les docs ce soir. Demain peut être.

Quote:
m_Hwnd [...] je vais regarde à ce niveau là maintenant!

Normalement, si ma mémoire est bonne, CreateEx te retourne le Handle. Tu devrais le récupérer là et le passer à l'API COM

HWND hwnd = m_pOENotifyWnd->CreateEx( //etc...
hr = m_pFolder->RegisterNotification(0, hwnd);
Delirium6

Quote:
Normalement, si ma mémoire est bonne, CreateEx te retourne le Handle.

Cette fonction renvoi un type Booléen donc impossible de passer le Handler.

Bon si c'est bien une erreur COM, c'est un peu plus rassurant (Quoi que!!)

class COENotifyWnd : public CWnd
{
public:
	COENotifyWnd();

Voila mon constructeur, peut etre devrais-je l'initialiser autrement?

Pour ca :
if( m_pOENotifyWnd->CreateEx( NULL, AfxRegisterWndClass(0,0,0,0),_T("OENotifyWnd"),WS_POPUP,rect, NULL, NULL ))

J'ai essayé different type WS_.... , et je me suis rendu compte que le WS_CHILD faisait retourner une erreur a cette fonction, je ne sais pas si cela peut aider!!

fredericmazue

Quote:
Cette fonction renvoi un type Booléen donc impossible de passer le Handler.

Ah mince, ma mémoire m'a fait défaut :(

Quote:
J'ai essayé different type WS_.... , et je me suis rendu compte que le WS_CHILD faisait retourner une erreur a cette fonction, je ne sais pas si cela peut aider!!

Non ça n'aidera pas car WS_CHILD est incompatible avec WS_POPUP. L'erreur est donc juste.

Bon ben va falloir chercher le bug ailleurs
Je dois dire que j'ai du mal à comprendre l'organisation de ton code.
VOID SetFolder n'est apparement pas une méthode de classe. Alors où sont m_pFolder et m_pOENotifyWnd ? A quelle classe appartiennent ils. ET comment ça se fait que tu y as accès depuis cette foncion SetFolder ?
J'aimerais bien avoir une vision plus claire de la chose. Tu vas me dire que ça ne doit pas concerner ton problème. Mais il doit bien y avoir une explication quelque part. A moins que ça ne puisse fonctionner sous Vista, mais ça me paraît trop gros quand même.

Delirium6

Quote:
J'aimerais bien avoir une vision plus claire de la chose.

Je comprend tout a fait que sans avoir une vision plus grande de la chose, vous ayez du mal a tout comprendre

Je peux vous envoyer si vous le souaitée le fichier concerné! Sinon voici déjà mon organisation :

// COENotifyWnd dialog used for App About

class COENotifyWnd : public CWnd
{
public:
	COENotifyWnd();

// Dialog Data
	//enum { IDD = IDD_OENOTIFYWND };

	//VOID SetRes(HMODULE hResModule){ AfxGetResourceHandle() = hResModule; }

public:
	afx_msg LRESULT OnNewMsgs(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnFolderNotify(WPARAM wParam, LPARAM lParam);

	VOID SetFolder(IStoreFolder* pFolder){ m_pFolder = pFolder; }

	IStoreFolder* m_pFolder;

	protected:
	//HMODULE AfxGetResourceHandle();
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//virtual BOOL OnInitDialog();
// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};

COENotifyWnd::COENotifyWnd()// : CDialog(COENotifyWnd::IDD)
{
}

void COENotifyWnd::DoDataExchange(CDataExchange* pDX)
{
	CWnd::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(COENotifyWnd, CWnd)
	ON_MESSAGE(WM_NEWMSGS,COENotifyWnd::OnNewMsgs)
	ON_MESSAGE(WM_FOLDERNOTIFY,COENotifyWnd::OnFolderNotify)
END_MESSAGE_MAP()


//
//	OnNewMsgs
//
/////////////////////////////////////////////////////////////////////////
LRESULT COENotifyWnd::OnNewMsgs(WPARAM wParam, LPARAM lParam)
{	MessageBox("OnNewMsgs","OnNewMsgs",MB_OK);
#ifdef IS_MANAGEMUTLFOLDERS_OE
	OEPlugin_OnNewMsgs( wParam, lParam, m_pFolder );
#else
	OEPlugin_OnNewMsgs( wParam, lParam );
#endif

	return 0;
}


//
//	OnFolderNotify
//
/////////////////////////////////////////////////////////////////////////
LRESULT COENotifyWnd::OnFolderNotify(WPARAM wParam, LPARAM lParam)
{
	OEPlugin_OnFolderNotify( wParam, lParam );
	return 0;
}

class COEFolderWrapper
{
public:
	COEFolderWrapper():
			m_pFolder(NULL),
			m_pOENotifyWnd(NULL)
	{
	}

	~COEFolderWrapper()
	{
		if( m_pOENotifyWnd )
		{
			m_pOENotifyWnd->DestroyWindow();

			delete m_pOENotifyWnd;
			m_pOENotifyWnd = NULL;
		}
	}
	}

	//
	//	SetFolder
	//
	/////////////////////////////////////////////////////////////////////////
	VOID SetFolder(CComPtr<IStoreFolder> pFolder)
	{
		HRESULT hr = S_OK;

		m_pFolder = pFolder;

		if( m_pFolder )
		{
			m_pFolder->AddRef();

			CRect rect(10, 10, 100, 100);

			m_pOENotifyWnd = new(COENotifyWnd);

			if( m_pOENotifyWnd->CreateEx( NULL, AfxRegisterWndClass(0,0,0,0),_T("OENotifyWnd"),WS_POPUP,rect, NULL, NULL, NULL ))
			{
				m_pOENotifyWnd->SetFolder( m_pFolder );

				hr = m_pFolder->RegisterNotification( 0, m_pOENotifyWnd->m_hWnd );
		//#ifdef IS_TEST
					FOLDERPROPS props;
					props.cbSize = sizeof(FOLDERPROPS);

					m_pFolder->GetFolderProps( 0, &props );
					if( hr == E_INVALIDARG )
					{
						MessageBox( NULL, props.szName, "E_INVALIDARG : COEFolderWrapper::SetFolder", MB_OK );
					}
					if( hr == E_FAIL )
					{
						MessageBox( NULL, props.szName, "E_FAIL : COEFolderWrapper::SetFolder", MB_OK );
					}

					if( hr != S_OK )
					{
	CString str;
	str.Format("%d",hr);
	MessageBox( NULL, str, "S_OK : COEFolderWrapper::SetFolder", MB_OK );
						MessageBox( NULL, props.szName, "S_OK : COEFolderWrapper::SetFolder", MB_OK );
					}

					if( hr == S_OK )
					{
	CString str;
	str.Format("%d",hr);
	MessageBox( NULL, str, "S_OK : COEFolderWrapper::SetFolder", MB_OK );
						MessageBox( NULL, props.szName, "ISGOOD : COEFolderWrapper::SetFolder", MB_OK );
					}
			//#endif
			}
			else
				MessageBox( NULL, "BAD", "BAD", MB_OK );

		}
	}

	//
	//	Unregister
	//
	/////////////////////////////////////////////////////////////////////////
	VOID Unregister()
	{
		if( m_pFolder )
		{
			m_pFolder->UnregisterNotification( 0, m_pOENotifyWnd->m_hWnd );

			m_pFolder->Release();
			m_pFolder = NULL;
		}
	}

	IStoreFolder* m_pFolder;

	COENotifyWnd* m_pOENotifyWnd;
};
fredericmazue

Oui c'est plus clair pour moi.
Pour le fichier ce serait avec plaisir, mais pas aujourd'hui.
Je dois faire face à mille trucs là et je ne sai splus où donner de la tête. Enfin envoie le fichier. Mais je ne peux pas promettre de regarder.

fredericmazue

Bon j'ai regardé le fichier que tu m'as envoyé pendant que je grignotais un casse-croûte.
Puisque tu n'en es pas l'auteur original, je me permets de dire qu'il mériterait d'être ré-écrit entièrement.
Je sais que ça ne t'aide pas beaucoup de dire ça, malheureusement.
Je n'ai pas trouvé d'erreur évidente. Vraiment navré, je ne sais pas ce qui se passe pour l'instant.

Delirium6

Quote:
Puisque tu n'en es pas l'auteur original, je me permets de dire qu'il mériterait d'être ré-écrit entièrement.

Oui je comprend bien, mais je ne peux le faire car sinon l'application devrait toute être revue!

Quote:
Je n'ai pas trouvé d'erreur évidente. Vraiment navré, je ne sais pas ce qui se passe pour l'instant.

Moi non plus, j'ai pas trouvé d'erreur évidente, et aprés quelques changements sur les options des fonctions et autres, je n'ai toujours rien!
Je sais plus ou donner de la tête là!

fredericmazue

Quote:
'application devrait toute être revue!

C'est bien de ça dont je parlais.
C'est sans doute nécessaire.
Quote:
Je sais plus ou donner de la tête là!

Dans le code que tu as montré ici et dans celui que tu m'as envoyé, moi non plus....
Le problème se situe ailleurs dans l'appli je pense. D'où la nécessité de la revoir.
Je n'imagine quand même pas que ça ne puissepas parcher sous Vista.

Bon courage. Si jamais j'ai une idée, je ne manquerai pas de te le dire.

Delirium6

ReBonjour,

je viens de trouver cela sur les forums de microsoft et de la MSDN :

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=947723&SiteID=1

Apparement je ne suis pas le seul à chercher la solution à ce problème!

Et tout fonctionnait bien pour eux aussi avec Outlook Express!

fredericmazue

Bigre....
Alors Vista marche pas quoi....
E_NOTIMPL = NOT IMPLEMENTED
Pas de quoi être fier chez Microsoft.. Tiens ça mériterait une volée de bois vert dans notre forum Vista si le coeur t'en dit :D

Maintenant tu peux essayer de contourner le problème avec des API telles que ReadDirectoryChanges

Mais ça va t'obliger à ré-écrire beaucoup de code. Et encore faut-il que les Folders en question correspondent bien à un répertoire physique sur le disque, ce qui n'est pas forcément certain. A vérifier donc.

Delirium6

Quote:
Bigre....
Alors Vista marche pas quoi....
E_NOTIMPL = NOT IMPLEMENTED

Effectivement, je viens de tester le code erreur de retour est c'est bien celui-ci.

Quote:

Pas de quoi être fier chez Microsoft.. Tiens ça mériterait une volée de bois vert dans notre forum Vista si le coeur t'en dit :D

C'est clair, mais il y a tellement de chose a reprocher à Vista, comme le contrôle des comptes utilisateurs et le Windows Defender qui bloque des programmes légitimes sans permettre de spécifier définitivement la validité d'un programme.

Quote:
Maintenant tu peux essayer de contourner le problème avec des API telles que ReadDirectoryChanges

De toute façon je ne vois pas d'auters solutions, alors je vais m'y atteler!
Avec Windows Mail, plus de fichiers ."dbx", mais des dossiers contenant les ".eml" et gardant la même hiérarchie que son arborescence dans le compte windows mail.

Merci des conseils, je vous tiendrais au courant!

fredericmazue

Quote:
C'est clair, mais il y a tellement de chose a reprocher à Vista, comme le contrôle des comptes utilisateurs et le Windows Defender qui bloque des programmes légitimes sans permettre de spécifier définitivement la validité d'un programme.

Et bien vas y, ne te prive pas.
Et ne te retiens pas surtout.
Donne ton avis sur le forum Vista :)

Quote:
Merci des conseils, je vous tiendrais au courant!

C'était avec plaisir, la discussion était intéressante.
Oui tiens nous au courant ici :)
Delirium6

Bonjour,

Je reviens ici car je me pose des questions, et j'aimerais y voir plus clair,
pour le ReadDirectoryChangesW (http://msdn2.microsoft.com/en-us/library/aa365465.aspx)
est ce un gestionnaire d'evenement ou doit on faire tourner une routine qui appelle celui-ci?

Par ailleurs, j'ai trouvée le FileSystemWatcher (http://msdn2.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)
Mais je me pose la question si je peux utiliser cela avec MVS2002 .Net et ci c'est mieux que d'utiliser le ReadDirectoryChangesW ?

Merci

fredericmazue

Quote:
pour le ReadDirectoryChangesW (http://msdn2.microsoft.com/en-us/library/aa365465.aspx)
est ce un gestionnaire d'evenement ou doit on faire tourner une routine qui appelle celui-ci?

Ce n'est pas un gestionnaire d'événement, du moins au sens dans celui où tu cherchais à avoir des notifications dans ta fenêtre.

Cependant pour ce que tu veux faire, tu dois faire tourner une routine. Et par tourner tu ne crois pas si bien dire.
La "bonne" façon est de faire ça dans un thread. Mais c'est peut être ce que tu voulais dire :)
D'abord tu appeles l'API ReadDirectoryChangesW en lui passant une structure OVERLAPPED
Ensuite tu rentres dans le thread et dans celui-ci tu appelles WaitForMultiplesObjects (ou WaitForSingleObject si ça suffit à ton appli)
Tout ça c'est une cuisine assez compliquée qui est la façon de faire des entrées/sorties asynchrone sous Windows.

Pour te donner une idée, toi qui fait de l'Unix, WaitForMultipleObjects présente des analogies avec l'appel système select.
Enfin disons que derrière c'est la même idée.

Si tu es un lecteur fidèle de Programmez! ;), j'y ai traité le ReadDirectoryChanges, mais il y a déjà assez longtemps. Mais je peux retrouver le N° si tu penses l'avoir.

fredericmazue

J'oubliais...

Quote:
FileSystemWatcher

Ca c'est une classe .Net
Pour toi qui code en Win32 natif, ça ne convient pas.

Delirium6

Merci de tous ces renseignements, j'en était sur que le FileSystemWatcher était à utiliser en .Net vu que c'etait compatible a plusieurs languages!

Malheureusement non, je ne suis pas un fidèle lecteur de votre magazine, mais je pense que je vais faire abonner mon employeur!

En ce qui concerne le numéro du magazine où vous traité du sujet ReadDirectoryChangesW, je parie qu'il n'est pas possible de le commander sur votre site ou de se le procurer?

fredericmazue

Quote:
Malheureusement non, je ne suis pas un fidèle lecteur de votre magazine, mais je pense que je vais faire abonner mon employeur!

Allez :!: faut battre le fer pendant qu'il est chaud :)

Quote:
En ce qui concerne le numéro du magazine où vous traité du sujet ReadDirectoryChangesW, je parie qu'il n'est pas possible de le commander sur votre site ou de se le procurer?

Je ne sais pas.
C'est un vieux numéro il est vrai. Ca m'étonnerait qu'il en reste.
Mais j'ai une meilleure idée. (re)envoie moi ton adresse mail privé et pendant que tu t'abonnes à Programmez! ;) Je vais te trouver une solution :)
Delirium6

Bonjour et désolé de revenir aussi tard,

Tout d'abord pour :

fredericmazue wrote:

Allez :!: faut battre le fer pendant qu'il est chaud :)

C'est bon nous sommes abonnés depuis le mois dernier!!

Aprés en ce qui concerne mon application, c'est bon elle tourne correctement sous Vista et j'ai utilisé le ReadDirectoryChangesW.

Il me reste malheureusement un soucis de sur les droits d'éxècution de mon application à cause de l'UAC (User Account Control) qui la bloque si celui-ci est activé.

j'ai regardé à ce niveau là http://www.microsoft.com/france/msdn/windowsvista/Developpement-applications-Windows-Vista-utlisant-le-Controle-des-comptes-utilisateur.mspx
mais je trouve que leur explications sont assez vague!

Enfin ce qui me rassure, il y a toujour une solution à tout!! :lol:

fredericmazue

Bonjour :)

Quote:
désolé de revenir aussi tard

Pas de quoi être désolé vraiment.
Je suis content d'avoir de tes nouvelles :)

Quote:
Aprés en ce qui concerne mon application, c'est bon elle tourne correctement sous Vista et j'ai utilisé le ReadDirectoryChangesW.

Je suis très heureux de te savoir dépanné :)

Malheureusement pour l'UAC je ne peux pas t'aider. Je ne connais pas. Je n'ai pas de Windows Vista pour l'instant et tant que un travail de développement ne m'y oblige pas, je continuerai de m'abstenir.

J'espère que tu trouveras une réponse rapidement.