.net user32.dll FlashWindow的托管替代方案

.net user32.dll FlashWindow的托管替代方案,.net,winapi,mono,pinvoke,.net,Winapi,Mono,Pinvoke,在闪烁窗口标题栏和相应任务栏按钮的.Net应用程序中,为了吸引用户的注意,使用了如下p/Invoke代码: [DllImport("user32.dll")] private static extern bool FlashWindow(IntPtr hwnd, bool bInvert); public static void FlashWindow(System.Windows.Forms.Form window) { FlashWindow(window.Handle, false)

在闪烁窗口标题栏和相应任务栏按钮的.Net应用程序中,为了吸引用户的注意,使用了如下p/Invoke代码:

[DllImport("user32.dll")]
private static extern bool FlashWindow(IntPtr hwnd, bool bInvert);

public static void FlashWindow(System.Windows.Forms.Form window)
{
  FlashWindow(window.Handle, false);
}

如何在不使用p/Invokes的情况下触发相同的效果?具体来说,.Net应用程序正在更新,以完全在Linux/Mac OS X和Mono上运行有没有办法构建一个与FlashWindow或FlashWindowEx相当的托管版本?

您应该注意,微软自己的建议是,除非事件确实需要立即关注,否则不应该这样做

如果用户只需要做一件事,不要闪烁任务栏按钮 激活程序、读取消息或查看状态变化

强烈建议,即使在跨平台应用程序中,也应遵循当前系统的UI准则。
在这种情况下,这取决于您试图做什么,但只是猜测一下:

  • 在Windows上,通知引出序号被视为

  • 在OSX上,许多应用程序使用。似乎有人

  • 在Linux中,这将非常依赖于底层GUI框架,因为GTK是mono的首选框架

如果你真的想做类似于闪烁窗口图标的事情,那么OSX上的等价物将是一个跳跃的停靠图标(同样,人)。我不知道那是不是用可可包的


在Linux中,这种行为再次变得支离破碎,因为许多框架根本没有任务栏的概念,人们希望您能够很好地使用您所在的任何框架。

对于您希望做的事情,没有管理的等价物。在不讨论这是否是一个好主意的情况下,我想到了几个主意,没有一个像FlashWindow那样优雅和简单

  • 使用计时器切换窗体的可见性。这将产生从任务栏中完全添加/删除表单的效果,但会引起注意

  • 使用计时器切换窗体的窗口状态(最小化/正常)。这也会引起你的注意,但可能不是一个好的方式

  • 创建一个单独的空白表单,ShowInTaskbar设置为false,不透明度为0。然后使用定时器交替激活空白窗体和主窗体。这将有闪烁主窗体标题栏的效果,但不会影响任务栏表示,因为另一个应用程序没有获得输入焦点


  • 免责声明:我不知道这些将如何在非Windows操作系统上工作,但我只是出于托管替代品的利益而提供它们。

    谢谢。您的答案绝对正确,但在可用性测试之后,我们确实希望使用“FlashWindow”(或等效工具)。我们不是用它来通知发生了什么,而是用它来指示发生了什么。老实说,我们还没有真正考虑过MacOS X。但是,我们不希望知道我们的客户使用的是.Net还是Mono,因此,至少在最初,我们希望提供一个与这两个应用程序同等工作的应用程序。如果我的问题的答案是“做不到”,那很好——但如果可以做到,那就是我想做的!我可以想象,使用可可粉和一些洞穴探险的组合,你可以实现码头反弹。这里有一个指针,指向您如何在java中实现它,我想在coco中实现它也是类似的。我在linux上的GUI经验很少,所以我不知道从哪里开始,但Gnome的HIG:和KDE:KDE的错误链接对不起,应该是:有人要说明为什么是-1吗?我们曾考虑过像(1)和(2)这样的想法,但都不是理想的!(3) 虽然不能完全满足我的要求,但它激发了一种可能的解决方案,我将对此进行测试。我知道我们的应用程序中当前的活动表单(如果我们的应用程序根本没有焦点,那么用户就不关心了,因此我们不需要做任何事情),因此我们可以交替激活“闪烁”表单和用户的活动表单。我希望没有副作用…四年后更新。。。在这个特定的应用程序中,我们最终做的是在通常的控件颜色和黄色之间闪烁窗口的背景,而不是标题栏。没有副作用,看起来很丑,起作用了。随后的版本有一个部分重新设计的GUI,在其中我们消除了提供这种可视通知的需要。