Newsgroup: it.comp.programmare.win32
Titolo: Come faccio ad intercettare un evento in C++ Builder?

Dopo aver postato questo messaggio al newsgroup sbagliato, spero di aver
raggiunto quello giusto!
Uso di norma il Borland C++ Builder della Borland, e vorrei creare
un'applicazione che si avvia e resta inattiva sino a che non viene avviato
un altro programma, nel caso specifico accesso remoto.
Al verificarsi di tale condizione il programma dovrebbe effettuare
un'operazione e tornare inattivo sino al momento in cui non termina
l'esecuzione di accesso remoto, quando effettuerebbe delle altre operazioni.
Sapete dirmi come si fa?
Inoltre, chi è che sa come si fa a mettere un'icona nel system tray?
Ciao a tutti e grazie anticipatamente a chi vorrà aiutarmi.

 Inoltre, chi è che sa come si fa a mettere un'icona nel system tray?
Questo tema e` stato svolto recentissimamente in questo stesso
gruppo; vedi ad esempio il mio dettagliato post di subject:
    Re: Prg nella tray bar
postato in data:
    Tuesday, January 04, 2000 21:22
(in generale, e` buona norma dare un'occhiata ai post correnti
su di un gruppo prima di postarvi).  Se il tuo provider non ha
piu` questo post (all'anima della velocita`di expire delle news!-),
deja.com
 (
http://www.deja.com/home_ps.shtml
) ti permette di
cercare e consultare post passati.  Ad esempio, la query:
http://www.deja.com/[ST_rn=ps]/qs.xp?ST=PS&QRY=prg+tray+bar&OP=dnquery.xp&authors=al...@magenta.com
(su UNA SOLA LINEA, mi raccomando -- e` _una_ URL!!!) ti trovera`
e ti permettera` di leggere l'unico, specifico post che ho appena
nominato.
Alex

 (deve vivere in una DLL...) a vari tipi di operazioni.
Chiedo scusa se a qualcuno questa mia domanda sembrerà banale, ma dal
momento che non ho molta esperienza con le dll e con gli hook, posso
chiedere cosa significa esattamente "deve vivere in una dll..."?
Grazie per l'aiuto
Massimo Ungaro

 wrote in message news:5h_d4.11934$I3.1...@news.infostrada.it...

La tua procedura di gancio (hook) verra` eseguita nello stesso
processo dove avviene l'evento che essa "aggancia" (==in ciascuno
dei processi dove avvengono tali eventi).
Chiaramente, questo non sarebbe possibile se la tua procedura
vivesse in una EXE, perche` di EXE, per processo, puo` essercene
una sola!
Quindi, la tua procedura deve invece stare in una DLL (se il
gancio e` 'globale', come mi pare debba essere nel tuo caso).
Alex

 wrote in message
85cacg$ld9$1...@serv1.iunet.it...
: La tua procedura di gancio (hook) verra` eseguita nello stesso
: processo dove avviene l'evento che essa "aggancia" (==in ciascuno
: dei processi dove avvengono tali eventi).
:
: Chiaramente, questo non sarebbe possibile se la tua procedura
: vivesse in una EXE, perche` di EXE, per processo, puo` essercene
: una sola!
Ma se l'hook deve essere attivo SOLO durante l'esecuzione del tuo EXE, puo'
essere incorporata.
: Quindi, la tua procedura deve invece stare in una DLL (se il
: gancio e` 'globale', come mi pare debba essere nel tuo caso).
Come sopra anche per l'hook globale.
Esempio: la funzione Capture Screen su molti prg di grafica e' un hook di
tastiera GLOBALE (funziona con qualunque finestra attiva), e deve essere
attivo solo durante l'esecuzione del prg.
Diverso e' (ovviamente) un hook globale su prg non tuoi: ad esempio
aggiungere una funzione  ad Explorer, come la pressione di un tasto per
creare una nuova subdir nella dir corrente. In questo caso la DLL e'
obbligatoria
--
____ __         __,_      __  _____
\  _\_ \  ___ _/ / /\  /\/  \/ / _/ It is better to reign in Hell
 \  _ \ \/ _ '/ , |\ VV / / / / _/ Than serve in Heaven.- MILTON
  \_,_/\_\_,_/_/|_| \__/\__/_/_/
      -- the one and only --     e-mail : 
blak...@tiscalinet.it
                                ICQ    : 59394345
The UNIX Guru's View of Sex:
$unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

 obbligatoria
E forse sarebbe meglio presentarla come una Shell Extension, piuttosto
che non come un Hook, ma questo e` un altro discorso.
Alex

Ti rispondo sinteticamente.
1 - Esistono due API, poco note e documentate su msdn, ma su cui Richter e
Pietrek hanno scritto tonnellate di articoli: ReadProcessMemory e
WriteProcessMemory. Entrambi accedono allo spazio di indirizzamento di
qualsiasi processo (i thread condividono quello del processo)
2 - la parte bassa della memoria di Win9x contiene una copia della memoria
di sistema della VM #0, cioe' quella del kernel, user, gdi, vxd e dll
varie. tramite le due funzioni sopra, e' POSSIBILISSIMO fare quello che tu
ritieni impossibile. E infatti tale metodo e' piu' volte descritto nei vari
articoli di cui sopra.
3 - sono anche alla base di ogni sistema di IPC portabile da win9X a Nt,
visto che le named pipe non lo sono e le pipe sono molto limitate.
4 - visto che hai una vasta cultura vasta, e che la tua opinione viene
considerata, ti consiglio di usare toni meno decisi, visto che oltre a te
convinci anche altri che cio' che dici e' cosi *PUNTO*, tanto per citarti.
Nessuno puo' sapere tutto...
Regards


 Nessuno puo' sapere tutto...
Verissimo che "nessuno puo` sapere tutto" (soprattutto quale e quanta
varieta` di bug e difetti di progetto possano essere presenti su diverse 
implementazioni di Win32!), e questo e` ovvio a qualsiasi lettore dotato
di buon senso, quindi non c'e` bisogno di dirlo.  I toni veramente decisi
venivano dalla _documentazione_ Win32 che ho citato, quindi, se non
appropriati (cosa ancora del tutto discutibile) costituiscono solo l'ennesimo
bug di certe implementazioni di quelle specifiche.
Visto che i toni che usi tu paiono essere altrettanto decisi (ad esempio
su it.comp.lang.c++ ti ho visto postare in risposta puri frammenti di
codice [che NON facevano quel che si chiedeva...:-)], si puo` essere
piu` decisi di cosi`...?-), immagino che la tua strategia preventiva di
difesa sia quella di *impedire* che la tua opinione "venga considerata".
In effetti, se continui a infarcire i tuoi post di tante inesattezze tecniche
quanto mediamente stai facendo, penso che il pericolo di acquisire
credibilita` tu possa dunque serenamente scongiurarlo:-).
Alex