J'essaie d'utiliser l'API Windows 7 Taskbar pour définir l'icône de surimpression de l'icône de l'application dans la barre des tâches. J'ai téléchargé les échantillons de Microsoft, mais je voulais extraire ce morceau de code pour éviter d'ajouter une référence à une énorme brique de code que je n'utiliserai pas.Windows 7 Barre des tâches SetOverlayIcon à partir de l'application WPF ne fonctionne pas
J'ai une application simple WPF dans VS 2010 sur Windows 7 x64.
code-behind pour mon Window1.xaml est comme ceci:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Interop;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private static ITaskbarList3 _taskbarList;
internal static ITaskbarList3 TaskbarList
{
get
{
if (_taskbarList == null)
{
if (_taskbarList == null)
{
_taskbarList = (ITaskbarList3)new CTaskbarList();
_taskbarList.HrInit();
}
}
return _taskbarList;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
TaskbarList.SetOverlayIcon(new WindowInteropHelper(Application.Current.MainWindow).Handle, SystemIcons.Question.Handle, "Test");
}
}
[ComImportAttribute()]
[GuidAttribute("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface ITaskbarList3
{
// ITaskbarList
[PreserveSig]
void HrInit();
[PreserveSig]
void AddTab(IntPtr hwnd);
[PreserveSig]
void DeleteTab(IntPtr hwnd);
[PreserveSig]
void ActivateTab(IntPtr hwnd);
[PreserveSig]
void SetActiveAlt(IntPtr hwnd);
void SetOverlayIcon(
IntPtr hwnd,
IntPtr hIcon,
[MarshalAs(UnmanagedType.LPWStr)] string pszDescription);
}
[GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComImportAttribute()]
internal class CTaskbarList { }
}
Lorsque je clique sur le bouton, rien ne se passe. Pas d'erreur. L'icône ne change pas.
Je me demande si je passe la poignée correcte à la méthode SetOverlayIcon.
Quelqu'un sait-il comment résoudre ce problème?
J'ai dû faire quelques modifications, mais cela a résolu mon problème. Merci. – MartinHN
Quelles modifications que vous avez fait? Il est intéressant de moi, parce que j'utilise ce code par moi-même (mais je l'utilise surtout pour la barre des tâches barre de progression). Je ne peux voir qu'un seul endroit douteux - les méthodes avec THUMBBUTTON. – arbiter