Newsgroup: it.comp.programmare.win32
Titolo: notifiche...

salve a tutti...
avrei bisogno di avere una notifica quando una applicazione sta x essere
eseguita...
ho provato hookando da una dll e intecettando tutti i wm_create ma
ovviamente applicazioni che nn fanno uso di finestre nn "cadono" nel
filtro...
altre idee?
grazie in anticipo e buon lavoro a tutti!
ciao!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:81Z72Z191Z18Y1...@usenet.libero.it...



ci evevo pensato ma nn so che messaggio "catturare"...
cioč, se uso un hook di tipo wh_getmessage filtro tutti i messaggi di
sistema... ma quale č quello che mi indica che una applicazione sta x essere
lanciata?
grazie mille ancora!
Marco


 lanciata?
Il primo messaggio che ti arriva per quel processo: puoi conservare una
mappa di PID + bool che indica se hai già processato il primo msg per quel
processo.
L'uso di questo hook può ridurre le prestazioni del sistema, come avrai già
riscontrato nella documentazione.


 riscontrato nella documentazione.
già... :(
ciao e grazie!!


 help!!
Certo, ma puoi sempre partire da GetCurrentProcess per avere informazioni
sul processo in cui viene eseguito il tuo codice.

se non vuoi una precisione assoluta su tutti i processi puoi usare
l'enumerazione window con timer ciclico discreto,
per sapere se passa anche la madonna per un centesimo di nanosecondo č
meglio se segui altre strade ;)

 meglio se segui altre strade ;)
può provare a fare un'enumerazione continua con un thread che "si blocca",
per così dire, e la cui priorità è impostata al massimo a
THREAD_PRIORITY_BELOW_NORMAL (altrimenti il pc si rallenta); per sbloccare
il thread quando è ora di terminare il programma, può usare un flag che il
thread controllerà alla fine di ogni ciclo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 essere eseguita...
non c'è un modo. Ma se ci dici a cosa ti serve, forse si può pensare ad 
altro
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.4. C, C++ and ASM developers
                               and beta testers are welcome!


mi servirebbe bloccare qualsiasi applicazione che sta x essere eseguita dal
sistema...
pensavo di essere notificato quando una applicazione stava x essere lanciata
e poi di mettere in pausa i suoi thread...
avete idee?
grazie ancora a tutti!
Marco


 avete idee?
come ti ho gią detto: puoi provare a creare un altro thread che faccia una
enumerazione in continuazione di tutti i processi e ne tiene traccia; alla
fine di ogni ciclo il thread controlla un flag che serve per indicare se
il thread deve terminare (altrimenti si blocca x sempre).
per evitare che questo fatidico thread blocchi il pc, devi impostarne la
prioritą come THREAD_PRIORITY_BELOW_NORMAL.
ciao.


 Quante applicazioni di questo tipo credi di trovare ? ;-)
tante. Tutti i programmi senza GUI



mi sembra una soluzione molto dispendiosa in termini di utilizzo di cpu..
no?
forse hookando l'api CreateProcessW potrei farcela?
se nn sbaglio tutte le varie
createprocess/createprocessa/winexec/shellexecute alla fine fanno una
createprocessw no?
ciao!


 tante. Tutti i programmi senza GUI
Il fatto che non abbiano GUI non significa che non abbiano message loop.


 createprocessw no?
Certo, anche questa può essere una soluzione, ma ti prego di perdonare la
mia ignoranza in merito: cosa intendi per "hookare una funzione API"? Ci
sono delle API per hookare della altre API? Oppure devi sostituirla con
una tua funzione "truccata" che poi chiama l'originale, o che altro?
Ti ripeto, scusa la mia ignoranza... :-)


 Il fatto che non abbiano GUI non significa che non abbiano message loop.
e comunque in genere le applicazioni che vanno in background, "non hanno
GUI" solo apparentemente, per così dire: in realtà generalmente hanno
almeno una finestra invisibile per ricevere delle notifiche, ad esempio da
un timer o da un'icona della system tray (quelle vicino all'orologio).
ciao


 Ti ripeto, scusa la mia ignoranza... :-)
figurati, l'ignoranza qua è mia ;)
cmq la seconda che hai detto :)
vedrò di studiare la soluzione migliore...
grazie mille dei consiglio ragazzi :)
ciao


 cmq la seconda che hai detto :)
cioč sostituire la funzione originale; ma in che modo? devi forse creare
una DLL che riproduca l'interfaccia di kernel32.dll nella quale metti la
tua funzione truccata ???  O_O
