Newsgroup: it.comp.programmare.win32
Titolo: Messaggi tra applicazioni

Ciao ragazzi, ho due mie applicazioni scritte in Delphi, una delle due sta
nella tray icon e controlla se sul server č stata messa o meno una nuova
versione dell'altra applicazione.
Se sě dovrebbe far capire all'altra che tale evento si č verificato. Non
voglio usare thread, per adesso. Avrei quindi pensato che l'applicazione che
ho nella tray icon mandasse un message all'altra e che essa, quando lo
riceve si comporti di conseguenza.
Qualcuno sa come potrei fare? MAPI?
Grazie


Se devi fare un semplice scambio di infrmazioni fra due applicazioni in
esecuzione sulla stessa macchina, allora win32 prevede il messaggio
WM_COPYDATA (non so come lo si possa usare in delphi).
Purtroppo però il tuo caso mi sembra diverso, tu devi periodicamente
controllare
su un'altra macchina (server) se c'è una nuova versione... e questo richiede
un
polling. In alternativa puoi utilizzare dei socket in attesa sulla stessa
porta in tutti
i client, a questo punto il server notifica ai client la presenza delle
nuove versioni
con un broadcast.
Federico Molara.

No no, il controllo del fatto se ci sia una nuova versione o meno sul server
l'ho già implementato nel programmino che sta nella tray icon, il problema è
solo come fare in modo che, quando questo programmino se ne accorge, avverta
l'altro tramite un messaggio.
Grazie comunque, Ciaoux



Un metodo semplice semplice anche se non molto elegante è cercare
l'altra finestra con una FindWindow e poi mandarle un messaggio con
una SendMessage.
Usa un numero di messaggio superiore a WM_USER, da MSDN
|WM_USER through 0x7FFF Integer messages for use by private window classes.
Quindi puoi usare un numero >= di WM_USER come identificativo del tuo
messaggio.
-- 
Marco Barisione

 wrote in message
news:a3m69q$i3a$1...@newsreader.mailgate.org...


 messaggio.
ma visto che sono due applicazioni separate non č piů sicuro un
RegisterWindowMessage ?
Pela

Qualcuno sa come potrei fare? MAPI?
Non serve scomodare le MAPI, ti basta far elaborare
all'applicazione in attesa di messaggi un messaggio
registrato con RegisterWindowMessage (la puoi usare in
entrambe le applicazioni, perche' comunque restituisce lo
stesso valore, univoco).  L'identificatore restituito da
RegisterWindowMessage ti serve come identificatore di
messaggio da usare con PostMessage dall'applicazione che
deve notificare.  Bada bene a non usare SendMessage, in
quanto l'evento OnMessage dell'oggetto ApplicationEvents che
andrai ad utilizzare "sente" solo i messaggi postati nella
coda dei messaggi.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

RegisterWindowMessage ?
Più sicuro non so visto che non penso che ci siano problemi se
entrambe le applicazioni sono scritte dalla stessa persona e usano lo
stesso valore poer il messaggio.
Comunque in effetti mi sembra più "bello" usare la
RegisterWindowMessage.
-- 
Marco Barisione

coda dei messaggi.
Con Delphi non è possibile ricevere i messaggi definiti dall'utente
inviati con SendMessage?
-- 
Marco Barisione (ICQ 84277092)

inviati con SendMessage?
Certo che e' possibile.  Solo che l'evento OnMessage
dell'oggetto ApplicationEvents non puo' scatenarsi
all'invocazione della wndproc da parte del sistema
(ovviamente), ma solo quando un nuovo messaggio viene messo
in coda.


 ha scritto nel messaggio
news:75dt5ukhf7rulgnhv...@4ax.com...


 Ho provato ad usare la FindWindow ma ritorna sempre 0!!!!!
Non capisco perche' devi complicarti la vita, quando
bastano due righe di codice:
www24.brinkster.com/walkietalkie/appcomm.zip
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:a3maps$ksn$1...@newsreader.mailgate.org...

Guarda che il messaggio WM_COPYDATA è fatto apposta.
Usa una FindWindow(), come ti diceva M. Biasone, quando hai
l'handle della finestra invii il messagio, senza bisogno di
RegisterMessage()
o WM_USER+qualcosa.
Federico Molara.

 
www24.brinkster.com/walkietalkie/appcomm.zip
Grazie mille Andrea ho provato e funziona ma ho un piccolo dubbio, dimmi
se sbaglio:
Se gestisco l'applicationOnMessage come ho fatto copiando dal tuo 
esempio, non rallento l'applicazione?
Solo per sapere, comunque grazie ancora.


 wrote in
news:9wA78.25747$
om6.6...@news1.tin.it
: 

Come minimo devi usare un valore maggiore di WM_APP e non di WM_USER 
(visto che i messaggi WM_USER+x sono utilizzati anche dai controlli, 
come specificato nell'help di msdn relativo a WM_USER).
Usare RegisterWindowMessage ti protegge da altre applicazioni che 
mandano WM_APP+x in broadcast (purtroppo c'č gente troppo pigra per 
fare una findwindow) ed č sicuramente consigliabile (anche se, 
purtroppo, nessuno vieta a un applicazione scritta con i piedi di 
mandare in broadcast messaggi con id maggiore di 0xC000).
Visto che il messaggio non deve "trasportare" nessun'altra informazione 
puň essere utile aggiungere una "firma" (tramite valori particolari di 
wparam e lparam) per proteggersi dai casi di cui sopra.
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 esempio, non rallento l'applicazione?
No, per niente. Si tratta, semplicemente, di aggiungere 
un controllo in piu' nella window procedure associata al 
form principale, ma e' assolutamente irrilevante dal punto 
di vista delle prestazioni.


Ok messaggio ricevuto.
Il mio dubbio era venuto fuori leggendo l'help dell'evento OnMessage del
TApplicationEvent :
Caution: Thousands of messages per second flow though this event. Be careful
when coding the handler, because it can affect the performance of the entire
application.
Da qui la mia domanda.

 application.
E' chiaro che, passando per l'evento migliaia di messaggi,
bisogna porre attenzione a come si scrive l'handler, in 
quanto per tutto il tempo di elaborazione del messaggio,
l'applicazione e' bloccata.  Se l'elaborazione del messaggio
si limita ad attivare un flag di ricezione e a riempire
un buffer interno con i dati ricevuti, non c'e' alcun 
problema.


Ok, capito. Grazie ancora per  l'attenzione, ciao