Articles of trayicon

系统托盘应用程序Linux Qt / C ++

我正在用Qt编写一个使用系统托盘的应用程序。 我已经使用示例中所示的QSystemTrayIcon类实现了系统托盘,但它与我的计算机上存在的其他系统托盘图标没有相同的行为。 例如,我在Ubuntu 12.04上安装了Spotify,并显示带有下拉菜单的系统托盘图标。 用我的应用程序,它显示一个带有上下文菜单的系统托盘图标,这意味着您必须右键单击它以使菜单处于活动状态。 使用Spotify,所有需要完成的工作就是点击图标并显示菜单。 我能做些什么来获得Ubuntu本地系统托盘图标? 我很喜欢使用X11 / Linux的特定代码,而不是内置的Qt函数。 非常感谢。 这是我的代码: void MainWindow::closeEvent(QCloseEvent *event) { if (trayIcon->isVisible()) { hide(); event->ignore(); } } void MainWindow::createActions() { restoreAction = new QAction(tr("&Show"), this); connect(restoreAction, SIGNAL(triggered()), this, SLOT(show())); quitAction = new QAction(tr("&Exit"), this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); } void MainWindow::createTrayIcon() { trayIconMenu = new QMenu(this); accountsMenu = trayIconMenu->addMenu(tr("Accounts")); […]

无论如何,当在托盘图标上显示上下文菜单时,停止Windows将应用程序放在前面?

如果我们在SetForegroundWindow中显示这个上下文菜单并把它放在前面,我们正在遇到这个烦人的问题,即我们在托盘图标上有一个上下文菜单。 这真的很烦人,根本不是我们想要的。 有没有解决办法,我注意到,Outlook MS Messenger和其他MS应用程序不受这个,也许他们没有使用标准的菜单,并不得不写自己的…为什么不释放这个代码,如果他们有? 本文介绍了“asdevise”行为: 通知图标菜单不能正常工作 编辑我们使用的是C ++ / Win32格式,所以我们使用TrackPopupMenu。

TrackPopupMenu会“伤害”我的HMENU吗?

部屋。 最后,在大量的摆弄之后,我得到了一个.rc加载的上下文菜单,用于我的托盘通知图标的工作。 (基于对话框的Windows API应用程序,没有MFC)。 但是,在各种示例和用法演示中,我总是看到在调用TrackPopupMenu() 之前/之后正在创buildHMENU ( CreateMenu() , LoadMenu() )并销毁( DestroyMenu() TrackPopupMenu() 。 通知图标的popup式菜单就像MSDN上没有logging的一样(至less我没有发现关于它们的单个段落)。 直观上,我把LoadMenu()放在WM_INITDIALOG的消息处理中,并存储HMENU ,所以我不必每次创build和销毁菜单。 正如我所说,我没有发现任何类似的做法,我觉得有点耐人寻味。 使用菜单或应用程序时,我的HMENU是否可能会“损坏”? 还是像我一样去做(好的,边际的)额外的performance是安全的? INT_PTR CALLBACK MainDlg(HWND …, UINT, WPARAM, LPARAM) { switch (message) { case WM_INITDIALOG: … HMENU hMenuBar = LoadMenu(hInst, MAKEINTRESOURCE(IDR_NOTIFYMENU)); hNotifyMenu = GetSubMenu(hMenuBar, 0); … break; … case WM_NOTIFYICON: switch (lParam) { case WM_RBUTTONUP: // there […]

我怎样才能让窗户看起来像一个框架?

它应该看起来像点击托盘中的“操作中心”,“电源”,“networking”或“声音”图标时出现的小框。 它需要没有标题栏的玻璃边框。 它也需要是一个固定的大小,不能resize。 感谢任何能提供帮助的人! 🙂

多个窗口,单个托盘图标

我的目标是为我的应用程序的所有窗口提供一个图标。 经过一番阅读,我的理解是通过Shell_NotifyIcon()来创build托盘图标。 这个函数得到一个包含一个hWnd字段的NOTIFYICONDATA结构。 系统使用此HWND通知相应的托盘图标事件窗口。 这些事件是通过使用SetWindowLongPtr()在窗口上设置的WindowProccallback来处理的。 因此我的问题是: 一个图标如何通知我的应用程序的所有窗口说左键单击? 我可以Shell_NotifyIcon()多次与不同的NOTIFYICONDATA结构,每个具有不同的hWnd ,但具有相同的图标? 如果注册创build托盘图标的原始窗口被破坏,该怎么办? 将创build一个隐藏的代理窗口是一个合适的解决scheme 一些背景:我的应用程序使用C调用WinAPI(使用js-ctypes),理想情况下可以在XP上运行所有Windows版本。

如何检查NotifyIcon是否隐藏

我不想强制它是可见的,我只是想检查它是否被Windows隐藏。 Windows默认情况下,隐藏系统图标(操作中心,电池,networking,声音,date和时间)以外的托盘图标。

你可以有一个只包含一个托盘(通知)图标的win32程序吗?

我有一个程序,字面上由一个托盘图标组成。 不需要GUI。 但是,在编写win32代码时,是否仍然需要初始化一个hWnd对象与托盘图标关联? 例如,将NOTIFYICONDATA hWnd字段指向窗口句柄是正常的。 喜欢 nid.hWnd = hwnd; 从本质上讲,如果我设置,我的图标是否仍然可以接收消息 nid.hwnd = NULL;

从通知区域删除NotifyIcon

当应用程序突然终止时,是否可以从通知区域(系统托盘)中删除NotifyIcon ? 如果不是,下次运行应该如何删除它?

Qt应用程序停止后closures托盘图标

我在Windows下的托盘图标有点问题。 Qt应用程序停止(正常退出)后,图标仍然保留在系统栏中。 只有当我将鼠标移到它上面时,它才消失。 我试图隐藏在我的窗口的析构函数,但它失败了:我试过.setVisible(false) 。 有任何想法吗? 谢谢。 PS我记得我有与SWT / Java相同的问题。

正确的方法来激活我的MainForm从一个NotifyIcon,如果它没有集中已经

我只想用托盘通知图标replace我的winforms应用程序的任务栏button。 这意味着,如果用户左键单击该图标,则表单应该被激活,否则将被最小化或隐藏。 我阅读了很多关于正确使用NotifyIcon的文章,似乎我不得不接受一个黑客解决scheme。 那么,最合适的方法是什么? 我主要是为了运行,但现在我被困在检测,如果我的表单已被激活 – 因为当单击图标,表单失去焦点,所以我不能检查Focused属性。 下面的代码还没有解决这个问题,所以如果窗体只是被其他窗口隐藏,你必须点击2次,因为第一次点击最小化。 如何改进? private void FormMain_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) Hide(); } private void notifyIcon_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) if (WindowState == FormWindowState.Minimized) { WindowState = FormWindowState.Normal; Show(); Activate(); } else { Hide(); WindowState = FormWindowState.Minimized; } } (我也不明白为什么Click事件触发右键单击,这已经打开我的情况下的上下文菜单…) (当然,最好有一个适当的最小化animation,但这里还有其他的问题,这个问题没有真正解决) (我知道我说的Focused […]