Newsgroup: it.comp.lang.visual-basic
Titolo: Subclassare il menu di internet explorer. Si può?

Salve gente,
Mi servirebbe ELIMINARE del tutto il menu che viene aperto con il tasto
destro del mouse su internet explorer. Quello che permette di aprire i
link, di salvare le immagini etc etc. Questo perchè ne voglio far aprire
uno mio. Premetto che ho inserito il controllo OCX in un form e non voglio
naturalmente fare il subclassing di un'istanza di IE.
Ho provato con Hook e Subclassing vari ma niente.
Alla fine ho pensato di utilizzare le funzioni API GetMessage,
TranslateMessage e DispatchMessage.
La cosa funziona a metà, perchè il mio menu si apre, ma quando clicco col
tasto sinistro su un elemento del mio menu che dovrebbe eseguire
l'operazione richiesta, viene anche aperto il menu originale... Cosa posso
fare?
Questo è il codice
-------------------------------
While GetMessage(msgTemp, frmMain.hwnd, ByVal 0&, ByVal 0&) <> 0
    TranslateMessage msgTemp
    Select Case msgTemp.message
        Case WM_RBUTTONUP
            PopupMenu mnuFile(0)
    End Select
    DispatchMessage msgTemp
    DoEvents
Wend
-------------------------------------------------
Grazie anticipatamente
Andrea Palmatè

un trucco ci vuole...
un trucchetto da 2 soldi 2...
:)
--[GbC]--
PS... ora non ho tempo...

> PS... ora non ho tempo...
Dicono tutti cosě...

 Wend
non ho mai usato GetMessage, ma ad occhio direi che DispatchMessage msgTemp
andrebbe nel Case Else. Funziona?  :)
Faber

Secondo me non funziona (però non l'ho provato).
Webbrowser è un OCX e i messaggi se li gestisce in proprio, non puoi
intercettarli (l'hwnd cambia ad ogni pagina, fra l'altro).
Si può fare in due modi:
(a) scrivendo una procedura specifica per le classi del Webbrowser che
vengono chiamate quando avviene l'evento (purtroppo non si può fare in VB
perché non c'è compatibilità a questo livello e non è possibile derivare una
TLB, quindi va fatto in C++). Ci sono però delle dll di pubblico dominio sul
sito MS.
(b) con un hook che intercetti i messaggi del thread (ma così intercetta
qualsiasi mousedown: la maggior parte del codice serve poi per sapere se il
mousedown è avvenuto sul webbrowser o un altro oggetto). Tempo fa è una
soluzione che ho adottato e funziona.
----------------------------------------------------------------------
Stefano Minardi
Zetesis: 
zet...@mclink.it
----------------------------------------------------------------------

 soluzione che ho adottato e funziona.
A me andrebbe bene anche questa. Non è che mi aiuti? ;-))
Grazie.
Andrea

 Faber
Ciao


appunto! hai provato mettendolo nel Case Else?
Faber

> A me andrebbe bene anche questa. Non è che mi aiuti? ;-))
Volentieri, ma non è una cosa che si fa in due minuti e ora non ce la faccio
proprio. Ti consiglio intanto di ripescare il thread sul subclassing dove ci
sono spunti per l'implementazione di questa tecnica e anche di vedere se
qualcuno ha un'idea più semplice da realizzare.
Dovresti anche cercare sul sito MS la dll WBCustomizer (se non erro) che ti
permette di risolvere il problema velocemente ed efficacemente (usa la prima
tecnica che ti avevo descritto).


 Faber
Ciao

Io l'ho fatto dall'interno della pagina con VBScript e un OCX (ho proprio
sostituito del tutto il menu - il controllo č IEPopupMenu, installato di default
con IE4 e disinstallato automaticamente, se presente, con IE5 [ma reinstallabile
manualmente]), ma non puoi comunicare con l'esterno... e non puoi nemmeno,
dall'esterno, alterare l'HTML della pagina. Con VBScript, che usa lo stesso
host, č tutto molto, ma molto piů facile

 host, č tutto molto, ma molto piů facile
Ma con VBScript puoi solo metterlo in una pagina tua. Non certo pagine
caricate da altre parti.. 
vero?
Andrea

Esatto, ma se fai, ad esempio, come i server degli host gratuiti che aggiungono
del codice alla fine del file per mostrare banner pubblicitari, puoi farlo
eccome, solo che è un casino, dovresti creare un vero e proprio server web
intranet


intranet
Troppo incasinato. Ho risolto con il Subclassing. Il problema era che
io pensavo al messaggio RBUTTONDOWN e non a quello UP. E poi quel
cacchio di WebBrowser mi ha fatto perdere una giornata intera per un
altro problema. Ah.. la Microsoft
Ciao