ATL COM server for System Tray Icon
I am trying to get a system tray icon to animate from a console application.
I am using the example from codeproject:
http://www.codeproject.com/atl/system_tray.asp?forumid=4142&select=1759154&df=100&msg=1759154
The example works fine from the user app supplied in the source code. Since
my app is a console project, I attempted to build a very rudimentary console
application that calls directly into the interface:
// systemtraydemoclient.cpp : Defines the entry point for the console
application.
//
#include <iostream>
#define INITGUID
#include <objbase.h>
#include "SystemTrayDemo.h"
int main(int argc, char* argv[])
{
std::cout<<"main: Entry"<<std::endl;
IClassFactory *pCf;
IUnknown *pUnk;
IMyServer *pMyServer;
HRESULT hr;
std::cout<<"main: calling CoInitialize() \n"<<std::endl;
hr=CoInitialize(NULL);
if(FAILED(hr))
{
std::cout<<"main: CoInitialize Failed!\n"<<std::endl;
exit(-1);
}
std::cout<<"main: CoInitialize OK\n"<<std::endl;
std::cout<<"main: Calling CoGetClassObject\n"<<std::endl;
hr=CoGetClassObject(CLSID_MyServer,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,(void**)&pCf); if(FAILED(hr)) { std::cout<<"main: CoGetClassObject Failed!\n"<<std::endl; goto EXIT00; } std::cout<<"main: CoGetClassObject OK\n"<<std::endl; std::cout<<"main: callingpCf->CreateInstance(NULL,IID_IUnknown,...)"<<std::endl; hr=pCf->CreateInstance(NULL,IID_IUnknown,(void**) &pUnk); if(FAILED(hr)) { std::cout<<"main: pCf->CreateInstance(NULL,IID_IUnknown,...)Failed!\n"<<std::endl; goto CLEANUP00; } std::cout<<"main: pCf->CreateInstance(NULL,IID_IUnknown,...)OK"<<std::endl; std::cout<<"main: callingpUnk->QueryInterface(IID_IMyServer,...)"<<std::endl; hr=pUnk->QueryInterface(IID_IMyServer,(void**) &pMyServer); if(FAILED(hr)) { std::cout<<"main: pUnk->QueryInterface(IID_IMyServer,...)Failed!\n"<<std::endl; goto CLEANUP01; } std::cout<<"main: pUnk->QueryInterface(IID_IMyServer,...)OK\n"<<std::endl; std::cout<<"main: Now Calling into the IMyServerInterface\n"<<std::endl; hr=pMyServer->Visible(VARIANT_TRUE); if(FAILED(hr)) { std::cout<<"main: pMyServer->Visible() Failed!\n"<<std::endl; goto CLEANUP02; } hr=pMyServer->Animate(VARIANT_TRUE,200); if(FAILED(hr)) { std::cout<<"main: pMyServer->Visible() Failed!\n"<<std::endl; goto CLEANUP02; } std::cout<<"main: pMyServer->Visible() OK!\n"<<std::endl; Sleep(100000);CLEANUP02: std::cout<<"main: calling IMyServer::Release"<<std::endl; pMyServer->Release();CLEANUP01: std::cout<<"main: calling IUnknown::Release"<<std::endl; pUnk->Release();CLEANUP00: std::cout<<"main: calling IClassFactory::Release"<<std::endl; pCf->Release();EXIT00: CoUninitialize(); std::cout<<"main: We are done!"<<std::endl; return 0;}//*********************************************************************The icon appears on the system tray and the message popup works withmouseover, but the animation does not work.With regards to launching this COM server from a console app, is this a sideeffect? I would think the animation would work regardless of whether Icalled the COM server from a windowed app or a console app.Thanks,Albert