Domanda

Ho un'estensione della shell di Windows che utilizza IShellIconOverlayIdentifier per visualizzare icone sovrapposte su file e cartelle. La mia estensione è un po 'come TortoiseCVS o TortoiseSVN .

A volte ho bisogno che Windows Explorer ridisegni tutte le sue icone. Per fare questo, chiamo SHChangeNotify in questo modo:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)

Questo aggiorna il desktop e il riquadro di destra di tutte le finestre di Explorer aperte. Non aggiorna l'albero delle cartelle sul lato sinistro di alcuna finestra di Explorer.

Quindi ho provato a inviare WM_SETTINGCHANGE in questo modo :

SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0) 

su Vista aggiorna l'albero delle cartelle, ma non il riquadro di destra.

La combinazione di SHChangeNotify () seguita da WM_SETTINGCHANGE sembra funzionare abbastanza bene su Vista. Ma non riesco ancora ad aggiornare l'albero delle cartelle su XP se viene visualizzato.

Qualcuno ha qualche idea su come farlo meglio?

Esiste una soluzione migliore per XP?

Inviare SHCNE_ASSOCCHANGED è un po 'come clubbing Explorer sopra la testa. Fa sì che l'intero desktop si aggiorni piuttosto violentemente e incassa qualsiasi finestra di Explorer aperta che perde la posizione di scorrimento. C'è qualcosa che è un po 'meno violento?

È stato utile?

Soluzione

  

Qualcuno ha qualche idea su come fare   questo meglio?

Personalmente non lo so. Hai citato i programmi Tortoise che fanno una cosa simile, quindi un ottimo punto di partenza sarebbe quello di dare un'occhiata a quello che fanno nella loro fonte :)

Questi sembrano essere i file sorgente rilevanti che gestiscono questo problema:

Prendo atto del metodo RebuildIcons in ciascuno di questi:

  1. imposta la dimensione dell'icona della shell o la profondità del colore su un valore temporaneo
  2. aggiorna tutte le finestre trasmettendo la modifica delle impostazioni
  3. reimposta la dimensione dell'icona della shell o l'intensità del colore sul valore originale
  4. aggiorna tutte le finestre una seconda volta con una trasmissione della modifica delle impostazioni

Forse questo fa parte del trucco per far funzionare le cose in XP.

Altri suggerimenti

Usa spy ++ per vedere quale messaggio WM_COMMMAND viene inviato quando premi F5 in Windows Explorer o scopri quale messaggio di menu viene utilizzato per visualizzare / aggiornare

Quindi utilizza FindWindow per ottenere la finestra di Explorer che desideri e inviare il messaggio WM_COMMAND precedentemente registrato ecc.

Questo è un modo divertente per controllare tutti i tipi di programmi Windows.

Puoi anche inviare un messaggio WM_KEYDOWN con il codice F5 a tutte le finestre di Explorer aperte. Questo è un po 'un trucco però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top