我的程序在系统托盘中放置一个图标,因为用户可以将其最小化.但是,如果应用程序崩溃,或者我阻止应用程序在VS中运行,它会在其中留下图标,直到我用鼠标悬停它.有时我会向下看,那里会有10个左右的图标.
我可以确保图标消失吗?
我试图在系统托盘中显示2-3个可更新的字符,而不是显示.ico文件 - 类似于CoreTemp在系统中显示温度时的操作尝试:
我在WinForms应用程序中使用NotifyIcon以及以下代码:
Font fontToUse = new Font("Microsoft Sans Serif", 8, FontStyle.Regular, GraphicsUnit.Pixel);
Brush brushToUse = new SolidBrush(Color.White);
Bitmap bitmapText = new Bitmap(16, 16);
Graphics g = Drawing.Graphics.FromImage(bitmapText);
IntPtr hIcon;
public void CreateTextIcon(string str)
{
g.Clear(Color.Transparent);
g.DrawString(str, fontToUse, brushToUse, -2, 5);
hIcon = (bitmapText.GetHicon);
NotifyIcon1.Icon = Drawing.Icon.FromHandle(hIcon);
DestroyIcon(hIcon.ToInt32);
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这产生的结果不如CoreTemp得到的结果:
您认为解决方案是增加字体大小,但超过8的任何内容都不适合图像.将位图从16x16增加到32x32也没有任何作用 - 它会调整大小.
然后就是我想要显示"8.55"而不是"55"的问题 - 图标周围有足够的空间但看起来无法使用.
有一个更好的方法吗?为什么Windows可以执行以下操作,但我不能?
更新:
感谢@NineBerry提供了一个很好的解决方案.要添加,我发现Tahoma是最好使用的字体.
我正在尝试使用Java在MACOS系统托盘中显示动画gif.我有正确显示的PNG图标,但是一旦我尝试将图标设置为动画gif(因此我可以显示旋转计时器),它就会变为空白并且在系统菜单托盘中不显示任何内容.
根据System Tray类的JavaDocs,setImage应该自动支持动画图像(如果给定)但它没有指定图像格式或在系统托盘中获取动画图标所需的任何其他内容.
有谁知道如何使这个工作?
我想在用户最小化或关闭表单时在系统托盘中添加应用程序.我已经为最小化案例做了这件事.任何人都可以告诉我,当我关闭表单时,如何保持我的应用程序运行并将其添加到系统托盘中?
public MainWindow()
{
InitializeComponent();
System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
ni.Icon = new System.Drawing.Icon(Helper.GetImagePath("appIcon.ico"));
ni.Visible = true;
ni.DoubleClick +=
delegate(object sender, EventArgs args)
{
this.Show();
this.WindowState = System.Windows.WindowState.Normal;
};
SetTheme();
}
protected override void OnStateChanged(EventArgs e)
{
if (WindowState == System.Windows.WindowState.Minimized)
this.Hide();
base.OnStateChanged(e);
}
Run Code Online (Sandbox Code Playgroud) 这个问题困扰了我很长一段时间,这真的很烦人.
每次我在重新启动/重启后登录时,资源管理器都需要一些时间才能显示.我已经采取了等待所有服务启动然后我登录的步骤,但它没有任何区别.结果始终相同:即使应用程序已启动,某些图标也不会显示.
我已经挖了一些代码,让一个应用程序"粘贴"在那里的一个图标,但是有一个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) Windows有"系统托盘",可存放时钟和运行良好的服务,如MSN,Steam等.
我想开发一个wxPython托盘应用程序,但我想知道它将如何移植到其他平台.每个平台上的托盘等价物是多少,以及支持Windows,OSX和Linux需要多少手动工作(特别是哪些shell最友好).
我正在研究Delphi程序,它将在"托盘"上显示一个图标.我正在"艰难的方式"(使用Shell_NotifyIcon api等,而不是组件,这里的原因除外).它工作正常,但有时似乎某些系统中的图标有点"模糊".现在,我已经尝试使用16x16 bmp,32x32等.似乎系统将其缩小到所需的大小,但结果根据操作系统版本(或者其他可能的东西)而有所不同....
您是否有任何关于BMP的最佳尺寸和颜色深度的经验,使用ShellI上的Shell_NotifyIcon提取并显示在托盘上?
当我点击标准最小化按钮时,如何最小化Chrome浏览器到托盘?
我不希望Chrome出现在任务栏中.
我们可以通过Chrome扩展程序代码实现此功能
trayicon google-chrome system-tray minimize google-chrome-extension
背景
我们有一个位于后台的应用程序,FileSystemWatcher用于监视新文件的文件夹,当出现新文件时,它会生成一个窗口.
我需要做的是为这个应用程序创建一个系统托盘图标,以便我们可以向它添加简单的上下文菜单项(能够关闭应用程序而不进入任务管理器是最大的一个).
题
所有关于如何实现系统托盘图标的搜索结果都指向如何将其添加到WPF窗口而不是应用程序本身的示例,因为我的应用程序没有主窗口并且在事件发生时生成窗口我该怎么办?实现这个?
我一直在尝试 Compose for Desktop,并且试图弄清楚 Jetbrain 如何设计Tray可组合项的样式。我假设这就是他们用来构建 Jetbrains Toolbox 的方法,因为他们写了一篇关于如何将 Toolbox 迁移到 Compose for Desktop 的文章(请参阅此处)。
图像来自 Ubuntu 22;我还没有测试过 Windows 或 Mac。