Newsgroup: it.comp.lang.visual-basic
Titolo: Intercettare la minimizzazione di una applicazione esterna: subclassing?

Devo intercettare la minimizzazione di una finestra che fa parte di
un'applicazione esterna (non del mio progetto VB).
In pratica voglio che, alla pressione del tasto minimizza, la finestra
venga nascosta e aggiunta alla tray bar.
Ora, riesco tranquillamente a nascondere/mostrare una finestra esterna
e ad aggiungere una icona nella tray bar.
Quello che non riesco a fare e intercettare la pressione sul tasto
minimizza della barra del titolo della finestra esterna. Penso che si
debba fare con un subclassing, ma la tecnica "classica" funziona solo
per finestre interne all'applicazione VB.
Facendo qualche ricerca sembra che il problema non sia per niente
semplice (almeno quello del subclassing di finestre esterne), anche se
è possibile visto che ci sono programmi che loggano tutti i messaggi
di tutte le finestre.
Magari il mio problema può essere risolto in qualche altro modo,
evitando così il subclassing.
Potrebbe andare bene anche aggiungere un tasto custom alla titlebar
dell'applicazione esterna che faccia la minimizzazione in tray bar. Ma
anche per questo sembra serva un subclassing.


Il SubClassing funziona con TUTTE le Finestre dotate di Handle... il
fatto è che devi recuperare quello corretto...!
Puoi usare FindWindow e passare la Caption della Finestra del tuo
applicativo per recuperarne l'hWnd... oppure vedi tu...
Ottenuto l'handle devi farti restituire i messaggi di quello da
qualche parte nel tuo applicativo... ed in particolare intercetti il
Messaggio:
   Select Case uMsg
      Case WM_SYSCOMMAND
         Select Case wParam
            Case SC_MOVE
            Case SC_MINIMIZE
                 ' Questo è quello che serve a te....
                 ' invece di eseguirlo fai eseguire la procedura di
Hide
                 ' con ShowWindow e la rendi nascosta, quindi
implementi
                 ' la TryBar con la possibilità di ripristinare....
sempre con ShowWindow...
            Case SC_MAXIMIZE
            Case SC_CLOSE
            Case SC_RESTORE
            Case Else
        End Select
    End Select
Ciao
@Alex

 applicativo per recuperarne l'hWnd... oppure vedi tu...
Sì, questo lo faccio già. Infatti ora riesco tranquillamente a 
nascondere/mostrare la finestra dell'applicazione esterna cliccando su un tasto 
della mia applicazione VB.
Comunque penso che la soluzione al mio problema sia descritta qui, ed 
effettivamente non è banale:
http://www.codeproject.com/dll/subhook.asp


http://www.codeproject.com/dll/subhook.asp
Non so se sia applicabile al tuo problema, ma io con la EnumWindows riesco a
vedere gli handles di tutte le finestre e anche a spostarle.
Ti posto il programmino che ho fatto tempo fa per spostare la finestra di un
programma che minimizzato mi spariva fuori dal video, cliccando sul nome ti
porta in alto a sinistra la finestra, forse ti può aiutare.
http://www.mybigdir.com/5827
--
ciao
  Stefano

 ha scritto nel messaggio
news:iLYui.83897$%k.22...@twister2.libero.it...> Alessandro Baraldi ha

Vedi se questo 3D può darti chiarezza, mi pare ci sia un semo che SubClassa
NotePad....:
http://www.vbforums.com/showthread.php?t=322261
Saluti
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 
http://www.mybigdir.com/5827
Riesco a farlo senza subclassing perchè vuoi solo spostare la finestra (con la 
SetWindowPos() o qualcosa del genere). Intercettare la pressione sul tasto 
Minimizza della barra del titolo è roba da subclassing, che io sappia.

Minimizza della barra del titolo è roba da subclassing, che io sappia.
Si, perchè devi intercettare un evento che avviene in una finestra esterna al
programma.
Credo che dovresti usare la CallWindowProc per subclassare la finestra, tipo
questa app. qui:
http://www.vb-helper.com/tutorial_subclassing.html
e usare le costanti WS_MINIMIZEBOX o WS_MINIMIZE insieme a
WM_SYSCOMMAND
qui ne trovi parecchie:
http://forum.html.it/forum/showthread.php?threadid=1085284
--
ciao
  Stefano