Newsgroup: it.comp.lang.c++
Titolo: eseguire un programma come icona accanto all' Orologio

Prima di tutto saluti a tutti.
Il mio problema č poter eseguire un programma che parta all'avvio (quindi in
esecuzione automatica) e che rimanga sempre attivo in basso a destra,
accanto all'orologio, aspettando di uscire con una finestra in certe
condizioni oppure al suo richiamo tramite doppio click. L'ambiente di
sviluppo č il visual C++.
Non so se sono riuscito a farmi capire comunque ringrazio tutti per
l'eventuale risposta.

sviluppo č il visual C++.
Ci sono delle funzioni della "shell" che fanno quello che cerchi. Il
meccanismo e' dire al sistema di creare un'icona nella barra delle
applicazioni e quindi di rispondere a dei messaggi (che come al solito
arrivano ad una finestra).
Le funzione coinvolta e' "Shell_NotifyIcon" che puo' funzionare in diversi
modi; io l'ho provata nel modo che segue.
Per creare l'icona scrivi qualcosa del genere:
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;   // handle della tua finestra (quella principale ad es.)
nid.uID = 1968;        // un codice identificativo dell'icona
nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE ; // opzioni
nid.uCallbackMessage = 9947;   // il messaggio che vuoi ricevere
nid.hIcon = LoadIcon(NULL, IDI_HAND);    // L'icona da visualizzare
strcpy(nid.szTip, "Mail Agent Active");        // Il testo "ToolTip" che
              // compare automaticamente quando passi sopra l'icona
Shell_NotifyIcon(NIM_ADD, &nid);
Per distruggere l'icona.
Shell_NotifyIcon(NIM_DELETE, &nid);
Nella procedura di gestione dei messaggi riceverai un messaggio in diverse
situazioni, con i seguenti parametri (vedi l'help per i dettagli):
- uMsg (codice messaggio): quello specificato nella creazione (9947 nel mio
  esempio)
- lParam: codice dell'evento (ad es. WM_LBUTTONUP, WM_RBUTTONUP, ecc..)
- wParam: eventuali parametri aggiuntivi
Naturalmente la finestra principale (indispensabile almeno per ricevere i
messaggi) puo' tranquillamente non essere visualizzata all'avvio del
programma, ma comparire sulla pressione di un tasto del mouse sull'icona.
Ciao,
Angelo.

condizioni oppure al suo richiamo tramite doppio click. L'ambiente di
L'API Shell_NotifyIcon (e` dichiarata in shellapi.h) ti permette di
aggiungere un'icona alla "taskbar status area" (o di cancellarla
o modificarla se l'hai gia` aggiunta, secondo il primo parametro,
NIM_ADD, NIM_DELETE, NIM_MODIFY).  Il secondo parametro
punta ad una struttura NOTIFYICONDATA, con la quale
passerai la HICON da usare, la HWND della tua finestra
principale (che starai naturalmente tenendo nascosta, cioe`
non visibile), l'identificatore WM_quelchevuoi del messaggio
che vuoi che lo shell ti spedisca quando avvengono eventi
di mouse sul rettangolo di detta icona, il testo da mostrare
come tooltip su di essa, e un tuo ID per l'icona (phew!).
Quando succedono eventi di mouse sul rettangolo dell'icona
cosi` mostrata sulla taskbar, arrivera` alla tua finestra il
WM_qualcosa da te richiesto (ad esempio, WM_APP),
con l'ID da te scelto per l'icona in wParam, e il codice
WM_veromessaggiodimouse in lParam (ad esempio,
lParam sara` WM_LBUTTONDOWN se l'utente clicca
sulla tua icona nella taskbar il bottone sinistro del topo,
WM_RBUTTONDOWN se clicca il destro, eccetera).
Alex