Page 1 sur 1

Cacher les icônes du bureau

Publié : sam. 16/janv./2016 21:17
par nico
Suite au Topic de Ar's, j'essaie de trouver une solution plus fiable pour trouver le handle de l'affichage des icônes du bureau sans a se soucier du chemin (arborescence parent\fils etc...) et de la version de window.

Le prog suivant va donc rechercher le bureau et s'il le trouve, le cacher pendant 3 secondes et le ré afficher pour que vous puissiez vérifier que cela fonctionne bien.

Donc fonctionne pour moi, Window 8.1 x64.
J'attends vos retours!

Code : Tout sélectionner

ExamineDesktops()

Procedure.l EnumProc(hWnd.i, *lParam.integer)
  Protected ParentRootClass.s, ClassName.s
  Protected Title.s, Rect.RECT, hancestror.i
  
  ClassName = Space(1024)
  GetClassName_(hWnd, @ClassName, 1024)
  
  If LCase(ClassName) = LCase("SysListView32")
    hancestror.i = GetAncestor_(hWnd, #GA_ROOTOWNER)
    If hancestror <> hwnd 
      ParentRootClass = Space(1024)
      GetClassName_(hancestror, @ParentRootClass, 1024)
      If LCase(ParentRootClass) = LCase("Progman") Or LCase(ParentRootClass) = LCase("WorkerW")
        GetWindowRect_(hancestror, @Rect.RECT)
        If DesktopWidth(0) = Rect\right
          If DesktopHeight(0) = Rect\bottom
            *lParam\i = hwnd
            ProcedureReturn #False
          EndIf 
        EndIf 
      EndIf
    EndIf 
  EndIf
  
  ProcedureReturn #True
EndProcedure 


hWnd = GetDesktopWindow_()

If hWnd <> 0
  EnumChildWindows_(hWnd, @EnumProc(), @HandleShell)
EndIf

If HandleShell <> 0
  ShowWindow_(HandleShell, #SW_HIDE)
  Delay(3000)
  ShowWindow_(HandleShell, #SW_SHOW)
EndIf

Re: Cacher les icônes du bureau

Publié : sam. 16/janv./2016 21:56
par Micheao
Marche bien sous win10

Re: Cacher les icônes du bureau

Publié : sam. 16/janv./2016 22:04
par Ar-S
ça semble fonctionner (testé en PB 5.41 x86 sous W10 x64)
Je testerai aussi la version compilée.

Re: Cacher les icônes du bureau

Publié : sam. 16/janv./2016 22:17
par nico
Salut Ar's,

J'ai lu que dans certain cas, voir certain OS (Window 7 par exemple) que la fenêtre Progman pouvait être détachée et donc ne pas être un parent de la fenêtre FolderView.

Re: Cacher les icônes du bureau

Publié : sam. 16/janv./2016 23:17
par nico
Mise à jour du code (ne traite plus le titre que la classe), affiche dans le debugger, la classe du plus haut parent, soit normalement Progman ou WorkerW.

Re: Cacher les icônes du bureau

Publié : sam. 16/janv./2016 23:19
par cage
Marche bien sur Win10 64-bit

Code utilisé dans mes applis et testé sous XP, Seven, 8, 8.1 et 10 sans soucis

Code : Tout sélectionner

lHwd = FindWindow_("Progman", #NUL)

ShowWindow_(lHwd, 8) ; Show

ShowWindow_(lHwd, 0) ; Hide
Cela ressemble a ton code

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 0:45
par Ar-S
C'est bien comme ça que j'avais commencé Cage (avec SW_SHOW au lieu de SW_SHOWNA) mais parfois ça ne fonctionnais pas. Justement quand la class est rattachée à WorkerW au lieu de progman.
C'est en ce sens que je voulais modifier mon soft. ;)

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 1:02
par nico
C'est sympa Case mais comme le dit Ar's, ta solution est celle que l'on connait et on cherche une solution au remplacement de ce code justement qui ne peut pas fonctionner tous le temps.

Par exemple, si tu choisis pour ton fond d'écran, un slide show (des images qui défilent), le Progman n'est plus le Parent (il s'est détaché), c'est un WorkerW qui le devient.

De plus Progman n'est pas la fenêtre qui a les icônes, alors ça marche parce si tu caches la fenêtre parent, ça cache aussi les fenêtre filles.

Je cherche un comportement similaire au menu du clic droit sur le bureau.

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 1:13
par cage
Désolé, je n'avais pas compris la question. :oops:

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 1:54
par nico
C'est pas toujours très simple même pour ce que l'on cherche à faire mais ça aurait pu l'être.

Il reste encore à mettre le registre à jour, comme ça on pourra lancer plusieurs instances.

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 3:26
par Ar-S
En tout cas ce dernier code fonctionne nikel sur mon W10 (avec défilement d'images en wallpaper).

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 10:22
par Anonyme2
Fonctionne à tous les coups sous seven pro x64 en ascii/unicode compilation 32 ou 64.

J'ai une seule image en fond d'écran sélectionnée dans "choisir un arrière-plan pour votre bureau" de windows.

Une fois j'ai Progman et le coup d'après j'ai WorkerW puis le coup d'après j'ai Progman etc.

Cela change à chaque fois.

Re: Cacher les icônes du bureau

Publié : dim. 17/janv./2016 13:58
par nico
Petite correction, le handle ancestror pouvait être celui de la fenêtre, si la fenêtre n'as pas de parent, ce qui n'est jamais le cas, j'ai rajouté un test supplémentaire.