|
Hi Stephane,
I thought Outlook Express uses Simple MAPI(SMAPI).But you are so wrong, because this is not documented. SO I don't really blame you. COM acces apart from SMAPI/MAPI is also possible, cause OE is programmed as a bunch of COM servers. I have been working on this for sometime.
If the topic interests you,let me know(and your email)
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Amit Dey wrote:
SO I don't really blame you
Thanks, that's nice.
Amit Dey wrote:
COM acces apart from SMAPI/MAPI is also possible, cause OE is programmed as a bunch of COM servers.
Yes, even though that's off-topic. Has this anything to do with the original poster request ?
|
|
|
|
|
Outlook Express consists of msimn.exe(the client),msoert2.dll(run time string anf other util stuff),msoeacct.dll(accounts),msoe.dll(the main OE com server), msoeres.dll,msacctres.dll(account dialog resources) etc.
Most of Outlook Express's folders and mail access is thru CLSID_StoreNamespace.
{E70C92A9-4BFD-11d1-8A95-00C04FB951F3}
IID_IStoreFolder - {E70C92AC-4BFD-11d1-8A95-00C04FB951F3}
IID_IStoreNamespace - {E70C92AA-4BFD-11d1-8A95-00C04FB951F3}
Outlook Express client(msimn.exe)uses these system interfaces(Outlook Express is a system component in a certain sense) and folder/mail and notifications are available just as for MS Outlook.
Not surprisingly,MS Outlook also uses some of these interfaces! (esp account,transport etc).
other common system interfaces include message transport, MIME message creation/encoding/decoding, account related interfaces . inetcomm.dll among other things,contains the encapsulation for mail transport(HTTP/SMTP/IMAP) for MIME messages and other TNEF specific stuff)mlang is for multi lingual features as documented.
The interfaces I'm talking about are very old(97) and a lot of other changes and newer implementations are inlcuded in later versions(5.5x+)like msn integration. probably these newer interfaces are never going to be documented as well.
This is how I can launch the client thru undocumented means.
#define MSOEAPI_START_SHOWSPLASH 0x00000001
#define MSOEAPI_START_MESSAGEPUMP 0x00000002
#define MSOEAPI_START_ALLOWCOMPACTION 0x00000004
#define MSOEAPI_START_INSTANCEMUTEX 0x00000008
#define MSOEAPI_START_SHOWERRORS 0x00000010
#define MSOEAPI_START_APPWINDOW 0x00000020
typedef HRESULT (APIENTRY *PFNSTART)(DWORD dwFlags, LPCSTR pszCmdLine, INT nCmdShow);
HINSTANCE hMod = LoadLibrary("C:\\Program Files\\Outlook Express\\msoe.dll");
if(hMod)
{
PFNSTART pfn = (PFNSTART)GetProcAddress(hMod,"CoStartOutlookExpress");
//combination of other flags -
//MSOEAPI_START_MESSAGEPUMP|MSOEAPI_START_SHOWERRORS|MSOEAPI_START_APPWINDOW|MSOEAPI_START_SHOWSPLASH
DWORD dwFlags = MSOEAPI_START_INSTANCEMUTEX;
//set nShow to SW_XXX
int nShow = SW_SHOW;
LPTSTR szCmdLine = {"/2"};
HRESULT hr = pfn (dwFlags,szCmdLine,nShow);
if(FAILED(hr))
return FALSE;
}
Is it off topic? Actually, I'd like you to check out my little SDK here.. I know you are a COM programmer and am looking for beta testers/programmers for more ideas etc. Thanks in advance.
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Amit Dey wrote:
Is it off topic?
I am afraid that it is. The poster wants to customize Outlook express toolbars and menus.
I have just given a glance at the OE SDK you refer to and that's a good job. However, the COM layer you add to it makes it nice for anyone who would like to drive Outlook express from an external app. But this does not bring much for the purpose of building an Outlook express addin.
|
|
|
|
|
you are quite correct in the sense of a visual addin for outlook express. no, the ms docs do not seem to suggest this - although there are certain IOEExtension and IOEExtensionMenu interfaces, but I do not think such an extensibility is possible. So I'd like my SDK also to have some means of visually addin menu entries/toolbars. I need some help with this.
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Amit Dey wrote:
but I do not think such an extensibility is possible. So I'd like my SDK also to have some means of visually addin menu entries/toolbars. I need some help with this.
The code I have posted above is an excerpt from PGP, which actually plugs itself in Outlook Express, along with a toolbar button and a menu option. This exemplifies how window hooking techniques can gain access to an arbitrary app.
|
|
|
|
|
I have just posted another update here(ugh! html!?!) and you can take a look at the interface declarations and how to access everything thru raw OE object model.
Interesting,huh!
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Thank you very much.
I will go through your OESDK and try to solve my problem.
Thank you once again.
|
|
|
|
|
This is more than nice.
Unless you intend to make business out of it, what about a Cp article ? After all, what people want is a way to drive the client email regardless of what the machine is configured to use. Since a lot of users end up with either Outlook or Outlook Express, what would be blasting is a common object model. Something even MS couldn't make (or actually didn't want to, only to promote a commercial product rather than a free product).
[Edit]Be sure to get referenced so that a google search reaches you when anyone is searching for Outlook Express programming related stuff.[/Edit]
|
|
|
|
|
I intend to write an article on CP with such headers and with some of my sample code snippets. It's as yet in the works, and I'm on it.
But you must tell me, which month YOU are not publishing anything heavyweight - atleast that way my article stands a chance in the CP contest.
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Amit Dey wrote:
I intend to write an article on CP with such headers and with some of my sample code snippets. It's as yet in the works, and I'm on it.
Do it if you feel like doing it. That's will be certainly welcome especially if you add custom outlook express toolbar techniques, but you don't need to feel entitled to produce anything only as a consequence of our discussion.
Amit Dey wrote:
which month YOU are not publishing anything heavyweight
Sadly, I have never won any competition, so I don't think I would prevent you from winning anything anyway.
|
|
|
|
|
What I understand is first find the Window whose classname = "ThorBrowserWndClass" - Outlook Express 4 main window
"Ath_Note" - each new message you create or read OE is this class
"Outlook Express Browser Class" - main OE window for all ver.
Then you subclass the windows WindowProc. The XXXPluginInfo calls save and store information with regards to your your plugin information - toolbar/menu that is implemented in a dll(__declspec(dllexport)!!).
But please tell us more as how to specifically add toolband items?
I have tried using some very old code here on CP, that specifically drills down the OE window. Using Spy++ you could see that you need to use FindWindow() and FindWindowEx() API's to find-
Outlook Express Browser Class
|
SizeableRebar
|
RebarWindow32(this is the parent band?)
|
3 ToolbarWindow' s - i.e. OE's menu,toolband/rebarband/statusbar.
But although I can get OE's main band, any addition to the band(as in Nick Hodapp's rebarband code on CP) does not show a new toolbar button or menu next to the last item, as expected.
Please show us the way!
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
What does you addin do? if you need any of Outlook Express's functionality, then the SDK might be of help.
|
|
|
|
|
I am trying to programatically get the ProcessID for a running COM+ application. I am using Windows 2000 (COM+ 1.0) so there is no ApplicationInstances object in the COM Admin library to use, but Component Services in Windows 2000 somehow gets the Process ID anyway. I have been looking all over in the MSDN Library, the web, and microsoft's site trying to find out how to retrieve this. I can get the application's name (just like you can see it in Component Services) and through the same administration object i can get the GUID. What I need is a way to get the actual Process ID of the DLLHOST.EXE that is associated with a specific running instance. I am hoping there is some fairly easy way to do this using mostly API Calls, but I haven't been able to come up with anything. Any help would be greatly appreciated. Thanks.
|
|
|
|
|
UPDATE: I just found a command line utility that will give the command line of any running process, given its ProcessID. Using the command line, you can see the switch given to DLLHOST.EXE which looks like this:
/ProcessID:{CLSID_HERE}
which can be matched up to the Key property of the Application. The problem now, is that there is no source code with this utlity I found. Does anyone know how it might work? It seems like it is making calles to OpenProcess, CreateRemoteThread, etc.
|
|
|
|
|
MSDN sample "Taking a Snapshot and Viewing Processes"
|
|
|
|
|
Thanks Alex, but I don't need help in getting a list of processes. I needed help in takign a process ID and amtching it a COM+ Application name. I've found the source code for that program I spoek of though, and I no longer need help. Thanks anyway.
|
|
|
|
|
I've got a COM+ DLL running through ASP pipes in IIS. I can currently debug it using a VB app which calls it, but I would like to debug it through it's real environment. Anyone knows how this can be done?
|
|
|
|
|
Assuming you are using Component Services of Win2k platform and that your component is a C++ component developed in VC++ 6.0, go to package properties, Advanced tab, check the "Launch in debugger" checkbox under Debugging, and as soon as your dll gets loaded, the debugger (VC++) will launch.
As soon as it launches, you have to press F5 (Run) for yourself, or else a timeout will occur and COM+ will think your component failed to initialize.
After you press F5, you can open the source files of your component, insert a breakpoint, make another call in your component, and debug as you would normally do.
Hope my assumptions are right...
|
|
|
|
|
yes, your assumptions are corrent. Thank you. This really helped. Now that I'm able to step into the code, I'm trying to catch the event which happens when you 'shut down' the COM+ application from the component manager.
From what I've seen, no code is called at all. The process just stops, which naturally prevents me to do any log flushing or memory cleanup.
Any ideas?
|
|
|
|
|
Destructors are always called. Why not use them?
|
|
|
|
|
Well, they aren't called when you 'shut down' the component from COM+. Had they been called - my life would have been easier (to a certain extent)
|
|
|
|
|
Does anyone know of any good referances for writing a file system monitor in VC++ 6.0. I would like to have the same functionality as the one in dot net.
Thanks in Advance
Nick
Forever Developing
|
|
|
|
|
I have an ATL DLL wriite in VC++....and i usng that DLL in a vb project....the problem is that first the dll was working as desired but not now....so i want debug the code and step into the code of the DLL ....can somebody suggest me a solutions.
Deepak Sharma;)
|
|
|
|
|
Place debug build DLL, run VB host. Go into visualStudio build >start Debug> Attach to process, select host process. Load source code place break point.
|
|
|
|