【发布时间】:2023-03-26 11:03:01
【问题描述】:
我使用 Hardcodet.Wpf.TaskbarNotification 创建托盘菜单,但我遇到了一些问题,如果我的应用程序(进程)隐藏在托盘中,如何从其他进程打开它
我用过这个方法,但运气不好
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern IntPtr SetFocus(HandleRef hWnd);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int cmd);
我已经将事件 Activated 添加到 MainWindow 和 GotFocus,Loaded 到 TaskbarIcon(TaskBar WPF 元素),但是这些方法(来自 user32)没有触发任何事件(它有效当应用程序最小化时,而不是何时隐藏到托盘)
知道我需要做什么吗?
更新:
它不是重复的,在原帖中有描述如何使用互斥锁,我已经做过了。我需要“带到前面”,激活或触发来自我的应用程序的其他实例的任何事件,当第一个实例在托盘中时,当第二个实例创建时只显示MessageBox,并且第一个实例最小化,该帖子很容易要做,我有比原帖中描述的更难的任务
【问题讨论】:
-
应用程序不会隐藏在托盘中。托盘图标是一种资源,就像表单本身一样。应用程序仍在运行,但它的表单被隐藏或可能根本没有表单。只需显示您想要响应菜单点击的表单,就像响应按钮或菜单点击一样,例如使用
Show()或ShowDialog()。 -
如果您创建了一个表单并将其最小化,请恢复它。无需调用任何互操作方法或处理任何事件
-
@PanagiotisKanavos 当
Hardcodet.Wpf.TaskbarNotificationlibrary 将进程 (1) 移动到托盘时,我需要将进程 (1) 的主窗口从其他进程 (2) 移到前面 -
@PanagiotisKanavos 好的,我需要从其他进程触发我的应用程序的任何事件,该怎么做?
-
没有“移动”到托盘。 Hardcodet.Wpf.TaskbarNotification创建应用程序的托盘图标和菜单。不需要其他过程。 相同进程应该包含任务栏组件和你要使用的表单
标签: c# wpf taskbar system-tray