我正试图让我的吐司窗口与托盘气球笔尖完全相同。它必须留在每个窗口前面而不是偷走焦点。但是,当我按下Windows 7右下角的显示桌面按钮并在5秒后显示此吐司窗口时,它不会显示在我的屏幕上。但是当我在任务栏中选择另一个窗口时,它会在之后出现。
当我使用最顶级的吐司形式时,它总是正确显示但是它会从直接游戏等中抢走焦点并返回到桌面,因此我无法使用最顶层。
这就是我正在做的事情:
NotificationForm form = new NotificationForm(5000, new Size(400, 300), img, url);
NativeMethods.ShowWindow(form.Handle, (int)WindowShowStyle.ShowNoActivate);
NativeMethods.SetWindowPos(form.Handle, (IntPtr)SpecialWindowHandles.HWND_TOP, 0, 0, 0, 0,
SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOSIZE | SetWindowPosFlags.SWP_NOACTIVATE);
此处的完整源代码:
https://github.com/ShareX/ShareX/blob/master/ShareX/Forms/NotificationForm.cs
我认为Windows气球提示使用最顶级,并且仍然设法在播放全屏直接游戏时不会窃取焦点。不确定它是如何工作的。
答案 0 :(得分:0)
如果我没弄错的话,我认为Windows气球提示实际上并不是Windows。我认为他们使用桌面“窗口”并直接绘制到屏幕上。也许看看试图找到活动窗口并直接在其上绘制“吐司”,如果它的全屏而不是创建另一个窗口?我曾经为CRM套件做了类似的事情,我们有一个全屏视图,我们希望为视力受损的CSR提供可访问性覆盖。以下是我为实现这一目标所做的工作:
它不是特别漂亮,但对我来说效果还不错。