3

pyGtk を使用して、装飾のないウィンドウを作成しました。ウィンドウは、タスク バーおよびすべてのウィンドウの上部から隠されています。Linux では正常に動作しますが、MS Windows ウィンドウでは、他のウィンドウの下に隠れて、Windows のタスクバーに常に "python.exe" が表示されることがあります。

私の問題を表す画像:

ここに画像の説明を入力

この「python.exe」ウィンドウをタスクバーから非表示にするにはどうすればよいですか?

私のコード:

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()
4

3 に答える 3

6

改めて、デビッド・ヘファーナンに感謝します。完璧に動作します!

Python で完全なソリューションが必要な人向け。

  • ウィンドウに特徴的な名前を付けます。たとえば、「alamakota」です。
  • find_window('alamakota') を使用します。
  • 指定されたハンドラーで hide_from_taskbar(handler) を使用します
  • 最終使用 set_topmost(handler)

ウィンドウはタスクバーから隠され、常に一番上にあります。

これが美しいコードではないことはわかっていますが、Windows XP 以降では問題なく動作します。

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")
于 2013-10-21T09:44:10.477 に答える
3

タスクバーからウィンドウを削除するには、次の 2 つのオプションがあります。

  1. WS_EX_TOOLWINDOW拡張ウィンドウ スタイルを追加します。しかし、これには他の結果が伴い、それらが深刻かどうかはわかりません。
  2. ウィンドウに非表示の所有者を指定します。これにより、任意のウィンドウ スタイルと拡張スタイルを自由に使用できますが、より多くの作業が必要になります。

ウィンドウが他のウィンドウの下に入るのは当然です。それが窓の仕組みです。ウィンドウを一番上に表示したい場合は、 で表示しHWND_TOPMOSTます。

これが PyGtk でどのように実装されているか (または実装されていないか) はわかりません。Win32 の回答を提供しました。

于 2013-10-17T11:29:03.977 に答える