Newsgroup: it.comp.programmare.win32
Titolo: Modificare l'editor di TUTTI i TextBox di Windows (una versione a scelta)

Ci sono alcune cose nell'editor dei TextBox di Windows che mi riescono
terribilmente irritanti.
Siccome la quasi totalita` dei programmi Windows li usa tal quali, la quasi
totalita` dei programmi Windows mi riesce terribilmente irritante.
Parlo di cose come l'avanti/indietro parola; l'assenza di una funzione di
conversione maiuscolo/minuscolo; o semplicemente la possibilita` di usare
altre combinazioni di tasti rispetto a quelle standard. Tutte quelle
cosette, insomma, che rendono la vita piu` semplice e gustosa.
In alcuni casi e` possibile (parzialmente) intervenire a livello di
applicazione (se chi ha scritto l'applicazione e` stato sufficientemente
magnanimo da permetterlo); in altri (tipicamente, nelle finestre di
dialogo) non c'e` niente da fare.
Ora, e` possibile risolvere in qualche modo? Chesso`, mettere un hook in
ascolto non su una specifica finestra, ma a livello di sistema; sostituire
paro paro la funzione incriminata nella dll di sistema relativa....
qualunque cosa (a cambiare sistema operativo ho gia` provveduto, ma in
alcune situazioni non posso fare a meno di usare Windows).
Ciao.

 paro paro la funzione incriminata nella dll di sistema relativa....
Si`, puoi agganciare un hook di WH_SHELL (residente in
una DLL) che verra` chiamato, in particolare, ad ogni
creazione di finestra (codice HSHELL_WINDOWCREATED); esso
puo` verificare la window-class della nuova finestra
(con GetClassName) e se del caso subclassarla (un caso
del tutto normale di subclassing, come quello che
esemplifico al mio tutorial 
http://aleax.supereva.it/
).
E` tutto sommato un uso abbastanza tipico degli hook e
del subclassing, anche se un po' + "spinto" della media.
Alex

esemplifico al mio tutorial 
http://aleax.supereva.it/
).
Fantastico!, anche se ha l'aria di essere piuttosto complicato (non che mi
aspettassi una soluzione semplice, ovviamente; anzi, per la verita` non mi
aspettavo nessuna soluzione, e soprattutto non cosi` in fretta),
soprattutto considerato che io degli hook so a mala pena che esistono.
Tra l'altro, leggo:
HSHELL_WINDOWCREATED	A top-level, unowned window has been created.
Questo comprende anche i control TextBox? Non sono, normalmente, posseduti
da altre finestre?
Comunque, a parte questa perplessita`, se ho capito bene, una volta scritte
le estensioni con le funzionalita` che mi interessano, ben stivate nella
loro DLL, dovrei creare un eseguibile che attacca il gancio a quest'evento
di WH_SHELL; da lanciare, immagino, all'avvio di Windows, o quando mi fa
comodo avere a disposizione le mie modifiche.
Pero`.... "ad ogni creazione di finestra".... d'accordo che il piu` delle
volte si trattera` di una semplice confronto di stringhe, ma e` piuttosto
seccante. Non c'e` modo di metterlo in qualche posto piu` in basso nella
catena degli eventi?
Io, per esempio, nelle mie folli farneticazioni, avevo inizialmente pensato
di intercettare (non so poi come) gli eventi di tastiera a cui sono
interessato, a chiunque diretti, e quindi quindi fare certe cose se sono
dentro un TextBox. Mi sa pero` che e` ancora peggio.
Se no, mi ci vorrebbe una sorta di "subclassing definitivo": non dinamico,
all'atto della creazione di ogni finestra, ma statico, una volta per tutte,
cosi` che quando viene generato un TextBox ha gia` come window procedure la
mia procedura.
Insomma: DOVE ACCIDENTI SONO I SORGENTI DI WINDOWS?
Se la creazione delle finestre fosse organizzata in un certo modo, pero`,
potrebbe anche non essere cosi` impossibile. C'e`, per esempio, un posto
unico, in cui staticamente sia archiviata l'informazione su quale window
procedure associare a quale classe di finestre?
Oppure, il modulo in cui e` l'editor dei TextBox e` sufficientemente
isolato da poter dire "me lo riscrivo"?
Mi rendo conto che, particolarmente per uno che ha detto che gli risulta
complicato attaccare un hook, sono obiettivi folli, ma e` anche per tentare
di capirci qualcosa di piu` sul modo in cui e` organizzata la gestione
delle finestre in Windows.
Ciao.

 delle finestre in Windows.
Secondo me non c'e` un approccio migliore di quello del subclassing
alla creazione di ogni finestra di tuo interesse.  Anzi, in fase di
sviluppo sarebbe sicuramente meglio andare piu` "mirati", su di un
singolo processo in qualche modo identificato, se no un piccolo bug
in codice cosi` pervasivo ti crasha permanentemente...
Alex

in codice cosi` pervasivo ti crasha permanentemente...
Ci mancherebbe.... penso che iniziero` ancora prima, verificando a livello
di applicazione le estensioni che vorrei creare.
Ciao.