标签: systray

您可以向Windows资源管理器发送信号以刷新系统托盘图标吗?

这个问题困扰了我很长一段时间,这真的很烦人.

每次我在重新启动/重启后登录时,资源管理器都需要一些时间才能显示.我已经采取了等待所有服务启动然后我登录的步骤,但它没有任何区别.结果始终相同:即使应用程序已启动,某些图标也不会显示.

我已经挖了一些代码,让一个应用程序"粘贴"在那里的一个图标,但是有一个API调用可以执行,所以资源管理器重新读取所有图标信息?像无效或重绘或类似的东西?


显然,看起来乔恩是对的,这是不可能做到的.

我遵循了Bob Dizzle和Mark Ransom代码并构建了这个(Delphi Code):

procedure Refresh;
var
  hSysTray: THandle;
begin
  hSysTray := GetSystrayHandle;
  SendMessage(hSysTray, WM_PAINT, 0, 0);
end;

function GetSystrayHandle: THandle;
var
  hTray, hNotify, hSysPager: THandle;
begin
  hTray := FindWindow('Shell_TrayWnd', '');
  if hTray = 0 then
  begin
    Result := hTray;
    exit;
  end;

  hNotify := FindWindowEx(hTray, 0, 'TrayNotifyWnd', '');
  if hNotify = 0 then
  begin
    Result := hNotify;
    exit;
  end;

  hSyspager := FindWindowEx(hNotify, 0, 'SysPager', '');
  if hSyspager = 0 then
  begin
    Result := hSyspager;
    exit;
  end; …
Run Code Online (Sandbox Code Playgroud)

icons windows-explorer system-tray systray

11
推荐指数
2
解决办法
2万
查看次数

QT Systray图标出现在Ubuntu上的启动器旁边而不是面板上

我是QT的新手,需要使用app-indicator构建应用程序.由于QT似乎比GTK +更容易,我在QT中制作它.

我会提到我已经安装了sni-qt,并且vlc和skype的app指示符在面板上显示正常.我在Ubuntu 13.04 64位上使用QT5.

我一步一步地遵循了本教程:http://qt-project.org/doc/qt-4.8/desktop-systray.html

但是当我运行它时,它出现的方式(十字架是我正在使用的图标):

http://i.stack.imgur.com/4bT33.png

我该如何解决?

ubuntu qt systray appindicator qt5

10
推荐指数
2
解决办法
3365
查看次数

一起运行 Tkinter 窗口和 PysTray 图标

我正在构建一个 tkinter gui 项目,并且正在寻找使用 tkinter 窗口运行托盘图标的方法。
我发现 Pystray 库可以做到这一点,但是现在我想弄清楚如何将这个库(托盘图标)与 tkinter 窗口一起使用,
我在用户退出 winodw 时进行了设置,它只会退出窗口:
self.protocol('WM_DELETE_WINDOW', self.withdraw)
我想用托盘图标把它带回来..有人知道怎么做吗?
编辑:到目前为止,我只写了这段代码(它们没有一起运行,但也很好):

from pystray import MenuItem as item
import pystray
from PIL import Image
import tkinter as tk

def quit_window(icon, item):
    icon.stop()
    #window.destroy()

def show_window(icon, item):
    icon.stop()
    #window.deiconify()

def withdraw_window(window):    
    window.withdraw()
    image = Image.open("image.ico")
    menu = (item('Quit', quit_window), item('Show', show_window))
    icon = pystray.Icon("name", image, "title", menu)
    icon.run()

def main():
    window = tk.Tk() 
    window.title("Welcome")
    window.protocol('WM_DELETE_WINDOW', lambda: withdraw_window(window))
    window.mainloop()
main()
Run Code Online (Sandbox Code Playgroud)

python tkinter systray

8
推荐指数
1
解决办法
2704
查看次数

图标存在于系统托盘中?

我想检查系统托盘中是否存在图标; 如果"X"应用程序在系统托盘区域中显示了他们的系统托盘图标.

我已经用Google搜索了有关如何执行此操作的信息,但我没有找到任何内容.

更新:

这是我在VB.NET中尝试翻译的罗伯特评论提供的网址的C#示例,但我不知道如何继续它.

Imports System.Runtime.InteropServices

Public Class Form1

    Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr

    Public Shared Function WindowHandle(sTitle As String) As Long
        Return FindWindow(vbNullString, sTitle)
    End Function


    Private Shared Function GetSystemTrayHandle() As IntPtr
        Dim hWndTray As IntPtr = FindWindow("Shell_TrayWnd", Nothing) …
Run Code Online (Sandbox Code Playgroud)

c# vb.net system-tray systray visual-studio

7
推荐指数
0
解决办法
350
查看次数

如何在没有在通知区域中添加图标的情况下Shell_NotifyIcon

MSDN关于通知和通知区域的文档非常明确,要求在通知区域中显示一个图标以显示通知:

要显示通知,您必须在通知区域中有一个图标.在某些情况下,例如Microsoft Communicator或电池级别,该图标已经存在.但是,在许多其他情况下,只有在显示通知所需的时间内,您才会向通知区域添加图标.

因为我不希望任何图标添加到通知区域,我想也许是"重用"现有的最有可能是那里的典型桌面.一个好的候选者可能是系统时钟.

我的问题是:

  1. 如何查找/枚举系统时钟的NOTIFYICONDATA结构(恢复时的AKA"日期和时间属性")?
  2. 有没有更好的方法来实现这一点(没有添加图标)?

winapi system-tray systray tooltip

6
推荐指数
1
解决办法
2818
查看次数

以编程方式强制图标在 Windows 7 中的“通知区域”/“系统托盘”中可见

Windows 7 允许用户在“通知区域”(又名系统托盘)中隐藏/显示图标。

默认情况下,我认为它们是隐藏的?

是否可以以编程方式(通过应用程序或通过安装程序)强制显示图标?

编辑:我不是在寻找覆盖用户请求的方法。我要问的是,有没有办法最初出现,即使用户然后永久地隐藏了你。即,我们可以让它“选择退出”而不是“选择加入”吗?

systray windows-7

5
推荐指数
1
解决办法
3464
查看次数

在java中为系统托盘创建单个实例

我正在使用java创建的桌面应用程序.我们正在为应用程序的Windows版本(用于在Windows OS上运行)工作.当我们运行我们的应用程序时,它会使用systemtray as在桌面上创建一个托盘图标

SystemTray tray = SystemTray.getSystemTray();
Run Code Online (Sandbox Code Playgroud)

我正在创建系统托盘的单个实例,我在应用程序的主类中创建.

我正在为我的应用程序创建exe.我的问题是当我运行我的应用程序的exe文件时,它每次都会创建托盘图标.

我想在我的应用程序中只在桌面上显示一个托盘图标并作为服务运行.只有在卸载应用程序时才会删除此图标.它应该在后台运行作为服务.

我没有任何方式可以帮助我将我的应用程序作为服务运行,并且应该只有一个实例在后台运行.

我想通过创建托盘图标作为服务来运行我的应用程序,并且应该存在单个实例.请指导我这个问题.

感谢您提前提出的所有宝贵建议.

java windows service systray single-instance

5
推荐指数
1
解决办法
1611
查看次数

Pystray 系统托盘图标

我想pystray在 python 中使用模块在 Windows 上创建一个系统托盘应用程序。直到现在我设法写了这个:

import pystray
from PIL import Image

image = Image.open("image.gif")
icon = pystray.Icon(name ="SPAM!", icon =image, title ="MOBASuite", menu =None)
icon.run()
Run Code Online (Sandbox Code Playgroud)

我很难弄清楚这是如何工作的。它在文档中没有明确解释。

右键单击图标后如何创建菜单以及如何将项目添加到菜单并设置默认项目,如果我用左键单击图标应该调用该菜单。以及如何更新图标?如果我运行此程序,则会创建 3 个图标,并且必须将鼠标悬停在它们上方以成为一个图标。当我关闭程序时,同样的事情。

python systray

5
推荐指数
1
解决办法
6134
查看次数

我可以重新获得丢失的正在运行的应用程序的系统托盘图标吗?

因为我终于得到了这个问题的答案:你可以向Windows资源管理器发送一个信号,让它刷新系统图标,询问有关摆脱死亡系统图标的问题,我想问相反的问题.

有没有办法"轻推"一个应用程序重新显示它的systray图标,如果它丢失了?

自从我安装Avira AV以来,它就发生在我的Apache Monitor上.
好的,被授予,它只能是副作用,但让运行的应用程序被杀死然后重新启动它是非常烦人的,因为它没有正确显示系统托盘图标.

提前谢谢,
Gus

delphi icons refresh systray

4
推荐指数
2
解决办法
2242
查看次数

在C#中清理/刷新托盘区域

当隐藏我的托盘图标并关闭应用程序时,有一半时间我的应用程序的托盘图标被"卡住".在托盘区域乱七八糟之前,意义不会消失.

我知道关闭期间清理我可以做trayIcon.Dispose()但是这只适用于我关闭我的C#应用​​程序时,而不适用于我隐藏(trayIcon.Visible = false)它的时候.

有没有人知道可以用来刷新托盘区域的黑客,或者根本不知道,或者只是确保我的图标实际上停止显示?

c# system-tray systray visual-studio c#-4.0

4
推荐指数
1
解决办法
2829
查看次数