Actualiser le bureau [Résolu]

Signaler
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010
-
cs_PHILOUVB
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010
-
Bonjour

Je cherche à savoir comment actualiser le bureau.

j'ai essayé avec Keyboard.Send(F5,true), mais en fait cela actualise mon programme et non l'environnement windows

Avez-vous une petite astuce à me proposer ?

merci par avance

PhilouVB

8 réponses

Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
22
Salut,

J'ai cherché la même chose il n'y a pas longtemps mais sans succès... Il doit bien exister une API pour ca..?

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
22
Bon j'ai avancé un peu,

J'ai repris les réponses d'un de tes ancien post = => http://www.vbfrance.com/forum/sujet-ACTUALISER-MON-BUREAU_960570.aspx

Ce qui nous amènent au moceau de code laissé par lolokun

' actualiser Bureau
actualDesktop = "RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True"
WshShell.run actualDesktop,1,True

Il sagit bien d'une API d' User32.dll

Pour le moment je n'ai réussi à la traduire et à la faire fonctionner que sous VB6/XP32Bits

Declare Function UpdatePerUserSystemParameters Lib "User32.dll" (ByVal i As Long, ByVal b As Boolean) As long

En appelant celle-ci de cette façon :

Call UpdatePerUserSystemParameters (1, True)

Pour ce qui est de la traduction en .Net j'ai tenté :

Declare Auto Function UpdatePerUserSystemParameters Lib "User32.Dll" (ByVal i As Interger, ByVal b As Boolean) As Integer

Mais cela n'a pas l'air de fonctionner, j'ai des exceptions de première chance en sortie, les paramètres ne doivent pas correspondrent.

Je suis sous Vista x64 / Vs 2008.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
22
Re,

Je vien de tenter sans paramètres :

Private Declare Auto Sub UpdatePerUserSystemParameters Lib "User32.dll" ()
 
Call UpdatePerUserSystemParameters 

On dirait que ca fonctionne pour ce qui est du fond d'écran (mais pas pour les icones du bureau).

Cependant, cela provoque une sorte de flash noir bizard...

@+ Mayzz.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
salut,

çà me paraît un peu lourd oui ^^

il faut d'abord bloquer le bureau (sinon le refresh n'aura pas d'effet)
ensuite forcer le refresh, et enfin débloquer

je fais un petit exemple de suite


<hr size="2" width="100%" />
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
22
Arf, en fait, je viens de découvrir que ma traduction en.Net est bonne, le soucis c'est que l'API elle même ne fonctionne pas sous Vista x64 apparemment...

Quand au code plus haut il fait planté le menu démarrer.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
c'est pas très très bien ^^



<hr />
'    RAFRAICHIR LE BUREAU WINDOWS
'    http://www.codyx.org/snippet_rafraichir-bureau-windows_793.aspx#2378
'    Posté par [ PCPT ] le 28/06/2009
<hr />




    Private Const RDW_INVALIDATE As Integer = &H1
    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetDesktopWindow() As IntPtr
    End Function
    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function LockWindowUpdate(ByVal hwndLock As IntPtr) As Integer
    End Function
    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function RedrawWindow(ByVal hwnd As IntPtr, ByVal lprcUpdate As Integer, ByVal hrgnUpdate As Integer, ByVal fuRedraw As Integer) As Integer
    End Function

    Public Sub RefreshDesktop()
        Dim hDesk As IntPtr = GetDesktopWindow()
        LockWindowUpdate(hDesk)
        RedrawWindow(hDesk, 0, 0, RDW_INVALIDATE)
        LockWindowUpdate(False)
    End Sub









PS : comme quoi les API, c'est pratique quand même
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
22
Wahooo  PCPT ! La tu m'épate ^^

Plus serieusement bravo, très beau code, t'as tout mon respect

PS: en effet le framework a ses limites...

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010

Un grand merci pour tout.
Je vais regarder de plus pret tout cela (et surtout comprendre ce code) !!

Encore merci

PhilouVB