Newsgroup: it.comp.programmare.win32
Titolo: operazioni all'apertura di un'istanza del browser

ciao a tutti
Vorrei creare un programma che esegue un'operazione ogni qualvolta il
browser viene aperto.
Cioč, per ogni istanza del browser che viene aperta dall'utente devo
ottenere l'handle del processo (o del thread) o meglio della finestra appena
creata.
Io avevo pensato di usare gli hook, ma non ho idea di quale usare e dove
installarlo.
Mi potete dare una mano ?
Ciao
Grazie mille

 wrote in message 8jdob4$c8l$1...@nslave2.tin.it...

Allo scopo che richiedi esistono apposta i 'browser helper objects'.
OK, funzionano solo con Internet Explorer, ma secondo le ultime
statistiche questi sono l'86% dei browser oggi usati in tutto il
mondo (su piattaforma Win32 immagino la % sia maggiore:-).
Vedi su MSDN la Q176792, la Q179230, e la IEHelper.exe che l'accompagna,
che ti istalla i sorgenti di un B.H.O. d'esempio.
Riassumendo: ogni volta che viene creata un'istanza del browser
(IE4 o piu`), IE consulta la registry, specificamente le sottochiavi
di:
HKLM\SOFTWARE\Microsoft\Windows
       \CurrentVersion\Explorer\Browser Helper Objects
ciascuna sottochiave che trova e` il CLSID di un oggetto COM che
IE istanzia, con interfaccia IObjectWithSite, e di cui poi
chiama il metodo SetSite passandogli l'IUnknown corrispondente
all'IWebBrowser2 dell'IE stesso.  Ricorda solo che, se usi Active
Desktop, "viene creata un'istanza del browser" anche quando apri
un qualsiasi directory da shell, e in vari altri casi!-)
Alex

 wrote in message
8jdro0$eu4$1...@nslave1.tin.it...


Quindi si tratta di COM e roba del genere. Il mio problema č che il
programma che sto facendo giŕ l'ho iniziato a scrivere in C utilizzando
Win32SDK , inoltre non ho molta dimestichezza con il COM. Un metodo
alternativo non esisterebbe ?
Io avevo pensato ad un thread che controlla con un ciclo le finestre attive.
Se questa finestra attiva corrisponde a quella del browser, restituisce
l'handle all'applicazione altrimenti continua il proprio ciclo.
Non so perň, questo metodo potrebbe rallentare di molto il sistema ? tu che
dici ?
Ciao
e grazie mille di nuovo.

 dici ?
Si`, penso che questo metterebbe in ginocchio la macchina.  Un
po' meno peggio SetWindowsHookEx con WH_SHELL.  Di hook si e`
parlato molto in questo gruppo, anche di recente, per cui ti
consiglio di dare un'occhiata all'ultimo mesetto circa di traffico
con 
deja.com
 cercando appunto la parola "hook".  Certo molto
meno efficiente dell'uso diretto dei browser helper, ma di piu`
rispetto al "polling".
Alex


Anchio avevo pensato di usare l'hook WH_SHELL. Però non so dove installarlo,
se a livello di sistema o in qualche punto particolare.
Un'altra alternativa a cui avevo pensato era l'hook WH_MOUSE , applicato
alla barra delle applicazioni incluso il menu start e al desktop. e
controllare ad ogni click o doppio click sul tasto sinistro che nella lista
dei processi o thread attivi compaia il browser.
In questo caso però non so a quale thread aggangiarlo per controllare la
barra delle applicazioni e del desktop.
Per quanto riguarda 
deja.com
 , grazie per il link non sapevo esistesse.
Oki
Sempre troppo gentile Alex
Ciao e grazie ancora

 barra delle applicazioni e del desktop.
Potresti scoprire quali thread possiedono queste due finestre, ma mi
sembra una strana idea.  Chi ti dice che qualcuno clicchi li`, tutto
sommato?  Il browser puo` spesso partire da una qualsiasi altra finestra,
no?  Ad es., doppio clic su qualsiasi .htm da gestione risorse.
Alex