我想更改任务栏图标以在收到新邮件时通知用户,就像 Outlook 收到新邮件时通知用户一样。
我已经在网上搜索解决方案,这都是关于更改窗口图标,如下所示:
Uri iconUri = new Uri("Resources/envelop.ico", UriKind.Relative);
this.Icon = BitmapFrame.Create(iconUri);
它在 Visual Studio 上运行良好,但我发现它不会更改已部署应用程序上的任务栏,因为它是只读变量。更糟糕的是,它只更改了我无论如何都不想更改的左上角附加图标。
那么有没有办法做到呢? Outlook 做到了,Chrome 也做到了,所以一定有办法。
UPDATE
为了在我部署的应用程序上强制刷新图标,我必须固定/取消固定我的图标任务栏,不幸的是,这只是一个用户命令,所以我无法在 wpf 中以编程方式执行此操作,而不利用一些太不稳定的肮脏方式。
实际上,我正在尝试找到一种刷新图标缓存的方法,而无需为每个 Windows 操作系统或版本执行此操作。
这里有一个小工作演示做好工作!
添加图标:
选择 2 个图标(例如 Outlook Standard 和 Outlook Mail Received):
将其添加到您的后面的代码中MainWindow
public partial class MainWindow : Window
{
private int _imgId;
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
//Start timer to periodically change the App Icon:
new System.Threading.Thread(() =>
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 100;
timer.AutoReset = true;
timer.Elapsed += Timer_Elapsed;
timer.Start();
}).Start();
}
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
//Change AppIcon on UI-Thread
Dispatcher.Invoke(() =>
{
/* CHANGE YOUR ICONS HERE !!! */
BitmapSource ms_icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(Properties.Resources.Microsoft_logo.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
BitmapSource so_icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(Properties.Resources.images.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
if (_imgId == 0)
{
this.Icon = so_icon;
_imgId = 1;
}
else
{
this.Icon = ms_icon;
_imgId = 0;
}
});
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
}
}
将产生以下输出(每 100 毫秒切换一次):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)