Newsgroup: it.comp.lang.delphi
Titolo: Aggiornare finestra di explorer

A tempo perso ho fatto un'applicazioncina che permette di mettere uno sfondo
ad una cartella (non si sa perché ma M$ ha deciso di togliere questa
possibilità da XP), sfruttando il file desktop.ini.
Tutto bene, se non per il fatto che non so assolutamente come fare per
"pungolare" la finestra di explorer (purtroppo non conosco neanche l'handle
perché lavoro sulla cartella e non sulla finestra) e dirgli di aggiornarsi
automaticamente.
Infatti, se dopo aver fatto le mie modifiche premo F5 funziona tutto
correttamente.
Ho provato a cercare su google ma, non avendo la minima idea di come si
chiami quello che voglio fare, è dura...
-- 
Jax
====
Il tempo, il vento, i ricchi, le onde e la fortuna vanno e vengono come la
luna.

 chiami quello che voglio fare, è dura...
Hai gia' provato con SendInput o keybd_event?
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Hai gia' provato con SendInput o keybd_event?
Intendevo qualcosa di simile:
- Trovi l'handle della finestra
FindWindow("ExploreWClass", NULL);
- La porti in primo piano:
BringWindowToTop(Handle); 
- Invii F5
keybd_event(VK_F5, 0, 0, 0);
A te raffinare ulteriormente i passaggi ...


 FindWindow("ExploreWClass", NULL);
Grazie per la dritta, in effetti era questo il passaggio che mi era più
oscuro.
Dove hai scovato quell'ExploreWClass?
-- 
Jax
====
Non esistono fenomeni "morali", ma solo interpretazioni "morali" dei
fenomeni. (Nietzsche)

 Dove hai scovato quell'ExploreWClass?
Ricordo qualche post sui NG Borland ...
Ciao.


 Ricordo qualche post sui NG Borland ...
Non capisco dove sbaglio:
  hWin := FindWindow('ExploreWClass', nil);
  if SetForegroundWindow(hWin) then
  begin
    keybd_event(VK_F5, MapVirtualKey(VK_F5, 0), 0, 0);
    keybd_event(VK_F5, MapVirtualKey(VK_F5, 0), KEYEVENTF_KEYUP, 0);
  end;
hWin mi restituisce sempre 0, anche se ci sono finestre di explorer aperte
:(
E' strano, perché questa tecnica è consigliata in molti post...
-- 
Jax
====
L'amore è una cosa ideale, il matrimonio una cosa reale; non si
confonde impunemente il reale con l'ideale.

 hWin mi restituisce sempre 0, anche se ci sono finestre di explorer aperte
Prova con la FindWindowEx.
Ciao


 Prova con la FindWindowEx.
Ho sbagliato, lascia perdere.
Se fai Start - Esegui e lanci Explorer.exe, la FindWindow funziona.


 Se fai Start - Esegui e lanci Explorer.exe, la FindWindow funziona.
Sě, hai ragione. Il problema č che non funziona se invece di lanciare
explorer (non capita molto spesso, tranne quando apri gestione risorse) apri
una cartella normalmente, tipo da risorse del computer :(
-- 
Jax
====
Se avessi il talento che credo d'avere sarei un genio.

 una cartella normalmente, tipo da risorse del computer :(
Allora fai cosě:
var
  ExplorerWnd, TreeWnd: HWND;
begin
  ExplorerWnd := FindWindow('CabinetWClass', nil);
  TreeWnd := FindWindowEx(ExplorerWnd, 0, 'SHELLDLL_DefView', nil);
E il "tasto" lo mandi a TreeWnd (attento, i nomi delle variabili non hanno
alcun senso).
Ciao


 una cartella normalmente, tipo da risorse del computer :(
per questa nel findwindow usa CabinetWClass in pratica hai un Or da fare.
Ciao Giorgio

 Allora fai così:
Perfetto, funziona.
A questo punto non vorrei abusare della tua pazienza, però se hai voglia di
ascoltarmi ancora... ;)
Il problema è che probabilmente non è la stessa cosa che fa win (per esempio
il 2000) quando viene impostato uno sfondo, perché alla fine il mio
programma non funziona a dovere...  mi spiego meglio.
Il mio programma crea un file desktop.ini *identico* a quello che viene
creato da win stesso quando si personalizza la cartella (gli vado
addirittura a settare gli attributi System e Hidden), però facendo F5 (anche
a mano) con il file desktop.ini presente nella cartella, lo sfondo non viene
visualizzato; almeno finché lo personalizzo con win stesso, dopo questa
operazione, quando lo vado a modificare invece funziona perfettamente. Per
questo credo che win mandi un qualche messaggio "speciale" alla finestra,
una specie di "ehi, guarda che devi ridisegnarti usando il desktop.ini!".
-- 
Jax
====
Ogni artista non ha a disposizione soltanto la propria intelligenza, ma
anche quella dei suoi amici. (Nietzsche)

 una specie di "ehi, guarda che devi ridisegnarti usando il desktop.ini!".
Sistema Operativo?
(Lo so, vorresti che funzionasse su piu' SO possibili,
ma sto prendendo tempo ...)


 ma sto prendendo tempo ...)
Al contrario :) mi basta che funzioni su XP, dato che gli altri win hanno
già questa feature built-in... il perché l'abbiano tolta in xp non s'ha da
sapere, ma è la ragione per cui sto facendo questo programmino.
-- 
Jax
====
Il saggio non schiaccia gli altri con la sua superiorità né gli umilia
per la loro incapacità.

 sapere, ma è la ragione per cui sto facendo questo programmino.
Io XP non l'ho mai visto, ti offendi se passo la mano?
Ciao.


 Io XP non l'ho mai visto, ti offendi se passo la mano?
Non mi offendo assolutamente, visto che mi hai già aiutato parecchio.
Però posso mettermi a piangere? :)
Mi sembravi l'unico in grado di darmi una mano ;)
Comunque, se ti può aiutare, non penso proprio che questo discorso sia così
diverso dal 2000...
-- 
Jax
====
Il mondo é un tiranno, ma solo gli schiavi gli ubbidiscono. (Thomas
Selle)

 diverso dal 2000...
Va be', per questa volta ...
:-)
Provo a sparare qualche ipotesi del perche' non funziona il refresh
"semiautomatico" (ti ricordo che di XP non ci capisco niente):
- problemi di user e/o privilegi;
- problemi di SO 
(p.e. 
http://support.microsoft.com/default.aspx?scid=kb;en-us;321281
);
- hai provato a killare la finestra e riaprirla subito?
Comunque, in giro per la Rete ho letto che questa feature non e' prevista
in XP e quindi credo sia "normale" che non funzioni il refresh.
Altro al momento non mi viene (anche perche' ho perso un po' il filo del
discorso: perche' non mi fai un riassunto?).
Ciao 


 del discorso: perche' non mi fai un riassunto?).
Visto che ti vuoi fare del male, e visto che io non ho altre fonti,
volentieri, ti racconto tutta la storiella.
Dunque, un bambino aveva un pc con WinMe, e voleva giocare a GP4. Il
problema era che sul suo pc (un barebone) non era possibile installare una
scheda video agp, quindi gli ho rifatto un pc, praticamente aggratis, con su
però WinXP.
A questo bel bambino, tra le altre cose, piaceva personalizzare gli sfondi
delle cartelle con i suoi disegni... il giorno dopo mi dice "ma non si può
più mettere i disegni nelle cartelle???" Alché io, tutto tronfio e sicuro,
vado lì e mi metto a scartabellare nelle opzioni di visualizzazione delle
cartelle di XP... qua no, qua neanche... ma cazzo....... niente! Cerco su
internet... ma straminchia, non si sa per quale ragione M$ ha deciso di non
implementare questa cosa in XP.
Da notare che le cartelle che io gli avevo copiato paro-paro da ME che lui
aveva personalizzato, mantenevano lo sfondo perfettamente, quindi XP questa
feature la supporta, ma non te lo fa fare :/
Allora che ti faccio, mi guardo un po' il file desktop.ini, che è quello che
comanda un po' tutto l'ambaradan e mi dico "cosa vuoi che sia, sono il Dio
di Delphi, lo faccio in due minuti sto programmino!" (sempre tutto tronfio).
E infatti eccomi qua.
Il programmino è fatto, ma funziona a metà, in questo senso: (considera che
io lo sto testando su Win2000)
- se faccio tasto destro su una cartella qualsiasi, ho registrato nel
registry (!) una shell che chiama la mia app passandogli il path della
cartella
- creo (o se c'è già, modifico) il file desktop.ini in modo da farlo puntare
allo sfondo desiderato
- vorrei che, a questo punto, facendo OK o Applica, la finestra della
cartella venisse aggiornata subito in modo da visualizzare lo sfondo
Il problema è questo, e se vogliamo, esula da delphi: se creo il file
desktop.ini nudo e crudo (e lo creo correttamente), anche se poi faccio F5
sulla cartella, questa non mi fa vedere lo sfondo, neanche uscendo e
rientrando dalla cartella.
Se invece faccio la procedura standard di Win2000 (Visualizza / Personalizza
cartella, che poi è la stessa di winME e 98), non toccando *niente* (mi
propone quello che già c'è nel desktop.ini), faccio ok e la cartella mostra
lo sfondo (da notare che il desktop.ini dopo è identico a quello prima.
Se modifico il desktop.ini *dopo* aver fatto questa procedura, invece,
facendo F5 (e con la procedura che mi hai dato idem), funziona e lo sfondo
viene aggiornato.
Anf anf!!
-- 
Jax
====
Le verità che contano, i grandi principi, alla fine, restano sempre due
o tre. Sono quelli che ti ha insegnato

 ha scritto nel messaggio 
news:2vccnoF...@uni-berlin.de...


>Anf anf!!
Jax, con Win98 (o ME, non ricordo) problemi simili a quelli che descrivi
tu si risolvevano (a volte) rinominando la cartella... 
Magari prova... anche se spero che con XP abbiano migliorato la cosa.
In alternativa, hai provato a monitorare i messaggi che arrivano alla
finestra della shell? 
Ciao,
-- 
Andrea /\/\agni - DeD Support Team 
http://www.delphiedintorni.it
--- posted by geoForum on 
http://www.delphiedintorni.it

Carissimo, ho la soluzione ai tuoi mali.
E' una cosa complicatissima!!! ;-)
Basta che setti l'attributo "s" alla cartella!
Ps: guai a te se adesso non mi spedisci una copia della tua applicazione
[email: andrea_m chiocciola 
despammed.com
] :-)
Ciao :-)


 Ciao :-)
Anche a me!
(pero' non ho XP, quindi ...)
Ciao.


 Basta che setti l'attributo "s" alla cartella!
Ohibņ.
Pensa che oggi avevo fatto un po' di prove con un file monitor, e avevo
scoperto anch'io una cosa analoga... ed ero pronto a dire a tutti che avevo
risolto... perņ io ho scoperto che funziona mettendo l'attributo Read-Only
alla cartella!!!!
E infatti abbiamo ragione entrambi... non ho parole.
Adesso la finisco e te la mando ;)
-- 
Jax
====
I solitari leggono molto, ma parlano poco e poco sentono dire: la vita
per loro č misteriosa. Sono mistici e spesso vedono il diavolo dove non
č. (Cechov)

 Adesso la finisco e te la mando ;)
Allora attendo... cosě sfrutto e divulgo in giro una utility carina 
scritta in Delphi. Ciao :-)

 Adesso la finisco e te la mando ;)
sono sicuro che gią ne sei al corrente e tutto l'ambaradan č a titolo di
studio/divertimento/cazzeggiamento ;o) comunque...
http://www.tweakxp.com/tweak1544.aspx
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Oggi c'č una grande battaglia di idee ma alla 
fine non ci saranno ne vinti, ne vincitori, ne idee!"
S. Benni da Elianto

 
http://www.tweakxp.com/tweak1544.aspx
-____________-
No, non ne ero al corrente.
Perň facendo cosě non si visualizza l'anteprima :) mezza consolazione...
Va beh, mettiamola cosě, č stata tutta esperienza...
Grazie...
-- 
Jax
====
Il superfluo si misura dal bisogno degli altri.(Giovanni XXIII)