当前位置: 首页 > 知识库问答 >
问题:

从MS窗口任务栏中隐藏窗口

易修洁
2023-03-14

我用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()

共有3个答案

喻昀
2023-03-14

另一个答案中提供的Win32解决方案不是很容易,而且它与GtkWindow::show方法不兼容。Gtk3中现在有一个简单的解决方案:

win->set_type_hint(Gdk::WindowTypeHint::WINDOW_TYPE_HINT_UTILITY); //This works
win->set_skip_taskbar_hint(); //This does not guarantee to work
潘自强
2023-03-14

从任务栏中删除窗口有两个选项:

  1. 添加扩展窗口样式。但这还有其他后果,我不能说它们是否严重

您的窗口会位于其他窗口下方是很自然的。这就是窗口的工作原理。如果您想让您的窗口显示在顶部,请使用HWND_TOPMOST显示它。

我不知道这些在PyGtk下是如何实现的。我刚刚给了你Win32的答案!

安经纶
2023-03-14

再次感谢大卫·赫弗南。很好用!

适用于需要python完整解决方案的用户。

  • 用一种独特的方式命名你的窗口,例如:“alamakota”

窗口从任务栏隐藏,并且总是在顶部。

我知道这不是一个beatyfull代码,但在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")
 类似资料:
  • 我需要隐藏控制台窗口,我很快通过P/Invoking ShowWindow解决了这个问题。但是,调用隐藏了控制台窗口以及控制台窗口的任务栏按钮。我需要任务栏按钮保持可见。但是,我没有寻找最小化控制台窗口的方法。单击任务栏按钮显示不做任何事情。我尝试使用SetWinEventHook并在每次激活时隐藏窗口,但没有用,因为调用此函数的窗口必须运行消息循环才能接收事件(我的控制台窗口没有,无论我设置了O

  • 我正在使用下面的代码进行屏幕截图,但我只想隐藏窗口任务栏。在没有输入尺寸的情况下,是否有任何特定的代码。我不想输入dimension,因为每台电脑都有不同的。。请建议。提前谢谢。 机器人=新机器人();维度screenSize=Toolkit。getDefaultToolkit()。getScreenSize();矩形captureRect=新矩形(Toolkit.getDefaultToolki

  • 我想删除Windows 10多桌面任务栏上的窗口。对于Windows 8.1,我使用了ITaskbarList::DeleteTab,效果非常好。 对于Windows 10,此方法也将Windows从任务栏中隐藏,但在它之后,我在所有桌面上看到此窗口。我只想在一个桌面上看到这个窗口。 有人知道在Windows 10中从任务栏隐藏窗口并将此窗口保留在一个桌面上的方法吗? 下面你们可以看到,我在“在W

  • 我有一个前台服务,按下按钮后会显示一个窗口。有没有办法隐藏(或过度隐藏)服务窗口显示屏上的系统状态栏?有我可以用的旗子吗?我试着到处找,但运气不好。

  • 问题内容: 我想让我的程序显示在任务栏中,但仍然没有传统的Windows寄宿生。我该怎么办?我知道 self.overrideredirect(1) ,但是这从任务栏中删除了我的程序。 这适用于Windows 7。 问题答案: 我没有断言这是“正确”的方法,但是请看这是否对您有用:

  • 问题内容: 我正在制作音乐播放器GUI,但无法使其显示在任务栏或Alt- Tab中。我已将overrideredirect()设置为true以删除边框和标题。我也做到了,这样当用户执行“鼠标单击并拖动”操作时,窗口就会移动。这是代码: 有什么办法可以使其至少出现在Alt-Tab中? 问题答案: 经过一些研究,我发现有一种方法可以执行此操作,但是它涉及使用ctypes,并且是Windows的唯一解决