UltimateZoneBuilder/Source/Tools/Updater/Helpers/TaskbarProgress.cs
2017-01-15 00:35:40 +02:00

99 lines
2.4 KiB
C#
Executable file

#region ======================== Namespaces
using System;
using System.Runtime.InteropServices;
#endregion
namespace mxd.GZDBUpdater
{
// http://stackoverflow.com/questions/1295890/windows-7-progress-bar-in-taskbar-in-c
public static class TaskbarProgress
{
#region ======================== TaskbarInstance
public enum TaskbarStates
{
NoProgress = 0,
Indeterminate = 0x1,
Normal = 0x2,
Error = 0x4,
Paused = 0x8
}
[ComImportAttribute]
[GuidAttribute("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
private 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);
// ITaskbarList2
[PreserveSig]
void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen);
// ITaskbarList3
[PreserveSig]
void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);
[PreserveSig]
void SetProgressState(IntPtr hwnd, TaskbarStates state);
}
[GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComImportAttribute]
private class TaskbarInstance
{
}
#endregion
#region ======================== Variables
private static ITaskbarList3 taskbarinstance;
private static bool taskbarsupported; //mxd. Environment.OSVersion.Version won't save us here...
private static bool checkperformed;
#endregion
#region ======================== Methods
public static void SetState(IntPtr windowHandle, TaskbarStates taskbarState)
{
if(TaskBarSupported()) taskbarinstance.SetProgressState(windowHandle, taskbarState);
}
public static void SetValue(IntPtr windowHandle, double progressValue, double progressMax)
{
if(TaskBarSupported()) taskbarinstance.SetProgressValue(windowHandle, (ulong)progressValue, (ulong)progressMax);
}
//mxd
private static bool TaskBarSupported()
{
if(!checkperformed)
{
checkperformed = true;
taskbarsupported = true;
try { taskbarinstance = (ITaskbarList3)new TaskbarInstance(); }
catch { taskbarsupported = false; }
}
return taskbarsupported;
}
#endregion
}
}