2013-10-17 5 views
3

En utilisant pyGtk, j'ai créé une fenêtre sans décoration. La fenêtre est cachée de la barre des tâches et du haut de toutes les fenêtres. Sur Linux cela fonctionne très bien, mais sur MS Windows fenêtre parfois, il se cache sous une autre fenêtre et a toujours "python.exe" la barre des tâches dans Windows.Masquer la fenêtre de la barre des tâches MS Windows

Image représentant mon problème:

enter image description here

Comment puis-je cacher cette fenêtre "python.exe" de la barre des tâches?

Mon code:

class Infowindow(gtk.Window): 
''' 
Klasa okienka informacyjnego 
''' 
def __init__(self, json, index, destroy_cb, device): 
    gtk.Window.__init__(self) 
    self.size_x = 260+48 
    self.size_y = 85 
    self.separator_size = 10 
    self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_SPLASHSCREEN) 
    self.set_decorated(False) 
    self.set_property('skip-taskbar-hint', True) 
    self.set_opacity(1) 
    self.set_keep_above(True) 
    self.add_events(gtk.gdk.BUTTON_PRESS_MASK) 
    self.connect("enter-notify-event", self.__on_hover) 
    self.connect("leave-notify-event", self.__on_leave) 
    self.connect("button_press_event", self.__on_click) 
    self.set_size_request(self.size_x, self.size_y) 
    color = gtk.gdk.color_parse('#f3f3f3') 
    self.modify_bg(gtk.STATE_NORMAL, color) 

    self.expanded = False 
    self.index = index 
    self.destroy_cb = destroy_cb 
    self.json = json['data'] 
    self.system_info = False if 'system' not in self.json or not self.json['system'] else True 
    self.device = device 
    f = gtk.Frame() 
    self.move_window(index) #move window to specified place 
    self.box_area = gtk.VBox() 
    self.box_area.set_spacing(10) 
    f.add(self.box_area) 
    self.add(f) 
    self.show_all() 

Répondre

3

Vous avez deux options pour supprimer une fenêtre dans la barre des tâches:

  1. Ajouter le style de fenêtre étendu WS_EX_TOOLWINDOW. Mais cela a d'autres conséquences et je ne peux pas dire si elles sont sérieuses ou non.
  2. Donne à la fenêtre un propriétaire qui n'est pas visible. Cela vous donne la liberté d'utiliser les styles de fenêtre et les styles étendus que vous souhaitez, mais implique plus de travail.

Il est naturel que votre fenêtre passe sous d'autres fenêtres. Voilà comment fonctionne Windows. Si vous voulez que votre fenêtre apparaisse en haut, affichez-la avec HWND_TOPMOST.

Je ne sais pas comment cela est (ou n'est pas) implémenté sous PyGtk. Je viens de vous donner la réponse Win32!

+0

S'il n'y aura plus de réponses, je vais essayer de créer cette fenêtre sous win32gui. Merci. – DrafFter

5

Encore merci David Heffernan. Fonctionne parfaitement!

Pour les personnes qui veulent une solution complète en python.

  • Nom de votre windowin manière par exemple caractéristique: 'alamakota'
  • Utilisez find_window ('alamakota'),
  • Avec gestionnaire utilisation hide_from_taskbar donné (gestionnaire)
  • Dernière utilisation set_topmost (gestionnaire)

La fenêtre est masquée dans la barre des tâches et elle est toujours au-dessus.

Je sais que ce n'est pas un code beatyfull, mais fonctionne bien sur Windows XP et au-dessus.

import ctypes 
import win32gui 
import win32api 
from win32con import SWP_NOMOVE 
from win32con import SWP_NOSIZE 
from win32con import SW_HIDE 
from win32con import SW_SHOW 
from win32con import HWND_TOPMOST 
from win32con import GWL_EXSTYLE 
from win32con import WS_EX_TOOLWINDOW 

@staticmethod 
def find_window(name): 
    try: 
     return win32gui.FindWindow(None, name) 
    except win32gui.error: 
     print("Error while finding the window") 
     return None 

@staticmethod 
def hide_from_taskbar(hw): 
    try: 
     win32gui.ShowWindow(hw, SW_HIDE) 
     win32gui.SetWindowLong(hw, GWL_EXSTYLE,win32gui.GetWindowLong(hw, GWL_EXSTYLE)| WS_EX_TOOLWINDOW); 
     win32gui.ShowWindow(hw, SW_SHOW); 
    except win32gui.error: 
     print("Error while hiding the window") 
     return None 

@staticmethod 
def set_topmost(hw): 
    try: 
      win32gui.SetWindowPos(hw, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE) 
    except win32gui.error: 
     print("Error while move window on top") 
+0

'hide_from_taskbar' ne semble pas fonctionner sur Win7 x64. MSDN dit que 'SetWindowLongPtrW' devrait être utilisé à la place. –

+0

Avec 'SetWindowLongPtrW' il se cache de la barre des tâches lorsque vous définissez' SW_HIDE', mais il apparaît de nouveau dans la barre des tâches avec 'SW_SHOW'! –

+0

Je pourrais le faire fonctionner. C'était ma faute de frappe. Merci pour le code détaillé. –

Questions connexes