.net user32.dll FlashWindow的托管替代方案
在闪烁窗口标题栏和相应任务栏按钮的.Net应用程序中,为了吸引用户的注意,使用了如下p/Invoke代码:.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)
[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的首选框架
在Linux中,这种行为再次变得支离破碎,因为许多框架根本没有任务栏的概念,人们希望您能够很好地使用您所在的任何框架。对于您希望做的事情,没有管理的等价物。在不讨论这是否是一个好主意的情况下,我想到了几个主意,没有一个像FlashWindow那样优雅和简单
免责声明:我不知道这些将如何在非Windows操作系统上工作,但我只是出于托管替代品的利益而提供它们。谢谢。您的答案绝对正确,但在可用性测试之后,我们确实希望使用“FlashWindow”(或等效工具)。我们不是用它来通知发生了什么,而是用它来指示发生了什么。老实说,我们还没有真正考虑过MacOS X。但是,我们不希望知道我们的客户使用的是.Net还是Mono,因此,至少在最初,我们希望提供一个与这两个应用程序同等工作的应用程序。如果我的问题的答案是“做不到”,那很好——但如果可以做到,那就是我想做的!我可以想象,使用可可粉和一些洞穴探险的组合,你可以实现码头反弹。这里有一个指针,指向您如何在java中实现它,我想在coco中实现它也是类似的。我在linux上的GUI经验很少,所以我不知道从哪里开始,但Gnome的HIG:和KDE:KDE的错误链接对不起,应该是:有人要说明为什么是-1吗?我们曾考虑过像(1)和(2)这样的想法,但都不是理想的!(3) 虽然不能完全满足我的要求,但它激发了一种可能的解决方案,我将对此进行测试。我知道我们的应用程序中当前的活动表单(如果我们的应用程序根本没有焦点,那么用户就不关心了,因此我们不需要做任何事情),因此我们可以交替激活“闪烁”表单和用户的活动表单。我希望没有副作用…四年后更新。。。在这个特定的应用程序中,我们最终做的是在通常的控件颜色和黄色之间闪烁窗口的背景,而不是标题栏。没有副作用,看起来很丑,起作用了。随后的版本有一个部分重新设计的GUI,在其中我们消除了提供这种可视通知的需要。