Thx...I got it working.
The source code got mangled, but I spotted a call to Sleep in there. This
is a big no-no for a single-threaded apartment (which you joined when
calling CoInitialize). You need to run a message pump instead - see
GetMessage, DispatchMessage (yes, console applications can have a message
pump).
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925
Albert Gomez <albertg@qualitau.com> wrote:
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