Laden...

Windows 7 - progressbar in taskbar button [Fortschrittsanzeige in der Superbar]

Erstellt von moson vor 14 Jahren Letzter Beitrag vor 14 Jahren 8.333 Views
moson Themenstarter:in
151 Beiträge seit 2003
vor 14 Jahren
Windows 7 - progressbar in taskbar button [Fortschrittsanzeige in der Superbar]

Beschreibung:

Ein nettes neues Feature in Windows 7 ist die Anzeige eines Fortschrittsbalkens in einem Taskbar button (siehe angehängtes Bild).

Dies kann wie folgt implementiert werden:

Nötige COM-Komponenten einbinden + interface, struct und enmus definieren:


using System;
using System.Runtime.InteropServices;

namespace MyApp
{
    [ComImportAttribute()]
    [GuidAttribute("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    interface ITaskbarList3
    {
        [PreserveSig]
        void HrInit();
        [PreserveSig]
        void AddTab(IntPtr hwnd);
        [PreserveSig]
        void DeleteTab(IntPtr hwnd);
        [PreserveSig]
        void ActivateTab(IntPtr hwnd);
        [PreserveSig]
        void SetActiveAlt(IntPtr hwnd);

        [PreserveSig]
        void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen);

        void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);
        void SetProgressState(IntPtr hwnd, TBPFLAG tbpFlags);
        void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI);
        void UnregisterTab(IntPtr hwndTab);
        void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore);
        void SetTabActive(IntPtr hwndTab, IntPtr hwndMDI, TBATFLAG tbatFlags);
        void ThumbBarAddButtons(IntPtr hwnd, uint cButtons, [MarshalAs(UnmanagedType.LPArray)] THUMBBUTTON[] pButtons);
        void ThumbBarUpdateButtons(IntPtr hwnd, uint cButtons, [MarshalAs(UnmanagedType.LPArray)] THUMBBUTTON[] pButtons);
        void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl);
        void SetOverlayIcon(IntPtr hwnd, IntPtr hIcon, [MarshalAs(UnmanagedType.LPWStr)] string pszDescription);
        void SetThumbnailTooltip(IntPtr hwnd, [MarshalAs(UnmanagedType.LPWStr)] string pszTip);
        void SetThumbnailClip(IntPtr hwnd, ref RECT prcClip);
    }
    [GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
    [ClassInterfaceAttribute(ClassInterfaceType.None)]
    [ComImportAttribute()]
    class TaskbarList { }
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    struct THUMBBUTTON
    {
        [MarshalAs(UnmanagedType.U4)]
        public THBMASK dwMask;
        public uint iId;
        public uint iBitmap;
        public IntPtr hIcon;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szTip;
        [MarshalAs(UnmanagedType.U4)]
        public THBFLAGS dwFlags;
    }
    enum THBMASK
    {
        THB_BITMAP = 0x1,
        THB_ICON = 0x2,
        THB_TOOLTIP = 0x4,
        THB_FLAGS = 0x8
    }

    enum THBFLAGS
    {
        THBF_ENABLED = 0,
        THBF_DISABLED = 0x1,
        THBF_DISMISSONCLICK = 0x2,
        THBF_NOBACKGROUND = 0x4,
        THBF_HIDDEN = 0x8
    }
    enum TBPFLAG
    {
        TBPF_NOPROGRESS = 0,
        TBPF_INDETERMINATE = 0x1,
        TBPF_NORMAL = 0x2,
        TBPF_ERROR = 0x4,
        TBPF_PAUSED = 0x8
    }
    enum TBATFLAG
    {
        TBATF_USEMDITHUMBNAIL = 0x1,
        TBATF_USEMDILIVEPREVIEW = 0x2
    }
    struct RECT
    {
        public int left;
        public int top;
        public int right;
        public int bottom;

        public RECT(int left, int top, int right, int bottom)
        {
            this.left = left;
            this.top = top;
            this.right = right;
            this.bottom = bottom;
        }
    }
}

Objekt von TaskbarList erstellen:


ITaskbarList3 tbl = (ITaskbarList3)new TaskbarList();

Progress ändern mittels:


tbl.SetProgressValue(this.Handle, 70 /*Angezeigter Wert*/, 100 /*Maximaler Wert*/);

Progressbar style deaktivieren mittels:


tbl.SetProgressState(this.Handle, TBPFLAG.TBPF_NOPROGRESS);

Weitere Informationen:

Viel Spaß damit,
moson

btw.: Im Interface sind noch einige andere Spielereien definiert, einfach mal rumspielen...
Schlagwörter: Windows 7, Taskbar, progressbar, progress, taskbarbutton, superbar

F
258 Beiträge seit 2008
vor 14 Jahren

Oder einfach diese Microsoft Lib verwenden.

Fabi

M
120 Beiträge seit 2009
vor 14 Jahren

Oder einfach diese
>
verwenden.

Wobei man die Lizenzbedingungen prüfen sollte und beachten sollte, dass das auf Framework 3.5 ausgelegt ist. Davon abgesehen, dass die für die meisten Sachen Overkill sein dürfte 😉 (aber das ist ja Auslegungssache).

F
258 Beiträge seit 2008
vor 14 Jahren

Wobei man die Lizenzbedingungen prüfen sollte und beachten sollte, dass das auf Framework 3.5 ausgelegt ist. Davon abgesehen, dass die für die meisten Sachen Overkill sein dürfte 😉 (aber das ist ja Auslegungssache).

Stimmt, in der Bibliothek sind aber so ziemlich alle neuen Windows 7 Funktionen enthalten. Also auch alles zu den Jumplists und IconOverlays, etc...

Fabi

U
208 Beiträge seit 2008
vor 14 Jahren

Oder noch einfacher: Windows 7 Progress Bar. Wunderbar einfach in ein ProgressBar-Control gewrappt. 😃