IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Cacher les icônes du bureau - Avis sur le code


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Cacher les icônes du bureau - Avis sur le code
    Bonjour,

    J'ai codé un petit script pour masquer les icônes du bureau Windows, je me demandais ce que vous auriez fait pour le rendre plus joli / performant, si vous avez du temps à perdre... J'ai mis quelques annotations si jamais ce n'était pas clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    import time, threading, random
    import win32gui, win32con, win32api
    import ctypes
    import tkinter as tk
    from PIL import ImageTk, Image, ImageOps
     
    ####PARAMETRES####
    IdleTime = 1000  #msec
     
    ####VARIABLES####
    wallpaper = None
    wallpaper_path = None
    wallpaperized = False
    idle = False
    win_title = str(random.getrandbits(128)) #Nom de fenêtre Tkinter random
     
    def getIdleTime():
        return (win32api.GetTickCount() - win32api.GetLastInputInfo())
     
    # Afficher le bureau quand on clic gauche sur le wallpaper
    def on_click(event):
        global walpaperized, idle
        root.withdraw()
        walpaperized = False
        idle = False
     
    #Met à jour le canvas (si changement de wallpaper)
    def getWallpaper():
        global wallpaper, wallpaper_path
        ubuf = ctypes.create_unicode_buffer(512)
        ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_GETDESKWALLPAPER,len(ubuf),ubuf,0)
        path = ubuf.value
     
        if wallpaper_path != path:
            wallpaper_path = path
            wallpaper = Image.open(path)
            wallpaper = ImageOps.fit(wallpaper, (WIDTH,HEIGHT)) #Redimensionne l'image à la taille de l'écran  
            wallpaper = ImageTk.PhotoImage(wallpaper)           #Transforme l'image pour Tkinter
            canvas.itemconfig(container, image=wallpaper)       #Met à jour le canvas
     
    #Affiche la fenêtre tkinter
    def displayWallpaper():    
        root.deiconify()    
     
    #Retourne False si une fenêtre est ouverte (sauf root et qq programmes windows), une exception est alors soulevée par EnumWindows
    def winEnumHandler( hwnd, ctx ):
        if win32gui.IsWindowVisible( hwnd ) and not win32gui.IsIconic(hwnd):
            title = win32gui.GetWindowText( hwnd )
            for word in ('','Expérience d’entrée Windows','Program Manager','Paramètres','Hôte contextuel',\
                         'Centre de notifications','Calculatrice','Alarmes et horloge',win_title):
                if title == word:
                    return True
            return False
     
    #Fenêtre tkinter
    def mainroot():
        global WIDTH, HEIGHT, root, container, canvas
        root = tk.Tk()
        root.title(win_title)
        WIDTH, HEIGHT = root.winfo_screenwidth(), root.winfo_screenheight()
        root.geometry(f'{WIDTH+4}x{HEIGHT+4}+-2+-2')    
        #root.attributes('-fullscreen',True )
        root.overrideredirect(1)                                                #Mettre la fenêtre par dessus tout
        #root.attributes('-topmost',True )
        canvas = tk.Canvas(root, width = WIDTH, height = HEIGHT)      
        canvas.pack()
        container = canvas.create_image(2,2, anchor=tk.NW)                      #Garder le canvas en mémoire
        root.withdraw()                                                         #Cacher la fenêtre
        root.bind("<ButtonRelease-1>", on_click)                                #"Binder" la fenêtre entière pour la cacher
        root.mainloop()
     
    threading.Thread(target=mainroot).start()
    time.sleep(1)
     
    while True:
        time.sleep(0.1)
        getWallpaper()
        try:
            win32gui.EnumWindows( winEnumHandler, None )
        except:                                                                 #Une fenêtre est ouverte (exceptée celles autorisées)
            wallpaperized = False
            idle = False
        else:                                                                   #Si aucune exception soulevée alors aucune fenêtre n'est ouverte, on est donc sur le bureau grosso-modo
            title = win32gui.GetWindowText(win32gui.GetForegroundWindow())
            if not title:                                                       #On est vraiment sur le bureau
                if not wallpaperized:                                           #On n'a pas déjà affiché le wallpaper (sécurité inutile ?)
                    wallpaperized = True
                    threading.Thread(target=displayWallpaper).start()           #On affiche le wallpaper
     
            if not idle:
                if getIdleTime()>IdleTime :
                    if title not in ('Calculatrice','Alarmes et horloge'):      #Nécessaire pour ne pas afficher le wallpaper par dessus ces deux utilitaires windows
                        idle = True
                        wallpaperized = True
                        threading.Thread(target=displayWallpaper).start()
    Bizarrement quand je mets Tkinter dans le thread principal le comportement du script est différent au niveau de la partie concernant l'idle... En gros ça n'affiche pas le fond d'écran par dessus si la calculatrice n'est pas une fenêtre active mais affichée à l'écran alors qu'avec ce script le fond d'écran recouvre la calculatrice dans ce cas de figure (mais pas si active et c'est ce que je souhaite). J'ai hâte de voir ce que ça va donner quand je vais passer le tout sous pyinstaller...

    PS : C'est joli
    Dernière modification par Invité ; 29/05/2022 à 01h25.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par LeNarvalo Voir le message
    J'ai codé un petit script pour masquer les icônes du bureau Windows, je me demandais ce que vous auriez fait pour le rendre plus joli / performant, si vous avez du temps à perdre...
    Désolé là tu utilises des outils zindoz que je ne connais pas donc je peux pas t'aider. Mais j'ai vu qq détails...
    Déjà ta boucle titre=truc; for word in (...): if titre=word return True; return False se réduira en un simple return titre in (...).
    Ensuite quand on try/except, c'est bien de dire quoi on except.
    Et enfin perso j'aime bien expliciter les tuples, c.a.d. écrire (x, y)=(..., ...) et non pas x, y=..., ... (explicite vaut mieux qu'implicite).
    Et bien évidemment les if multiples sans alternative peuvent se réduire en un seul "if" unique. if X: if Y: if Z: truc devient if X and Y and Z: truc.
    C'est tout ce que je vois.

    Citation Envoyé par LeNarvalo Voir le message
    J'ai mis quelques annotations si jamais ce n'était pas clair.
    Tu veux dire que ce n'est pas une habitude naturelle de ta part???

    Citation Envoyé par LeNarvalo Voir le message
    C'est joli
    Oui, c'est classe.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut !

    Et merci pour ton retour !!

    Concernant ce bout de code for word in ('','Expérience d’entrée Windows',...): if title == word: return True versus return titre in (...), on m'avait dit qu'utiliser in n'était pas performant, du coup quand je veux grapiller une nanoseconde je m'en passe. Quand penses-tu ?

    Ensuite quand on try/except, c'est bien de dire quoi on except.
    La fonction EnumWindows(...) émet une exception lorsque je lui retourne False ( return titre in (...) ) et du coup ça arrête le parcours des fenêtres, j'espère ainsi gagner quelques msecs.

    Et enfin perso j'aime bien expliciter les tuples, c.a.d. écrire (x, y)=(..., ...) et non pas x, y=..., ... (explicite vaut mieux qu'implicite).
    Ca change qq chose ?

    Et bien évidemment les if multiples sans alternative peuvent se réduire en un seul "if" unique. if X: if Y: if Z: truc devient if X and Y and Z: truc.
    Pareil c'est pour grapiller, une nanoseconde par ci, par là ! Je me dis, peut-être à tord, que dans une condition multiple, python teste toutes les conditions avant de retourner vrai ou faux, non ?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Concernant ce bout de code for word in ('','Expérience d’entrée Windows',...): if title == word: return True versus return titre in (...), on m'avait dit qu'utiliser in n'était pas performant, du coup quand je veux grapiller une nanoseconde je m'en passe. Quand penses-tu ?
    En général je pense juste le matin. Mais si ta question était "qu'en penses-tu" là j'en ai aucune idée. Donc dans ce cas, t'as le timeit pour regarder.

    Citation Envoyé par LeNarvalo Voir le message
    La fonction EnumWindows(...) émet une exception lorsque je lui retourne False ( return titre in (...) ) et du coup ça arrête le parcours des fenêtres, j'espère ainsi gagner quelques msecs.
    Oui mais on précise l'exception. Cela donne une programmation propre (si ça excepte un truc prévu c'est bon mais si ça excepte une division par 0 alors mon code plante et je regarde pourquoi je divise par 0). Parce que except sans rien ça te masque toute erreur de programmation.

    Citation Envoyé par LeNarvalo Voir le message
    Ca change qq chose ?
    Absolument rien. C'est la virgule qui fait le tuple, pas les parenthèses. Mais comme parfois les parenthèses sont nécessaires, je les mets tout le temps. Et comme je l'ai dit, c'est recommandé par la PEP

    Citation Envoyé par LeNarvalo Voir le message
    Pareil c'est pour grapiller, une nanoseconde par ci, par là ! Je me dis, peut-être à tord, que dans une condition multiple, python teste toutes les conditions avant de retourner vrai ou faux, non ?
    Ah non, là c'est garanti. Python travaille à l'économie donc si un test est faux, il s'arrête. Tu peux tester avec par exemple un if fctA() and fctB() and fctC() en codant les 3 fonctions pour qu'elles affichent un texte avant de retourner True/False. Si la fctA renvoie False, tu verras que les deux autres ne sont pas appelées.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Invité
    Invité(e)
    Par défaut
    En général je pense juste le matin.
    Génial !

    Oui mais on précise l'exception.
    Ah oui c'est vrai ! Un de mes travers...
    pywintypes.error: (0, 'EnumWindows', 'No error message is available'). Je fais comment pour capter le truc du coup ?

    Ah non, là c'est garanti. Python travaille à l'économie donc si un test est faux, il s'arrête. Tu peux tester avec par exemple un if fctA() and fctB() and fctC() en codant les 3 fonctions pour qu'elles affichent un texte avant de retourner True/False. Si la fctA renvoie False, tu verras que les deux autres ne sont pas appelées.
    Ah pas bête la guêpe ! Effectivement ! Merci ! =)

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    pywintypes.error: (0, 'EnumWindows', 'No error message is available'). Je fais comment pour capter le truc du coup ?
    Là j'ai pas bien pigé ce que tu as écrit. L'erreur c'est "pywintypes.error" ? Ben tu écris except pywintypes.error...

    Moi quand je ne connais pas l'exception que je dois attendre je mets un code sans exception et je le lance en le mettant en situation d'échec. L'exception remonte alors dans mon terminal et je connais alors son nom.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Invité
    Invité(e)
    Par défaut
    Oui c'est l'exception levée sans le try except du coup.
    J'ai été un peu feignant, j'avoue ^^ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> import pywintypes
    >>> try:
    	win32gui.EnumWindows( winEnumHandler, None )
    except pywintypes.error:
    	print("ERROR")
     
    *IDLE Shell 3.9.2*
    Cacher les icônes du bureau - Avis sur le code - Répondre à la discussion - Google Chrome
    WALLPAPER.py - C:\Users\Toto\Desktop\Scripts\WALLPAPER.py (3.9.2)
    Scripts
    ERROR
    PS : J'ai pas mis la fonction winEnumHandler dans le bout de code ci-dessus, au cas où...

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 284
    Par défaut
    bonjour

    pas de win non plus pour comprendre la chose

    GetWindowText(), suis pas fan d'utiliser les titres alors qu'il est possible d'avoir les classes GetClassName()


    ------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        try:
            win32gui.EnumWindows( winEnumHandler, None )
        except pywintypes.error:                                                                 #Une fenêtre est ouverte (exceptée celles autorisées)
            wallpaperized = False
            idle = False
        else:
             #reste du code
    suis pas fan non plus des else qui provoquent (inutilement) des indentations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        try:
            win32gui.EnumWindows( winEnumHandler, None )
        except pywintypes.error:                                                                 #Une fenêtre est ouverte (exceptée celles autorisées)
            wallpaperized = False
            idle = False
            continue
        #reste du code

  9. #9
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 914
    Billets dans le blog
    7
    Par défaut
    Bonjour,
    Citation Envoyé par papajoker
    suis pas fan non plus des else qui provoquent (inutilement) des indentations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        try:
            win32gui.EnumWindows( winEnumHandler, None )
        except pywintypes.error:                                                                 #Une fenêtre est ouverte (exceptée celles autorisées)
            wallpaperized = False
            idle = False
            continue
        #reste du code
    On prend mesure de l'utilité de ce else lorsque l'on utilise la clause finally: d'un try/except ...

    ...
    Moi non plus je n'utilise pas W$ (et je ne connais pas ), je ne peux donc pas me prononcer sur la pertinence/utilité de ce programme.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci pour vos retours !

    Du coup j'ai été faire un petit tour ici : http://timgolden.me.uk/pywin32-docs/win32gui.html
    Et j'ai découvert : win32gui.GetDesktopWindow(), je peux peut-être faire un truc avec ça...

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 284
    Par défaut
    Si je comprends bien , tu désires juste cacher les icones sur le bureau
    Ce qui est déjà possible par 2 clic souris sur le bureau ?

    Une possibilité ? Serait d'écrire dans le registre win, ton app est juste une icone dans la barre de tache et un clic dessus fait un "on/off" (on peut peut-être ajouter un raccourcis clavier ?)

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Si je comprends bien , tu désires juste cacher les icones sur le bureau
    C'est bien ça !

    Citation Envoyé par papajoker Voir le message
    Ce qui est déjà possible par 2 clic souris sur le bureau ?
    Oui je me demande si quelqu'un l'utilise, c'est particulièrement peu ergonomique. Là j'ai rien à faire, c'est totomatique, et si je veux les réafficher, un clic et voilou ; si je ne fais rien pendant 1 sec les icônes disparaissent de nouveau.

    Citation Envoyé par papajoker Voir le message
    Une possibilité ? Serait d'écrire dans le registre win, ton app est juste une icone dans la barre de tache et un clic dessus fait un "on/off" (on peut peut-être ajouter un raccourcis clavier ?)
    Alors là j'avoue que je méconnais totalement la base de registre, j'ai fait des recherches à ce niveau, j'ai rien trouvé concernant Windows 11 et l'affichage des icônes du bureau...
    un clic dessus fait un "on/off" Je préfère autant que se soit automatique sinon je ne vais jamais l'utiliser...

  13. #13
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 178
    Par défaut
    Hello,
    pour cacher les icônes du bureau à tester :

    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import win32gui
    hWnd = win32gui.FindWindow("Progman", "Program Manager")
    win32gui.ShowWindow(hWnd, 0) #cacher
    #win32gui.ShowWindow(hWnd, 5) #montrer
    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import winreg
    path = winreg.HKEY_CURRENT_USER
    def cacher_icones(option= True):
        try:
            key = winreg.OpenKey(path,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", 0, winreg.KEY_ALL_ACCESS)
            if option:
                winreg.SetValueEx(key, "HideIcons",0, winreg.REG_DWORD, 1)
            else:
                winreg.SetValueEx(key, "HideIcons", 0, winreg.REG_DWORD, 0)
            winreg.CloseKey(key)
            return True
        except Exception as e:
            print(e)
        return False
     
     
    cacher_icones(True)  #Cacher
    #cacher_icones(False) #Montrer
    Ne semble pas fonctionner.

    Ami calmant, J.P

  14. #14
    Invité
    Invité(e)
    Par défaut
    Salut Jurassic_pork !

    1 - Ne fonctionne pas chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> hWnd = win32gui.FindWindow("Progman", "Program Manager")
    >>> win32gui.ShowWindow(hWnd, 0)
    24
    J'ai essayé tout les numéros jusque 99, même pas peur !

    2 - Déjà essayé manuellement... Ca marche pô, ou alors peut-être après redémarrage d'après ce que je me rappelle avoir lu.

  15. #15
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 178
    Par défaut
    Hello;
    Citation Envoyé par LeNarvalo Voir le message
    1 - Ne fonctionne pas chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> hWnd = win32gui.FindWindow("Progman", "Program Manager")
    >>> win32gui.ShowWindow(hWnd, 0)
    24
    c'est bizarre cela fonctionne chez moi sous windows 10 sans redémarrage.
    Sinon tu peux aussi essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import win32gui
    toggleDesktopCommand = 0x7402
    WM_COMMAND = 0x0111
    GW_CHILD = 5
     
     
    hWnd = win32gui.GetWindow(win32gui.FindWindow("Progman", "Program Manager"), GW_CHILD)
    win32gui.SendMessage(hWnd, WM_COMMAND, toggleDesktopCommand, 0)
    cela vient cocher/décocher( fonctionne en bascule) Affichage/afficher les éléments de bureau dans le menu contextuel du bureau (click droit dans le bureau).

  16. #16
    Invité
    Invité(e)
    Par défaut
    Aucun des deux ne fonctionne...
    Dommage ça m'aurait grandement simplifié le code ! Plus besoin de bidouiller comme je le fais actuellement !

  17. #17
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 178
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Aucun des deux ne fonctionne...
    Cela m'intrigue que cela ne fonctionne pas. Est-ce que quelqu'un d'autre à le même problème? LeNarvalo sous quel O.S es-tu et quelle version ? As-tu essayé sous un autre O.S, un autre ordinateur ?

  18. #18
    Invité
    Invité(e)
    Par défaut
    Windows 11 Famille
    Version 21H2

    Encore merci pour le coup de main !

  19. #19
    Invité
    Invité(e)
    Par défaut
    Re, Jurassic_pork, j'ai testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import win32gui
    toggleDesktopCommand = 0x7402
    WM_COMMAND = 0x0111
    GW_CHILD = 5
     
    for i in range(0,6): 
        hWnd = win32gui.GetWindow(win32gui.FindWindow("Progman", "Program Manager"), i)
        print(i,'-', hWnd,'- Retour :', win32gui.SendMessage(hWnd, WM_COMMAND, toggleDesktopCommand, 0))
    65964 correspond à l'handle de Program Manager (Via un autre bout de script : 65964 Program Manager - Progman), mais l'attribut GW_CHILD renvoie un hWnd qui vaut 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0 - 20777096 - Retour : 0
    1 - 65964 - Retour : 0
    2 - 0 - Retour : 0
    3 - 985146 - Retour : 0
    4 - 0 - Retour : 0
    5 - 0 - Retour : 0
    PS :
    J'ai testé ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(0,1000):
        hWnd = win32gui.GetWindow(win32gui.FindWindow("Progman", "Program Manager"), 1)
        print(i,'-', hWnd,'- Retour :', win32gui.SendMessage(hWnd, i, toggleDesktopCommand, 0))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    0 - 65964 - Retour : 0
    1 - 65964 - Retour : 0
    2 - 65964 - Retour : 0
    3 - 65964 - Retour : 0
    4 - 65964 - Retour : 0
    5 - 65964 - Retour : 0
    6 - 65964 - Retour : 0
    Traceback (most recent call last):
      File "C:\Users\cedri\Desktop\ttooddeell.py", line 9, in <module>
        hWnd = win32gui.GetWindow(win32gui.FindWindow("Progman", "Program Manager"), 1)
    pywintypes.error: (1400, 'GetWindow', 'Handle de fenêtre non valide.')
    J'ai l'impression que j'ai fait planter Program Manager puisque je n'avais plus d'icone pendant 2 secondes sur le bureau ^^
    Maintenant GW_CHILD renvoie un hWnd... Bref je maitrise pas grand chose !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cacher les icônes du bureau
    Par Invité dans le forum Windows 11
    Réponses: 7
    Dernier message: 03/06/2022, 07h49
  2. Réponses: 4
    Dernier message: 10/06/2014, 20h34
  3. Réponses: 0
    Dernier message: 12/06/2012, 12h07
  4. afficher/cacher les icônes du bureau !
    Par cincap dans le forum Débuter
    Réponses: 4
    Dernier message: 25/08/2011, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo