问题标签 [notifyicon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1658 浏览

c++ - 即使当前正在运行全屏应用程序,如何显示通知?

我的程序需要在预定的时间间隔内显示一次通知。在 Windows 下,Shell_NotifyIcon 可以很好地完成这项工作,只是当用户运行全屏应用程序时,通知不会显示。尽管在大多数情况下这可能是正确的,但在我的情况下,我需要确保即使用户在全屏模式下运行程序(例如视频游戏)也能看到通知,但不会导致完整-屏幕应用程序被最小化或以其他方式干预用户玩游戏。就像 Skype 在收到消息时所做的一样。如何做到这一点?
平台:Windows、Mac OS X

0 投票
1 回答
2050 浏览

c# - 如果 Lt-Click 或 Rt-Click 在通知图标上,如何获得不同的上下文菜单?

我有一个基于系统托盘的应用程序。如果您右键单击它,我有一个不错的上下文菜单,但是如果您左键单击它,我希望显示一个不同的上下文菜单。现在我让不同的菜单显示出来

这会使菜单显示出来,但单击菜单并不会使其消失,使菜单消失的唯一方法是单击某个项目或单击托盘图标。

我也想出了这个技巧,但它确实感觉它是正确的方法。

这是正确的方法还是有更优雅的方法?

0 投票
2 回答
1138 浏览

c# - 从另一个类调用 NotifyIcon.ShowBalloonTip()

我正在用 C# 开发一个 Windows 窗体应用程序。我有一个名为 MainWindow 的主窗体和一个名为 notifyIcon 的 NotifyIcon 对象,它属于 MainWindow 类。

我使用其他类的 notifyIcon 的最佳方式是什么?

我知道,没有实例,我只能访问类的公共静态成员,但如果我将 notifyIcon 设置为公共静态,它将停止在 MainWindow 上工作。

有任何想法吗?

0 投票
2 回答
1394 浏览

c# - 启动时的通知图标

我试图在 Windows 启动时使用该NotifyIcon组件制作我的程序的可见托盘图标。

该程序本身运行良好,并且显示了托盘图标。

但是,当我将程序置于计算机启动时,托盘图标并不总是出现,而程序本身运行时没有任何问题,并且它的主窗口是可见的。

这里不涉及自定义代码,所有代码都是自动生成的。

在 Windows 7 旗舰版上运行。

我该怎么做才能使托盘图标始终显示在 Windows 启动中?

0 投票
1 回答
740 浏览

c++ - Windows 7 NotifyIcon GUID 欺骗保护

我目前正在学习 WINAPI 的一些不同方面,包括 Windows 7 中引入的功能。其中之一是使用 GUID 作为通知图标的标识符。

可以在MSDN上阅读,GUID 通过路径绑定到可执行文件,第一次添加通知图标。这个有问题的页面承诺在 Shell_Notifyicon() 的文档中提供有关该问题的更多信息,但我在那里找不到任何进一步的信息。

用户应该如何从已移动的可执行文件中显示通知图标?

0 投票
3 回答
1156 浏览

windows-services - Windows 服务或托盘/NotifyIcon?

我想编写一个应用程序,给定一些网络输入,模拟鼠标移动、点击和键盘输入。我如何以及为什么要这样做是一个不同的讨论:-) 我想从 SO 那里听到的是,对于这样的应用程序/服务来说,什么是更可取的模型?

  • 我应该让一个作为系统运行在后台的 Windows 服务吗?
  • 或者我应该制作一个位于托盘中的托盘应用程序来监听和操纵用户的输入?

我还没有开始研究它,所以我想象的一些事情会让我感到困惑,这与没有交互式会话和/或权限的服务有关。

有什么我应该预料或记住的吗?

0 投票
3 回答
1503 浏览

c# - 从 NotifyIcon 激活时防止 form.Show() 上的动画

我有一个非常典型的 hackish 解决方案,用于在 C# 中最小化系统托盘:

理想情况下,我希望我的应用程序在最小化到系统托盘或从系统托盘重新打开时消失/重新出现。最小化到系统托盘按预期工作——窗口立即消失,并出现一个新的托盘图标。

但是,双击该图标会产生一些非常奇怪的效果。窗口经历了一个调整大小动画到它的位置——窗口似乎从屏幕的一个完全随机的角落飞入。

我不想要那个。我只想要Minimize > -Poof- Disappear并且Double-click > -Poof- Appear没有动画或延迟或任何类似的东西。

为什么这段代码有动画?如果我Form.Show()在任何其他上下文中调用,窗口会自动显示为我想要的,但是当从 NotifyIcon 调用时,它的行为很奇怪。我认为这可能是这WindowState = FormWindowState.Normal条线,但如果我删除它,窗口就不会被带到前台。

编辑:这个问题似乎与操作系统和主题有关。这个问题在 Windows XP 中似乎不存在,但很难说,因为我的虚拟机有点滞后。在 Windows 7 Aero 中,会出现任意离屏位置问题。在 Windows 7 Basic/Classic 中,它最小化到任务栏,并从其在任务栏中的旧位置重新出现(好像它实际上是最小化到任务栏,而不是系统托盘)。我还没有在 Vista 上测试过。有小费吗?

0 投票
1 回答
263 浏览

c# - 为什么我不能让我在另一个类中实现的 NotifyIcon 在退出时消失?

以下是新制作的 Windows 窗体项目中的一些代码,没有其他任何更改:

从我所看到的,在 中protected virtual void DisposeNotifyIcon当它被执行时已经被释放(解释了为什么我在那里放了一个 try/catch 块),所以我不能对它的图标做任何事情。

那么如何让它消失呢?

0 投票
1 回答
827 浏览

.net - 尝试显示通知图标的菜单条时,不断收到“跨线程操作无效”

这不是常规的“Corss-Thread opeartion”BS,所以请不要发布明显的解决方案。

这是让我疯狂好几天的事情。

我有一个NotifyIcon, 有一个绑定的ContextMenuStrip. 一切正常,但有时(我不记得重现这个的确切步骤)我得到了跨线程异常。我对ContextMenuStrip/NotifyIcon的所有访问都用 Invoke cr*p 填充,但仍然 - 当用户右键单击通知图标时 - 引发异常。

这是异常的完整数据:

Message:跨线程操作无效:控件''从创建它的线程以外的线程访问。

Call stack

在 System.Windows.Forms.Control.get_Handle()

在 System.Windows.Forms.Control.SetBoundsCore(Int32 x,Int32 y,Int32 宽度,Int32 高度,BoundsSpecified 指定)

在 System.Windows.Forms.ToolStrip.SetBoundsCore(Int32 x,Int32 y,Int32 宽度,Int32 高度,BoundsSpecified 指定)

在 System.Windows.Forms.ToolStripDropDown.SetBoundsCore(Int32 x,Int32 y,Int32 宽度,Int32 高度,BoundsSpecified 指定)

在 System.Windows.Forms.Control.SetBounds(Int32 x,Int32 y,Int32 宽度,Int32 高度,BoundsSpecified 指定)

在 System.Windows.Forms.Control.set_Location(点值)

在 System.Windows.Forms.ToolStripDropDown.Show(Int32 x,Int32 y)

在 System.Windows.Forms.ContextMenuStrip.ShowInTaskbar(Int32 x,Int32 y)

在 System.Windows.Forms.NotifyIcon.ShowContextMenu()

在 System.Windows.Forms.NotifyIcon.WndProc(消息和消息)

在 System.Windows.Forms.NotifyIcon.NotifyIconNativeWindow.WndProc(消息和 m)

在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)

在 System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG 和 msg,HandleRef hwnd,Int32 msgMin,Int32 msgMax,Int32 删除)

在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID,Int32 原因,Int32 pvLoopData)

在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)

在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)

在 System.Windows.Forms.Application.Run(窗体 mainForm)

在 D:\SDMS14SP2\StarLIMS.Grabber\StarLIMS.Grabber.Manager\Program.cs:line 34 中的 StarLIMS.Grabber.Manager.Program.Main(String[] args)

在 System.AppDomain._nExecuteAssembly(程序集程序集,字符串 [] 参数)

在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args)

在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态)

在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart()

0 投票
2 回答
3672 浏览

wpf - 确定托盘图标的位置

我的应用程序设计为位于系统托盘中,其行为类似于 Windows 7 中的网络/音量/电源/操作中心托盘项目(以及 Windows Vista 中的等效项目)。也就是说,单击托盘图标时它变得可见,而当失去焦点时它变得隐藏。

该应用程序是用 WPF 编写的,但我目前正在使用 WinForms 中的 NotifyIcon 作为托盘图标。

我想知道是否有人对我如何确定我的应用程序托盘图标的位置(即屏幕坐标)有任何建议。默认的 Windows Vista/7 托盘项目有一些方法可以做到这一点,因为弹出窗口在相关托盘图标上方居中对齐。

在 Vista 中,这不是什么大问题:我将应用程序永久设置在右下角,这看起来很好(尽管没有包含任务栏未放置在屏幕底部的情况的逻辑) )。但是,在 Windows 7 中,我的应用程序最终会遮挡新的系统托盘弹出框,而不是像音量控制等那样悬停在它上方。

到目前为止,我在搜索中看到的最佳解决方案是处理 NotifyIcon 上的鼠标向上事件并使用鼠标坐标来确定图标的位置。我认为除非有人有更好的主意,否则我最终会使用此方法,尽管它并不理想,因为位置会根据用户单击的图标内的位置而略有不同。