Question

J'ai une extension de shell Windows qui utilise IShellIconOverlayIdentifier TortoiseCVS ou TortoiseSVN .

Parfois, il faut que l'explorateur Windows redessine toutes ses icônes. Pour ce faire, j'appelle SHChangeNotify comme ceci:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)

Ceci actualise le volet de bureau et le panneau de droite de toutes les fenêtres d’explorateur ouvertes. Il n’actualise pas l’arborescence de dossiers sur le côté gauche des fenêtres de l’explorateur.

J'ai donc essayé d'envoyer WM_SETTINGCHCH :

SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0) 

Sous Vista, cela actualise l’arborescence des dossiers, mais pas le volet de droite.

La combinaison de SHChangeNotify () suivie de WM_SETTINGCHANGE semble bien fonctionner sous Vista. Mais je ne peux toujours pas actualiser l'arborescence de dossiers sous XP si elle est affichée.

Quelqu'un a-t-il une idée pour mieux faire cela?

Existe-t-il une meilleure solution pour XP?

L’envoi de SHCNE_ASSOCCHANGED est un peu comme l’exploration de clubbing par-dessus la tête. Cela provoque l'actualisation assez violente du bureau entier et empêche les fenêtres ouvertes de l'Explorateur de perdre leur position de défilement. Y a-t-il quelque chose d'un peu moins violent?

Était-ce utile?

La solution

  

Est-ce que quelqu'un a des idées sur la façon de faire   cela mieux?

Personnellement, je ne sais pas. Vous mentionnez les programmes Tortoise qui font la même chose, alors un excellent point de départ serait de jeter un coup d’œil à ce qu’ils font dans leur source:)

Ceux-ci semblent être les fichiers source pertinents qui traitent ce problème:

Je remarque dans la méthode RebuildIcons de chacun de ceux-ci:

  1. définir la taille de l'icône d'enveloppe ou la profondeur de couleur sur une valeur temporaire
  2. met à jour toutes les fenêtres en diffusant le changement de paramètre
  3. réinitialise la taille de l'icône du shell ou la profondeur de la couleur à la valeur d'origine
  4. met à jour toutes les fenêtres une seconde fois avec une diffusion du changement de paramètre

C’est peut-être une partie de l’astuce pour que les choses fonctionnent sous XP.

Autres conseils

Utilisez spy ++ pour voir quel message WM_COMMMAND est envoyé lorsque vous appuyez sur F5 dans l'explorateur Windows ou recherchez le message de menu utilisé pour l'affichage / l'actualisation

Utilisez ensuite FindWindow pour obtenir la fenêtre de l’explorateur de votre choix et lui envoyer le message WM_COMMAND enregistré plus tôt, etc.

C’est une façon amusante de contrôler toutes sortes de programmes Windows.

Vous pouvez également envoyer un message WM_KEYDOWN avec le code d'activation F5 à toutes les fenêtres de l'explorateur ouvertes. C'est un peu un bidouillage cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top